1

Linuxのプロセス状態についてもっと知るために、私はいくつかの実験を行っていました。

したがって、10億を超えるファイルを含むディレクトリ(big_dirという名前)があり(ディレクトリには再帰的に多くのサブディレクトリがあります)、tar -cv big_dir | ssh anotherServer "tar -xv -C big_dir"実行するtopと、tarプロセスはDステータスのままであることがわかりました。その間、tarコマンドはファイルのパスを出力し続けます。

ディスクI/Oを実行していたため、プロセスがDステータスであったことは知っていますが、なぜそのステータスがDとRの間で切り替わり続けなかったのでしょうか。ディレクトリの下にファイル名を印刷するには、CPUの計算が必要でしたね。それ以外の場合、findコマンドは、何かを出力する必要があることをどのように知ることができますか?

を実行するdd if=/dev/zero of=/dev/nullと、ddプロセスステータスは出力からRステータスに保たれtopます。しかし、なぜそれはDステータスではなかったのですか?いつもI/Oをしていませんでしたか?

4

2 に答える 2

3

/dev/zeroおよび/dev/null疑似デバイスです。したがって、背後に物理的なデバイスはありません。

私が行った場合

dd if=/dev/zero of=/tmp/zeroes

その後、Dステータスでtop表示されます。ただし、多くの時間をR(CPU時間)に費やします。プロセステーブルをサンプリングするだけなので、一時的な状態を確認するために、しばらくの間それを監視する必要がある場合があります。ddtop

上記のtarの例では、stdoutに出力される時間は、ディスク時間と比較してごくわずかであると思われます。stdoutへの出力には、ウィンドウシステムの書き込みも含まれ、その間、プロセスはスリープ状態になることにも注意してください。たとえば、私はyes現在実行しており、作業の大部分はXサーバーによって実行されています。プロセスは、私が(経由で)yes見ているほとんどの時間スリープしていますtop

于 2012-12-28T11:27:31.070 に答える
2

tarプロセスはSOMETIMESでRに移行すると確信していますが、特にネットワークを介してデータを送信しているため、それほど多くのことを行わないため、おそらく非常に短い期間です。それが10Gb/sネットワークカードでない限り[そして「anotherServer」への他のすべてが実際に1GB/sで動作している]、これはチェーンの最も遅い部分になります。ssh自体は、データを暗号化するため、少しオーバーヘッドがかかります。

ディスクからデータを要求するのに数マイクロ秒かかり、ディスクがヘッドを動かして実際のデータを読み取るのに数ミリ秒かかる可能性があります。つまり、「R」に約0.1%の時間があり、残りは「D」にあります。

于 2012-12-28T11:31:59.530 に答える