partedの罠2013/01/30今日は研究室の某ストレージの再設定をしてました。いい加減キレイサッパリ心も新たな気持ちで使い始めるべく設定設定。partedの使い方を自分がよくわかっていなかった、ということがわかったのでメモしておきます。/dev/sdb1、/dev/sdb2に対してIOを発行するとカタログの1/5くらいのIO性能しか出ない、というもの。OSのレベルでIOリクエストのremapが発生していたことが性能低下の原因でした。partedを使っているのですが、partedのmkpartはMB(メガバイト)とかGB(ギガバイト)を単位で指定できます。このMBが曲者で、ディスクの容量を語るときの10進接頭辞のメガバイト=10の6乗になっていました。普通にアラインメントされているだろうと思っていたら、全くそんなことはなかった、ということです。2進接頭辞のメガバイトを明示するためのメビバイト(MiB)も単位として使えるようになっていることがわかります。TiB思い込みって怖いですね、ほんと。IOリクエストがremapされているかどうか調べるblktraceを使うと、OSのレベルでIOリクエストの1個1個がどう処理されているかを調べることができます。いうのがそれぞれ処理内容を表していて、IO完了、IOディスパッチなどなどに対応します。これが、アラインメントされていないデバイスの場合には次のようになります。12207296(snipped)新たにAという処理が行われていることがわかります。これがIOのremap処理です。remap処理が入ると、なんかIO性能がガタっと落ちてしまうようです。暇な人はカーネルのソースを読んでなんで性能が落ちるのか教えてください。各パーティションに対してIOリクエストを出すとremapは発生していました。blktrace確認。Disqusツイート。