知識ベース

ロード(コンピューティング)

UNIXコンピューティングでは、システム負荷はコンピューターシステムが実行する計算作業の量の尺度です。 負荷平均は、一定期間の平均システム負荷を表します。従来は、最後の1分、5分、および15分間のシステム負荷を表す3つの数値の形式で表示されます。

Unixスタイルの負荷計算

すべてのUnixおよびUnixライクシステムは、カーネルで3つの「負荷平均」数の無次元メトリックを生成します。ユーザーは、uptimeコマンドを実行することにより、Unixシェルから現在の結果を簡単に照会できます。

$アップタイム14:34:03 up 10:43、4ユーザー、負荷平均:0.06、0.11、0.09

wコマンドとtopコマンドは、さまざまなグラフィカルユーザーインターフェイスユーティリティと同様に、同じ3つの負荷平均値を表示します。 Linuxでは、/ proc / loadavgファイルを読み取ることでもアクセスできます。

アイドル状態のコンピューターの負荷値は0です(アイドル状態のプロセスはカウントされません)。 CPU( レディキューまたは実行キュー)を使用または待機している各プロセスは、ロード数を1増やします。終了する各プロセスは、1ずつ減ります。ほとんどのUNIXシステムは、 実行中 (CPU上)または実行可能 (CPU待機中)のプロセスのみをカウントします)状態。ただし、Linuxには無停止のスリープ状態(通常はディスクアクティビティを待機)のプロセスも含まれており、I / Oシステムがビジーまたはストールしているために多くのプロセスがI / Oでブロックされたままになると、結果が著しく異なる可能性があります。これには、たとえば、NFSサーバーの障害や遅すぎるメディア(USB 1.xストレージデバイスなど)によるプロセスのブロックが含まれます。このような状況では、CPU使用率の実際の増加を反映しない高い負荷平均が発生する可能性があります(ただし、ユーザーが待機しなければならない時間はわかります)。

システムは、負荷のの指数関数的減衰/加重移動平均などの平均負荷算出します。負荷平均の3つの値は、システム操作の過去1分、5分、および15分を指します。

数学的に言えば、3つの値はすべて、システムが起動してからのすべてのシステム負荷を常に平均しています。彼らはすべての指数関数的に減衰するが、それらは異なる速度で崩壊:彼らはそれぞれ1、5、15分後に電子によって指数関数的に減衰します。従って、1分間の平均負荷が63%から成る(より正確には:1 - 1 / E)負荷の平均負荷の直前及び37%(1 / E)から起動するので、最後の分を除きました。 5分と15分の負荷平均の場合、同じ63%/ 37%の比率がそれぞれ5分と15分にわたって計算されます。したがって、1分間の負荷平均には過去60秒間のアクティビティのみが含まれることは技術的に正確ではありません。過去のアクティビティの37%が含まれますほとんど最後の1分間を含むと述べるのは正しいことです。

CPUバウンドのシングルCPUシステムの場合、負荷平均はそれぞれの期間のシステム使用率の尺度と考えることができます。複数のCPUを搭載したシステムの場合、同等の測定値を得るには、プロセッサの数で負荷を除算する必要があります。

たとえば、シングルCPUシステムでの「1.73 0.60 7.98」の負荷平均は次のように解釈できます。

  • 最後の1分間で、システムは平均73%過負荷になりました(実行可能なプロセスは1.73であったため、平均で0.73プロセスが単一CPUシステムのターンを待たなければなりませんでした)。
  • 最後の5分間、CPUは平均40%の時間アイドル状態でした。
  • 最後の15分間に、システムは平均で698%過負荷になりました(7.98の実行可能なプロセス。したがって、6.98のプロセスは平均して単一CPUシステムのターンを待たなければなりませんでした)。

これは、このシステム(CPU、ディスク、メモリなど)が、直前の1分間にスケジュールされたすべての作業を1.73倍の速さで処理できたことを意味します。

4つのCPUを備えたシステムでは、負荷平均3.73は、平均で実行可能な準備ができたプロセスが平均3.73あり、各CPUにスケジュールできることを示します。

最新のUNIXシステムでは、負荷平均に関するスレッドの扱いが異なります。一部のシステムは、負荷平均計算の目的でスレッドをプロセスとして扱います。実行を待機している各スレッドは、負荷に1を追加します。ただし、他のシステム、特にいわゆるM:Nスレッドを実装するシステムでは、(スレッドの数に関係なく)ロードの目的でプロセスを1回だけカウントする、またはユーザーが現在公開しているスレッドのみをカウントするなど、異なる戦略を使用します。スレッドスケジューラをカーネルに追加します。これは、プロセスに設定されている同時実行のレベルに依存する場合があります。 Linuxは、負荷に1を追加するように各スレッドを個別にカウントするようです。

CPU負荷とCPU使用率

フェラーリ他が実施したさまざまな負荷指数の比較研究。 CPUキューの長さに基づいたCPU負荷情報は、CPU使用率と比較して負荷分散ではるかに優れていると報告されています。 CPUキューの長さが改善された理由は、おそらくホストの負荷が高い場合、そのCPU使用率が100%に近くなり、使用率の正確な負荷レベルを反映できないためです。対照的に、CPUキューの長さはCPUの負荷量を直接反映できます。例として、キューに3つのプロセスと6つのプロセスがある2つのシステムの使用率は、明らかに異なりますが、どちらも100%に近い可能性が非常に高いです。

CPU負荷の計算

Linuxシステムでは、負荷平均は各クロックティックで計算されませんが、Hz周波数設定に基づいて各クロックティックでテストされる変数値によって駆動されます。 (Hz変数は、特定のLinuxカーネルアクティビティのパルスレートです。1Hzは1クロックティックに相当します。デフォルトでは10ミリ秒です。)カーネルのバージョンによってはHz値を構成できますが、通常は100に設定されます。コードはHz値を使用してCPU負荷の計算頻度を決定します。具体的には、timer.c :: calc_load()関数は、アルゴリズムを5 * Hzごとに、または1秒間に約5回実行します。その機能全体を以下に示します。

符号なしの長いアベンラン。 static inline void calc_load(unsigned long ticks){unsigned long active_tasks; / *固定小数点* / static int count = LOAD_FREQ;カウント-=ティック; if(count 0){count + = LOAD_FREQ; active_tasks = count_active_tasks(); CALC_LOAD(avenrun、EXP_1、active_tasks); CALC_LOAD(avenrun、EXP_5、active_tasks); CALC_LOAD(avenrun、EXP_15、active_tasks); }}

カウントダウンは5 HzのLOAD_FREQを超えています。 avenrun配列には、1分、5分、および15分平均が含まれています。 CALC_LOADマクロとそれに関連する値はsched.hで定義されています。

#define FSHIFT 11 / * nrの精度ビット* / #define FIXED_1(1 FSHIFT)/ * 1.0固定小数点として* / #define LOAD_FREQ(5 * HZ)/ * 5秒間隔* / #define EXP_1 1884 / *固定小数点として1 / exp(5sec / 1min)* / #define EXP_5 2014 / * 1 / exp(5sec / 5min)* / #define EXP_15 2037 / * 1 / exp(5sec / 15min)* / #define CALC_LOAD(load、exp、n)\ load * = exp; \ load + = n *(FIXED_1-exp); \ load >> = FSHIFT;

その他のシステムパフォーマンスコマンド

システムパフォーマンスを評価するためのその他のコマンドには、次のものがあります。

  • システムの信頼性と負荷平均の稼働時間
  • 全体的なシステムビューのトップ
  • vmstat vmstatは、実行可能またはブロックされたプロセス、メモリ、ページング、ブロックI / O、トラップ、およびCPUに関する情報を報告します。
  • htopインタラクティブプロセスビューアー
  • dstatは、プロセス、メモリ、ページング、ブロックI / O、トラップ、およびCPUアクティビティのすべての既存のリソースデータを関連付けるのに役立ちます。
  • インターフェイスごとのiftopインタラクティブネットワークトラフィックビューアー
  • プロセスごとのnethogsインタラクティブネットワークトラフィックビューアー
  • iotopインタラクティブI / Oビューアー-iotopホームページ
  • ストレージI / O統計のiostat
  • ネットワーク統計のnetstat
  • CPU統計のmpstat
  • 端末のtload負荷平均グラフ
  • Xのxload負荷平均グラフ
  • ロード平均を含む/ proc / loadavgテキストファイル