web-dev-qa-db-ja.com

mdの再同期によってiowaitが発生しないのはなぜですか?

%iowaitの定義を次のように知っています。

IO操作が完了するまで待機する必要があったため、CPUがアイドリング/ブロックに費やした時間。

次に、mdraid1と2つのディスクを備えた単純なLinuxシステムを取り上げます。 /proc/mdstatは、再同期が約120MB/sで実行されていることを示しています。これは、通常の回転中のSATAディスクに期待されるものに近い値です。

したがって、この場合、ディスクの速度が制限要因となります。したがって、上記の定義では、プロセスが短時間で終了しないため、iowaitはほぼ100%になると予想されます。

ただし、そうではありません。

avg-cpu:  %user   %Nice %system %iowait  %steal   %idle
           0,51    0,00    5,64    0,00    0,00   93,85

Iowaitはまったくなく、アイドル時間は実際には再同期がはるかに高速である可能性があることを私に示唆していますが、それは望まないことを決定しただけです(これは真実ではありません)。

私は何を誤解していますか?

1
dog

私の仮説は、それが適切なプロセスではないため(カーネルモジュールによって何かが行われる)、表示されないというものです。

Rsyncはmdカーネルモジュール内で発生する関数であるため、実際にはプロセス/スレッドがない(task_struct)。そのため、ランキュー内のディスクで待機している実際のLinuxプロセスはありません(再同期「ジョブ」は実際のプロセスではないため)。スケジューラーはランキューに基づいてiowaitを報告するため、このタスクによってiowaitが増加することはありません。

ディスクを頻繁に使用したい実際のプロセスを開始した場合、この再同期ジョブのためにディスクでさらに待機する可能性があり、iowaitが増加します。 (ただし、再同期の優先度が低い可能性があるため、これはまだ発生しない可能性があります)。

1
Kyle Brandt