Linuxでtop
を発行すると、次のような結果が得られます。
行の1つには、次のように表されるCPU使用率情報があります。
Cpu(s): 87.3%us, 1.2%sy, 0.0%ni, 27.6%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
私はそれらのそれぞれの定義を知っていますが(はるか下)、これらのタスクの正確な意味を理解していません。
hi
-ハードウェア割り込みの処理はどういう意味ですか?si
-サービスソフトウェアの割り込みの意味st
-彼らは、「ハイパーバイザーが別のプロセッサ(または)仮想マシンから盗まれた%CPU時間を処理している間の仮想CPUによる非自発的待機のCPU時間」であると言います。しかし、それは実際にはどういう意味ですか?誰かがもっと明確にできますか?
us
、sy
、ni
などをすべて記載しました。他の人が同じものを検索するのに役立つ可能性があるためです。この情報はマニュアルページにはありません。
us: user cpu time (or) % CPU time spent in user space
sy: system cpu time (or) % CPU time spent in kernel space
ni: user Nice cpu time (or) % CPU time spent on low priority processes
id: idle cpu time (or) % CPU time spent idle
wa: io wait cpu time (or) % CPU time spent in wait (on disk)
hi: hardware irq (or) % CPU time spent servicing/handling hardware interrupts
si: software irq (or) % CPU time spent servicing/handling software interrupts
st: steal time - - % CPU time in involuntary wait by virtual cpu while hypervisor is servicing another processor (or) % CPU time stolen from a virtual machine
hi
は、ハードウェア割り込みの処理に費やされた時間です。ハードウェア割り込みは、CPUに何かを通知する必要がある場合(データの到着など)に、ハードウェアデバイス(ネットワークカード、キーボードコントローラー、外部タイマー、ハードウェアセンサーなど)によって生成されます。
これらは非常に頻繁に発生する可能性があり、また実行中は基本的に現在のCPUをブロックするため、カーネルハードウェア割り込みハンドラーは可能な限り高速かつ単純になるように作成されています。
長時間または複雑な処理を実行する必要がある場合、これらのタスクはsoftirqs
メカニズムコールを使用して延期されます。これらは独立してスケジュールされ、任意のCPUで実行でき、同時に実行することもできます(ハードウェア割り込みハンドラーには当てはまりません)。
現在のCPUをブロックするハードIRQに関する部分、およびどこでも実行できるsoftirqs
に関する部分は、正確ではなく、制限があり、一部のハードIRQが他のIRQに割り込む可能性があります。
例として、ネットワークカードからの「データ受信」ハードウェア割り込みは、「カードethXをサービスする必要がある」という情報をどこかに格納し、softirq
をスケジュールするだけです。 softirq
は、実際のパケットルーティングをトリガーするものです。
si
は、これらのsoftirqs
で費やされた時間を表します。
softirq
メカニズム(ちょっとした歴史もある)についての良い読みは、Matthew Wilcoxの 後でやります:Softirqs、タスクレット、ボトムハーフ、タスクキュー、ワークキュー、タイマー =(PDF、64k)。
st
、「スチールタイム」は、仮想化環境にのみ関連します。これは、現在の仮想マシンが実際のCPUを使用できなかった時間を表します—ハイパーバイザーによって(別のVMを実行するため、または独自のニーズのために)そのVMから)盗まれました。
IBMの CPU時間アカウンティング ドキュメントには、仮想化環境でのスチール時間とCPUアカウンティングに関する詳細情報があります。 (zSeriesタイプのハードウェアを対象としていますが、一般的な考え方はほとんどのプラットフォームで同じです。)
「st」の値は、AWSのT2.micro EC2インスタンスを使用して簡単に説明できます。
AWSドキュメント では、VCPUあたりのベースラインパフォーマンスが10%しか得られないことがわかります。これは、CPU時間を大量に消費するプロセスがある場合、VCPUの10%しか使用できないため、「st」値は約90のままであることを意味します。他の値の合計は約10のままです。
そのため、AWSはハイパーバイザーを使用して、一定量のコンピューティングパワーへのアクセスのみを許可しています。低階層タイプのインスタンスのみを使用しているため、意図的に速度が低下します。
これで少しわかりやすくなればいいのですが。