負荷平均に加えて、プログラムの効率を理解するための最良の方法は何ですか?

負荷平均に加えて、プログラムの効率を理解するための最良の方法は何ですか?

次のシナリオを考えてみましょう。

  1. 私のコンピュータには1つのプロセスしか実行されていません。topのようなリソースは100%のCPU使用率を提供するので大丈夫です。 CPUを効率的に使用しています。
  2. 2つのプロセスがあり、それぞれCPUの50%を占めます。全体が100%なので、依然としてCPUを効率的に使用しています。
  3. 私のコンピュータはN(比較的多数)プロセスを実行しています。 CPUが忙しいからです。私のプロセスはCPU使用率の100%に達しないかもしれませんが、プロセッサも使用量が多いため、まだ意味があります。
  4. マシンにはプロセスが1つしかありませんが、CPU使用率がまだCPU 100%に達していないとします。原因がプログラムエラー(IOが多すぎるかプログラムがまったく機能しない)が原因であるとします。

ケース4を検出する方法は?負荷平均はさまざまな時間にわたって平均を計算するため、良い指標ではありません。

プログラムが無負荷状態と全体負荷条件でCPUをどのくらい効率的に使用しているかを数量化するために使用できる指標または方法はありますか?

ベストアンサー1

「効率性」は、おそらく「最小限のリソースを使用して最も有用な結果を生成すること」として最もよく説明されます。

プログラムの目的がファイル間データを処理することである場合、「IOが多すぎる」ということは、非効率性の尺度ではなく、特定のプログラムの全体的な目的です。

同様に、「100%CPU使用率」はまったく良くないかもしれません。これは単に真剣に非効率的なアルゴリズムの症状かもしれません。解決している問題をよりよく理解したり、同じアルゴリズムを別の言語で書き直したりすると、5%以上のCPUで同じことを行うことができます。

IIRC、負荷平均はCPU使用率とほとんど関係ありません。デフォルトでは、実行する準備が整ったスケジューラのジョブキューの長さを測定します。ただし、これらのタスクを完了するために10マイクロ秒または10秒のCPU時間が必要かどうかは不明です。

全体的なプログラム成果は通常、個別に測定され分析され、期待に応えるために改善されます。リアルタイム実行の目的は、一緒にうまく機能するプロセスの混合を達成し、互いに過度に干渉し始めるポイントを決定することです(スケジューラは、ほとんどのワークロードに対してかなり良いタスクを実行します)。これは要件管理につながり、最終的にはより大きな箱を正当化するための費用/利益分析につながります。

かつてWindowsアイドルプロセスがCPUの約97%を消費していることを非常に懸念する管理者がいました。彼らは実際に効率を向上させるためのプログラム設定を提案しました。私は部屋を出て笑いを我慢しなければならなかった。

おすすめ記事