web-dev-qa-db-ja.com

/ dev / zeroカウントをIO_RBYTESとして読み取らないのはなぜですか?

次のコマンドを使用して、一部のLinux 4.x OSのハードドライブを空にします。

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_RBYTESは4 KiBのままで、変更されることはありません。

私は他のいくつかのプログラムを実行しました、例えば

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

そして、それらのどれもIO_RBYTESまたはIO_WBYTESを大量に生成しないことに驚きました。

これは特定のプログラムに固有のものではないと思いますが、なぜ/dev/zeroから読み取って/dev/{zero,null}に書き込むのをI/Oバイトとしてカウントしないのですか?

25
iBug

これらはI/Oとしてカウントされますが、見ているフィールドによって測定されるタイプのものではありません。

htopでは、_IO_RBYTES_および_IO_WBYTES_は_read_bytes_の_write_bytes_および_/proc/<pid>/io_フィールドを示し、これらのフィールドはブロックレイヤーを通過するバイトを測定します。 _/dev/zero_はブロックレイヤーを含まないため、そこからの読み取りは表示されません。

_/dev/zero_からのI/Oを表示するには、_/proc/<pid>/io_のrcharフィールドとwcharフィールドを確認する必要があります。これらのフィールドは、htopRCHARおよびWCHARとして表示されます。

rchar:読み取った文字

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

wchar:書き込まれた文字

このタスクによってディスクに書き込まれた、またはディスクに書き込まれるバイト数。ここでも、rcharと同様の警告が適用されます。

詳細は _man 5 proc_ および _man 1 htop_ を参照してください。

54
Stephen Kitt