CPU使用率とCPU時間について分かりやすく解説する

こんばんは。今日は、CPU使用率とCPU時間について、調べて分かったことをまとめておこうと思います。

それではまいります。

Contents

CPU使用率とは

  • プロセッサがプログラムによってどれだけ利用されているかを測る指標。
  • 具体的には、ある単位時間のうち、プログラムが何等かの処理を実行している時間の割合。
  • リソース(CPU)をどれだけ効率的に利用できているかの指標にもなる。
  • 単一のプログラムにより高いCPU使用率となっている場合には、処理能力が非常に多く求められている状況であり、処理の無限ループなどの欠陥が原因となっている可能性がある。

(参考文献)

CPU時間とは

  • あるプログラムがCPUを使って処理を行った時間の長さ
  • I/O待ちや、プログラム開始の待ち時間等が含まれない、純粋なCPU使用時間を指すため、単一のプログラムが必要とするCPUの量を計測するのに適している。
  • 2つの機能的に同一のアルゴリズム(ソーティングなど)の効率性を計測するために用いる。
  • 上記で、CPU時間がかからない処理の方が効率が良いといえる。
  • CPUコアが複数あって、並列計算した場合などは、CPU時間=所要時間×コア数となる(これを総CPU時間ともいう)
  • CPU時間はさらにユーザCPU時間とシステムCPU時間に分けられる。
  • ユーザCPU時間はプログラム自体のコードの実行に費やされた時間
  • システムCPU時間はプログラムが発行したシステムコールなどでOSコードが実行された時間

絵にするとこういうことですね。

(参考文献)

  • https://e-words.jp/w/CPU%E6%99%82%E9%96%93.html
  • https://en.wikipedia.org/wiki/CPU_time

CPU時間とCPU使用率の関係

  • CPU使用率=CPU時間/利用可能時間
  • 例えば、100秒のうちCPU時間が80秒だった場合、80%

https://stackoverflow.com/questions/28240978/how-to-interpret-cpu-time-vs-cpu-percentage

CPU時間とCPU使用率にまつわる疑問

どういうときにCPU使用率ではなくCPU時間を監視する?

こちらは、Stack Overflowなどを漁ってみましたが意外にも端的な回答を見つけられませんでした・・・

個人的な解釈ですが、前提としてCPU時間もCPU使用率も本質的には同じものを計測しているはずなので、どちらで計測してもよい気はします。(間違ってたらごめんなさい)

リソース正常性の監視の目的においてはCPU使用率が使われていることが一般的と感じます。こちらの方が監視の閾値を設定しやすくて使いやすいのかなと思いました。

一部、例えばAzure App ServiceなどではCPU時間とCPU使用率の両方が計測可能になっていますが、これは価格プランによってはCPU時間の上限が設定されているため、とのことでした。なので、そうでもない限りはCPU使用率の監視で問題ないのかなと思いました。

https://docs.microsoft.com/ja-jp/azure/app-service/web-sites-monitor#cpu-time-vs-cpu-percentage

一方で、CPU時間は、プログラムのデバッグやパフォーマンス改善の文脈で計測されているブログ記事などが多いように感じました。

CPU使用率が高いことは問題?

必ずしも問題ではない。むしろリソースを効率的に使えていると解釈できる。ただし、100%を超えると、処理時間に影響を及ぼすので、適正な値を見極める必要あり。

オンプレサーバだと最初に想定処理量から必要なCPUスペックを見積もる必要があるけど、クラウドだと、初期の見積もりは少なからず必要なものの、CPU使用率が一定量を超えると自動的にスケールアウトするような構成を簡単に取れる。このときには、スケールアウトの閾値の設計が必要。(あまりにも低いCPU使用率を閾値にしてスケールアウトすると、むしろリソースを効率的に使えていないことになるので)

https://qiita.com/zd6ir7/items/2cb39f55f3b15af79f6f

その他あれば・・・

おしまい

この記事を気に入っていただけたらシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT US
Yuu113
初めまして。ゆうたろうと申します。 兵庫県出身、東京でシステムエンジニアをしております。現在は主にデータ分析、機械学習を活用してビジネスモデリングに取り組んでいます。 日々学んだことや経験したことを整理していきたいと思い、ブログを始めました。旅行、カメラ、IT技術、江戸文化が大好きですので、これらについても記事にしていきたいと思っています。