ロードアベレージってなに?

皆様お久しぶりです。
シニアプログラマの小田です。
(facebookをやってますので技術交流しましょう!!)

負荷についての1回目からの続きをやりたいと思います。
1回目を見ていない人はこちらから。

今回は負荷として「ロードアベレージ」について書きます。
さて、みなさんはロードアベレージについて、どこまで知ってますか?
 ・実行プロセス数
 ・CPUの個数分を超えなければOK
 ・これが高いと処理が遅くなる
ぱっと思いつくのはこれぐらいでしょうか。
ではもっと掘り下げていきましょう。

こんな時に頼りになるのは、ウィキペディアこと百科事典ですね。
さっそく調べてみました。

リンク

これを読みますと、
システムがどれだけのワークロードを持っているかを知る事は出来るが、
個々のワークロードの軽重を示す指標にはならない

生徒:「先生!何のことなのかさっぱりです!」
先生:「大丈夫、私もわかりません!w」

って会話が聞こえてきそうですね。
さて、それでは結局どういうものなのかを見て行きましょう。

ロードアベレージは、実行待ちのプロセスがどれだけあるか?を示しています。
つまり、これが高い数値であればあるほど、待たされているプロセスが多いということで、処理の待ち時間が長くなっていきます。

ソーシャルゲームで置き換えると、APIを呼び出してレスポンスを返してくれないと、サーバ側のデータを、ゲーム内で表示させることすらできなくなります。つまり、「自分のアカウントにログインするぞ」といっても、実行待ちのプロセスとして並ばされると、ログイン結果が全く帰ってこないわけです。

これはストレスになりますよね。
僕なんか、Now Loadingが出るだけでイラッとします(ほぼ職業病と思ってますw)
では、そんなロードアベレージが、どういう値になっていたら正常として判断していいのか?

近年CPUのコア数がわけわからない数値になっているため、「CPUの数 = ロードアベレージの基準値」という図式は当てはまりません。

というのも、これはCPUのタスクスケジューラーの問題で高いのか、それとも正当に各CPUごとに1タスクずつ待たされているのか?など理由がわからないためです。
先ほどの百科事典にあったとおり、
「システムがどれだけのワークロードを持っているかを知る事は出来るが、
個々のワークロードの軽重を示す指標にはならない」
というのは、まさにこのことですね。

もちろん、待たされる数が高くないに越したことはないのですが、
リンクにもある通り、負荷状況をみるために、CPU使用率を参考にするようになってきています。

また待ち行列を解消するには単純な話ですが、プロセスを処理する回転率を上げればいいのです。(急にお店スタッフのような言い方になってすみません)
そうです単にそれだけなのです。ということは、やはり普段から、

  • 無駄なループを回していないか?
  • 複数のデータを1回で取得出来るのではないか?
  • SQLに対してインデックスはきいているか?

といった無駄な処理を無くすというのが、やはりいちばん懸命なのです。
当たり前のことですが、これを読んで頂いたあなた自身、胸に手を当てて考えて頂ければ幸いです。

はい!ということで次お会いするときは、CPU使用率について語りたいと思います!!
以上、「ロードアベレージってなに?」についてでした。
また次回お会いしましょう。

コメント