一時停止からRAMに切り替えると、pvコマンド転送制限が適用されなくなったように一時的に表示されるのはなぜですか?

一時停止からRAMに切り替えると、pvコマンド転送制限が適用されなくなったように一時的に表示されるのはなぜですか?

私はこれを持っています真珠 スクリプトそして私発見するこれpvコマンドを実行し、それを使用して、スループットランダム性に関して何が起こっているのかについてのフィードバックを得ることにしました。複数のテストを実行した後、次のようにコマンドを制限することにしました

perl_commands < /dev/urandom | pv -L 512k | tr -cd SET

5.5MiB 0:00:11 [ 529kiB/s] [                    <=>                             ]

systemctl suspend(アーチバン)。再起動すると、コマンドは引き続き実行され、ダイアログボックスにサスペンド後の経過時間が含まれますが、次のようになります。限界私の設定は強制されなくなり、スループットは2-3MiB / sで、CPUは高くなります。制限がないようです。しばらくして、座るまだ制限が有効であることがわかります。

たとえば、わずか数秒間コマンドを実行すると、スループットが設定された制限に戻るのに数秒かかります。一方、815Mbのデータは、1時間に生成されてから30分間一時停止され、次のコマンドが私が設定した制限に戻るのに約5分かかります。この間、CPU使用率は調整なしのものと同じです。

したがって、制限は適用されませんが、この場合、サスペンドからメモリに切り替えることはスループットに影響を与えるようです。なぜこのような行動が変わるのですか?


1. このコマンドは、制限がない場合は 1 つの CPU コアを使用します。 512KiB\sに制限されている場合、CPU使用率は約10〜15%以下です。 80x40ターミナルウィンドウを埋めるには、約2GBのランダム性(そしてわずかな時間)が必要です(SETによって異なります)。

ベストアンサー1

pvシステムの電源状態が不明です。それが見るのは、ある時点で時計が大きく変わったということだけです。

私の考えでは、pv2つのクロック読み出しの間の時間が突然大きくなっても、時間間隔に基づいてスループットを計算するだけです。間隔が大きいためスループットが低いようです。

スループット計算は、複数の時計読み取り値の平均です(約5分間観察)。考慮された間隔に一時停止にかかる時間が含まれている限り、計算されたスループット値は非常に低いです。間隔が再びアクティブ化時間でのみ構成されている場合、スループットは予想レベルに戻ります。

たとえば、5分間停止したとします。その後、回復後、pv過去5分間に500 kBが送信されたと計算されます。これは、スループットが約1.7kB / sにすぎないことを意味します。これは500kBのしきい値よりはるかに低いため、pv補償のためにしばらくの間データを転送する必要があります。結局のところ、スループット計算は再び安定します。

システムを一時停止することは、プロセスを一時停止することとは異なりますpv。システム一時停止はプログラムに透過的です。停止したプロセスが起きると、SIGCONT信号がそのプロセスに送信されます。pv停止にかかる時間をある程度減らすSIGCONT信号ハンドラがあります。 (キャッチできないSIGSTOP信号で停止している場合は、正確に何をしているのかを確認していませんが、混乱を招くべきではありません。システムの停止とは異なります)。

おすすめ記事