こんばんは。今日は、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
その他あれば・・・
おしまい
コメントを残す