平均実行キューの長さは1ですが、ロード平均がほぼ0であるのはなぜですか?

平均実行キューの長さは1ですが、ロード平均がほぼ0であるのはなぜですか?

(元のStack Overflowにこの記事を投稿しました。ここに移動しようと提案しました。)

Fedora 17でロード平均アクティビティを確認するためにsarコマンドを実行すると、システムがアイドル状態でロード平均がほぼゼロにもかかわらず、ほぼ常に実行キューの長さが1として表示されます。実行キューの長さとLinuxの負荷平均との関係について私が理解したところ、時間の経過とともに実行キューの長さが平均1である場合、クアッドコアシステムの負荷平均は負荷平均の約25%でなければなりません。私の場合は、次のようになります。約1.00です:

$ sar -q 30 60
Linux 3.9.10-100.fc17.i686 (blah)   22/05/14    _i686_  (4 CPU)

16:29:10      runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
16:29:40            1       547      0.02      0.07      0.57         0
16:30:10            1       548      0.09      0.08      0.56         0
16:30:40            1       547      0.05      0.07      0.54         0
16:31:10            1       547      0.03      0.06      0.52         0
16:31:40            0       547      0.02      0.06      0.51         0
16:32:10            1       547      0.01      0.05      0.49         0
16:32:40            1       547      0.13      0.08      0.49         0
16:33:10            1       547      0.08      0.07      0.47         0
16:33:40            1       547      0.05      0.07      0.46         0

実行可能なタスクを頻繁にポーリングすると、時々奇妙なプロセスが表示されることがあります(これを行うには、ps r -A | grep -v 'ps r -A'を使用します)。私はsar出力と一貫性を保つために定期的にプロセスポップアップが表示されるのを見たいと思いました。

その後、できるだけ多くのCPUを消費するシングルスレッドプロセスを開始すると、実行キューのサイズはすぐに2にジャンプします(この場合は予想されます)、奇妙なことに、しばらくすると実行キューが1に戻ります。

Linux 3.9.10-100.fc17.i686 (blah)   22/05/14    _i686_  (4 CPU)

16:32:40      runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
16:33:10            1       547      0.08      0.07      0.47         0
16:33:40            1       547      0.05      0.07      0.46         0

START SCRIPT

16:34:10            2       548      0.11      0.08      0.45         0
16:34:40            2       548      0.51      0.18      0.47         0
16:35:10            2       548      0.70      0.26      0.49         0
16:35:40            2       548      0.82      0.33      0.50         0
16:36:10            2       548      0.89      0.39      0.52         0
16:36:40            2       548      0.93      0.45      0.53         0
16:37:10            2       548      0.96      0.50      0.55         0
16:37:40            2       548      1.04      0.57      0.57         0
16:38:10            2       548      1.02      0.61      0.58         0
16:38:40            2       548      1.01      0.64      0.60         0
16:39:10            2       548      1.09      0.70      0.61         0
16:39:40            2       548      1.05      0.72      0.63         0
16:40:10            3       550      1.11      0.77      0.64         0
16:40:40            3       549      1.06      0.79      0.65         0
16:41:10            3       549      1.04      0.81      0.67         0
16:41:40            3       549      1.02      0.83      0.68         0
16:42:10            2       549      1.01      0.84      0.69         0
16:42:40            2       549      1.01      0.86      0.70         0
16:43:10            1       549      1.07      0.89      0.71         0
16:43:40            1       549      1.04      0.90      0.72         0
16:44:10            1       549      1.03      0.91      0.73         0
16:44:40            1       549      1.02      0.92      0.74         0
16:45:10            1       548      1.01      0.93      0.75         0
16:45:40            1       548      1.01      0.93      0.75         0
16:46:10            1       548      1.00      0.94      0.76         0
16:46:40            1       548      1.00      0.94      0.77         0
16:47:10            1       548      1.00      0.95      0.78         0
16:47:40            1       548      1.00      0.96      0.78         0
16:48:10            1       548      1.00      0.96      0.79         0

何が起こっているのかを説明できる人はいますか?私が考えることができる唯一の説明は、他の理由がなければ、CPUを利用するいくつかの特別なシステム作業があるということです。

  1. 負荷平均計算には含まれず、
  2. これを必要とするプロセスが発生すると、CPU時間が放棄されます。

または

sarコマンドは実行キューをサンプリングするときにそれ自体を見ることができますが、CPUロードスクリプトの実行中に実行キューが1のままになる理由は説明されていません。

または

負荷平均化/実行キューの概念を誤解しました。

どんな提案でも大変感謝します!

更新:それで、同じバージョンのfedoraやsarなどを使用している別のコンピュータで再試行しました。今回は、システムがアイドル状態のときに一貫した実行キューの長さがゼロであることがわかります。また、centos 5.7システムでも試しましたが、アイドル状態では実行キューの長さは常に0です。

したがって、おそらくsarは実行キューですぐに自分自身を見ることはできません。このシステムが約0の負荷平均を報告しますが、実行キューの長さが常に1と測定される理由はまだ説明できません。

答え1

これは推測にすぎませんが、実行キューの長さが平均ではない(すでに3つの平均があるのになぜ平均なのか?)特定の時点であれば、その効果は簡単に説明されます。sar実行キューに表示される項目は常にsarそれ自体です。プロセスを追加しないと、プロセスは2つになります。

答え2

私はSAR runq_szが平均ではなく瞬間的なスナップショットであるという結論に達しました。

a) 低負荷サーバで最も高い負荷平均値を持つ 1 秒あたりの sar と top を比較しました。 。

b) 常に整数です。平均(または毎秒)の場合、負荷平均やCPUなどの小数点になります。

関連情報