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


25

次のコマンドを使用して、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バイトとしてカウント?


5
好奇心が強いのですが、なぜそれらをI / Oとしてカウントすべきだと思いますか?
marcelm

1
@marcelmファイルR / W、ネットワークI / Oなど、すべての入出力がI / Oとしてカウントされるべきだと思います。
iBug

ただし、これらの操作はハードウェア(それぞれディスクとネットワークカード)へのI / Oを実行し、いくつかのI / Oバス(PCIエクスプレスなど)を経由する必要があり、これらすべてが重大なボトルネックになる可能性があります。たとえば、/dev/nullそのようなハードウェアに接続することはなく、I / Oバスを詰まらせないでください。極端に撮影。メモリへの/メモリからの読み取り/書き込みもI / Oですか?もちろん、これらの事柄について明確な描写はありません。すべては、あなたがこれらの事柄をどの視点で捉えるか、そしてその視点があなたにとってどれだけ役に立つかによって決まります。
marcelm

1
私の最初のコメントは、あなた(および他の人)にこれらの視点について考えさせ、あなたがあなたの視点を取っている理由を見つけることを意図したものです。私はあなたが間違っていることをほのめかすつもりはありません。私は状況がその白黒だとさえ思いません。しかし、個人的には、/dev/{null,zero}(通常はボトルネックではない)実際のハードウェア(ボトルネックになる可能性が高い)へのI / O統計にもっと興味があります。それは私の視点です:)
marcelm

1
@marcelmしかし、私は当初、すべてがI / Oであるread(2)と考えてwrite(2)いました。これは、それ自体の意味で非常に合理的です。
iBug

回答:


54

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

ではhtopIO_RBYTESIO_WBYTES示しread_bytesおよびwrite_bytesからフィールドを/proc/<pid>/io、そしてそれらのフィールドは、ブロック層を通過するバイトを測定します。/dev/zeroブロックレイヤーが関与しないため、そこからの読み取りは表示されません。

からのI / O /dev/zeroを表示するには、rcharおよびのwcharフィールドを見/proc/<pid>/ioて、htopas RCHARおよびに表示する必要がありますWCHAR

rchar:読み取られた文字

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

wchar:書き込まれた文字

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

man 5 procおよびman 1 htopを参照してください。


だそれはそうrcharと、wcharそのカウントがへの呼び出しからのバイトread(2)write(2)、右?
iBug

はい、そうです。
スティーブンキット

9
rcharの説明に関する誤解を招く表現について話してくださいread()間違いなく通過するものはすべて「ストレージから読み取られる」わけではありません!
イルカチュウ

2
@ilkkachu storage彼らは関係なく、問題のストレージは、物理または仮想またはmmap'dまたは仮想ソケットまたはL1キャッシュにあるかどうかの、「あらゆる考えられるバスライン」を意味する-それは、共有など、そのプログラムのメモリマップのちょうど何も外です
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.