/dev/zeroから読み取ったデータがIO_RBYTESとして計算されないのはなぜですか?

/dev/zeroから読み取ったデータがIO_RBYTESとして計算されないのはなぜですか?

次のコマンドを使用して、一部のLinux 4.xオペレーティングシステムでハードドライブを消去しています。

sudo sh -c 'pv -pterb /dev/zero > /dev/sda'

私は別のttyを開いて起動し、sudo htopこれを見つけました。

  PID USER      PRI  NI CPU%   RES   SHR   IO_RBYTES   IO_WBYTES S   TIME+  Command
 4598 root       20   0 15.5  1820  1596        4096    17223823 D  1:14.11 pv -pterb /dev/zero

値はIO_WBYTES正常に見えますが、IO_RBYTES4KiBのままで絶対に変更されません。

私は次のような他のプログラムを実行しました。

dd if=/dev/zero of=/dev/zero
cat /dev/zero > /dev/zero

IO_RBYTESそしてそれらのどれも多くの成果を出せなかったという事実に驚きましたIO_WBYTES

これが特定のプログラムに固有のものではないようですが、読み取りと書き込みがI / Oバイトとして計算されない/dev/zeroのはなぜですか?/dev/{zero,null}

答え1

I / Oとして計算されますが、表示されているフィールドで測定されたタイプではありません。

ブロックレイヤを通過するバイトを測定するhtopIO_RBYTESおよびのおよびフィールドをIO_WBYTES表示します。read_bytesブロックレイヤーは関連付けられていないため、そのレイヤーから読み取った内容は表示されません。write_bytes/proc/<pid>/io/dev/zero

のI / Oを表示するには、のと/dev/zeroフィールドを確認する必要があります。そのフィールドrcharはとのように表示されます。wchar/proc/<pid>/iohtopRCHARWCHAR

文字タイプ: 読んだ文字

この操作により、ストレージから読み込まれたバイト数が発生しました。これは単にプロセスに渡されるバイトの合計です。read(2)そして同様のシステムコール。これにはターミナルI / Oなどが含まれ、物理物理ディスクI / Oが必要かどうかに影響されません(読み取りはページキャッシュですでに満たされている可能性があります)。

文字タイプ: 書かれた文字

これにより、ディスクに書き込まれたか書き込まれなければならなかったバイト数。 rcharに似た警告がここに適用されます。

バラよりman 5 procそしてman 1 htopもっと学ぶ。

関連情報