iostat
のマニュアルページを調べていました。それによると、
%iowait
Show the percentage of time that the CPU or CPUs were idle during which the system
had an outstanding disk I/O request.
%idle
Show the percentage of time that the CPU or CPUs were idle during which the system
did not have an outstanding disk I/O request.
IostatがI/O要求が未処理であるかどうかをどのように判断するのか理解できませんでした。
iowaitは基本的に、処理されるデバイスに発行されたI/O要求の平均時間(ミリ秒単位)です。これには、キュー内のリクエストに費やされた時間とそれらのサービスに費やされた時間が含まれます。
Ioスケジューラーの前面からioが完了するまで、ioごとに測定されます。これは、スケジューラー、ドライバー、コントローラー、トランスポート(sanの場合)、および各ioを完了するために必要なストレージを介してかかる時間をカバーします。これは、ストレージによって完了されたI/O要求の平均時間(ミリ秒単位)であり、スケジューラーキュー内の要求によって費やされた時間と、ストレージがそれらを処理するために費やされた時間を含みます。
転送中のIOには複数のフェーズがあります。アプリケーションがIOを送信した後、リクエストが割り当てられます。リクエストが許可されると、カーネルはioを任意のIOにマージできるかどうかを確認します。既存のリクエストキュー。リクエストキューで費やされた時間は、合計サービス時間に追加されます。マージが完了した後、ioはストレージに送信されます。ストレージに圧力がかかっているか、IO数値の場合、IOは、ストレージからのサービスを受けるまで待機する必要があります。したがって、iostatが測定する待機フェーズは基本的に2つあります。
Procファイル/ proc/diskstatsは、この目的のために参照するファイルです。
カーネルに尋ねることによって。この情報は、/proc/stat
の最初の行に直接含まれています。 procドキュメント を参照してください。