私はこれを持っています真珠 スクリプトそして私発見するこれ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
システムの電源状態が不明です。それが見るのは、ある時点で時計が大きく変わったということだけです。
私の考えでは、pv
2つのクロック読み出しの間の時間が突然大きくなっても、時間間隔に基づいてスループットを計算するだけです。間隔が大きいためスループットが低いようです。
スループット計算は、複数の時計読み取り値の平均です(約5分間観察)。考慮された間隔に一時停止にかかる時間が含まれている限り、計算されたスループット値は非常に低いです。間隔が再びアクティブ化時間でのみ構成されている場合、スループットは予想レベルに戻ります。
たとえば、5分間停止したとします。その後、回復後、pv
過去5分間に500 kBが送信されたと計算されます。これは、スループットが約1.7kB / sにすぎないことを意味します。これは500kBのしきい値よりはるかに低いため、pv
補償のためにしばらくの間データを転送する必要があります。結局のところ、スループット計算は再び安定します。
システムを一時停止することは、プロセスを一時停止することとは異なりますpv
。システム一時停止はプログラムに透過的です。停止したプロセスが起きると、SIGCONT信号がそのプロセスに送信されます。pv
停止にかかる時間をある程度減らすSIGCONT信号ハンドラがあります。 (キャッチできないSIGSTOP信号で停止している場合は、正確に何をしているのかを確認していませんが、混乱を招くべきではありません。システムの停止とは異なります)。
答え2
この場合、限度未満を維持することが最も重要な要素です。次の回避策を試すことができます。ストリームメディア(処理量の概要は2分ごとにここに表示されます。)
cstream -t -512k -T 120
負の数を可能にするスループットオプションは、このような状況のために設計されているようです。
-t num Limit the throughput of the data stream to num bytes/second.
Limiting is done at the input side, you can rely on cstream not
accepting more than this rate. If the number you give is posi-
tive, cstream accumulates errors and tries to keep the overall
rate at the specified value, for the whole session. If you give
a negative number, it is an upper limit for each read/write
system call pair. In other words: the negative number will
never exceed that limit, the positive number will exceed it to
make good for previous underutilization.
プロセスまたはシステムを一時停止するために使用されます。