
Webホスティング仮想サーバー(VPS)のディスクI / Oパフォーマンスを見ているので、「iostat」が提供するデータを理解するのに役立ちます。
以下は、「dd」を使用して単一の仮想ディスクに対して実行した非常に単純な順次読み取りです。
# dd if=/dev/sda1 of=/dev/null bs=16k count=102400
6400+0 records in
6400+0 records out
104857600 bytes (105 MB) copied, 7.91767 s, 13.2 MB/s
(私の考えには13.2MB/sはそんなに熱くないようです。)
このテストはシステムが非常に静かな状態で行われましたが、ddを実行したときにまだ正常な「静的」ロードがありました。
テスト中に「iostat -ktxz 5」を実行しました。以下はコマンドの出力です。 5秒のサンプルは、実行に「dd」がかかった時間内に完全に含まれていました。
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 12030.60 8.00 103.40 1.40 12135.20 36.00 232.27 2.60 23.77 9.54 99.96
私が直接調査した内容は次のとおりです。
ディスクは、本質的にディスクから順次読み取りを処理するために100%使用されています。
rkB/s は dd によって報告された 13.2MB/s に非常に近いです。
rkB/s を r/s で割った値は 117 kB です。これは avgrq-sz (セクタ単位) と同じ数です。 iostatが同じ計算を実行すると言いたいです。
"blockdev --getra /dev/sda"は、デバイスに256個のセクタで構成された先読みセットがあることを示します。これは平均要求サイズである117kBに非常に近いです。
だから私は次のように仮定します。
ddは16KB単位で読み取られます。
しかし、Linuxはすぐに128KBの先読みを実行します。
しかし、私が理解していないものは次のとおりです。
1000msを23.77msの待ち時間で割った値は、毎秒42の要求を提供しますが、r / sは103.40です。
avgqu-szが1でないのはなぜですか?私のddはシングルスレッドプロセスで、カーネルは一度に1つだけ先読みを呼び出しますか?
一方、avgqu-sz * 1000ms / 23.77msは、報告されたr/sに非常に近い109r/sを提供します。
これらのマージ要求は何ですか? rrqm/sは12,030?!?! 128kB先読みブロックまたはddによる16kBユーザーレベルの読み取りでは、これは理解できません。
現代のディスクとLinuxについて私が全く知らないいくつかの基本的なことがあるようです。 :(avgqu-szがコアである可能性があります。順方向検索キューにいつでも複数の要求があるのはなぜですか?