Linuxパフォーマンス最適化(11)-CPUパフォーマンス最適化の原則

1つ、CPUコンテキストスイッチ

1.CPUコンテキスト

Linuxは、CPUの数よりはるかに多いタスクの同時操作をサポートするマルチタスクオペレーティングシステムです。各タスクを実行する前に、CPUはタスクがロードされている場所と実行を開始する場所を知る必要があります。つまり、システムはCPUレジスタとCPUのプログラムカウンター(PC)を事前に設定する必要があります。CPUレジスタは、CPUに組み込まれている小さいが非常に高速なメモリです。プログラムカウンタは、CPUによって実行されている命令の位置、または次に実行される命令の位置を格納するために使用されます。CPUレジスタとプログラムカウンタは、タスクの前にCPUが実行する必要のある依存環境、つまりCPUコンテキストです。
Linuxパフォーマンス最適化(11)-CPUパフォーマンス最適化の原則
CPUコンテキストはシステムカーネルに保存され、タスクが再スケジュールされて実行されるときに再度ロードされ、タスクの元の状態が影響を受けないようにし、マルチタスクの継続的な操作が維持されます。
CPUコンテキストスイッチは、最初に前のタスクのCPUコンテキスト(CPUレジスタとプログラムカウンター)を保存し、次に新しいタスクのコンテキストをCPUレジスタとプログラムカウンターにロードし、最後にプログラムカウンターが指す新しい場所にジャンプして、新しいタスクを実行します。仕事。
さまざまなタスクに応じて、CPUコンテキストの切り替えは、プロセスコンテキストの切り替え、スレッドコンテキストの切り替え、および割り込みコンテキストの切り替えに分けられます。

2.プロセスコンテキストの切り替え

Linuxは、プロセス実行スペースを特権レベル、つまりCPU特権レベルのリング0とリング3に従って、カーネルスペースとユーザースペースに分割します。カーネルスペース(リング0)は最高の権限を持ち、すべてのリソースに直接アクセスできます。ユーザースペース(リング3)は制限されたリソースにのみアクセスでき、メモリなどのハードウェアデバイスに直接アクセスすることはできません。特権リソースにアクセスするには、システム呼び出しを通じてカーネルにトラップする必要があります。 。
Linuxパフォーマンス最適化(11)-CPUパフォーマンス最適化の原則
プロセスは、ユーザースペースとカーネルスペースの両方で実行できます。プロセスは、ユーザースペースで実行されている場合はプロセスのユーザー状態と呼ばれ、カーネルスペースに分類される場合はプロセスのカーネル状態と呼ばれます。
ユーザーモードからカーネルモードへのプロセス切り替えは、システム呼び出しによって完了する必要があります。プロセスコンテキスト切り替え(特権モード切り替え)が発生し、プロセスがカーネルモードからユーザーモードに戻るときにもコンテキスト切り替えが発生します。各プロセスコンテキストスイッチには、数十ナノ秒から数マイクロ秒のCPU時間が必要です。切り替えが頻繁に行われると、レジスタ、カーネルスタック、仮想メモリなどのリソースの保存と復元にCPU時間が浪費され、システムの平均負荷が増加します。 。

3.スレッドコンテキストの切り替え

スレッドはスケジューリングの基本単位であり、プロセスはリソース所有権の基本単位です。カーネルタスクスケジューリングオブジェクトはスレッドであり、プロセスはスレッドに仮想メモリやグローバル変数などのリソースを提供します。プロセスに複数のスレッドがある場合、スレッドは仮想メモリやグローバル変数などの同じリソースを共有します。共有リソースは、コンテキストの切り替え中に変更する必要はありません。スタックやレジスタなどのスレッド自体のプライベートデータは、コンテキストの切り替え中に保存する必要があります。スレッドコンテキストの切り替えには2つのタイプがあります。最初のタイプはリソースが共有されていないため2つのスレッドが異なるプロセスに属し、スレッド切り替えプロセスはプロセスコンテキストの切り替えと同じです。2番目のタイプは仮想メモリが共有されているため2つのスレッドが同じプロセスに属します。スレッドを切り替えると、仮想メモリなどのリソースはそのまま残り、プライベートデータやスレッドのレジスタなどの非共有データのみを切り替える必要があります。プロセス内スレッドスイッチングは、マルチプロセスプロセススイッチングよりも少ないリソースを消費します。

4.コンテキスト切り替えを中断します

ハードウェアイベントに迅速に応答するために、割り込み処理はプロセスの通常のスケジューリングと実行を中断し、代わりに割り込みハンドラーを呼び出してデバイスイベントに応答します。他のプロセスを中断する場合は、プロセスの現在の状態を保存する必要があります。中断が終了した後も、プロセスは元の状態から実行を再開できます。割り込みコンテキストの切り替えにはプロセスユーザーモードが含まれないため、割り込みプロセスがユーザーモードのプロセスを中断した場合でも、仮想メモリやプロセスのグローバル変数などのユーザーモードリソースを保存および復元する必要はありません。割り込みコンテキストには、CPUレジスタ、カーネルスタック、ハードウェア割り込みパラメータなど、カーネルモード割り込みサービスプログラムの実行に必要な状態のみが含まれます。
同じCPUの場合、割り込み処理はプロセスよりも優先されるため、割り込みコンテキストの切り替えはプロセスコンテキストの切り替えと同時に発生しません。割り込みは通常のプロセスのスケジューリングと実行を中断するため、ほとんどの割り込みハンドラーは短く簡潔であり、実行は可能な限り迅速に終了します。割り込みコンテキストの切り替えにはCPUを消費する必要があります。切り替え時間が長すぎると、CPUも大量に消費され、システムの全体的なパフォーマンスが大幅に低下します。

5.システムコール

システムが呼び出されると、CPUレジスタの元のユーザーモード命令の位置を最初に保存する必要があります。カーネルモードコードを実行するには、CPUレジスタをカーネルモード命令の新しい位置に更新し、カーネルモードにジャンプしてカーネルタスクを実行する必要があります。システム呼び出しが終了した後、CPUレジスタは、保存された元のユーザー状態を復元してから、ユーザースペースに切り替えてプロセスを続行する必要があります。したがって、システム呼び出し中に2つのCPUコンテキストスイッチが発生しました。システム呼び出しのプロセスには、仮想メモリなどのプロセスユーザーモードリソースは含まれず、プロセスを切り替えません。
プロセスコンテキストの切り替えとは、あるプロセスから別のプロセスへの切り替えを指し、システム呼び出し中は常に同じプロセスが実行されます。システム呼び出しプロセスは通常、コンテキストスイッチではなく、特権モードスイッチと呼ばれます。システム呼び出し中は、CPUコンテキストの切り替えを回避できません。プロセスはカーネルによって管理およびスケジュールされ、プロセスの切り替えはカーネルモードでのみ発生します。プロセスコンテキストには、仮想メモリ、スタック、グローバル変数などのユーザースペースリソースだけでなく、カーネルスタックやレジスタなどのカーネルスペースの状態も含まれます。したがって、プロセスコンテキストの切り替えは、システム呼び出しよりも1ステップ多くなります。現在のプロセスのカーネル状態とCPUレジスタを保存する前に、プロセスの仮想メモリとスタックを保存する必要があります。次のプロセスのカーネル状態をロードした後、更新する必要があります。プロセスの仮想メモリとユーザースタック。
プロセスコンテキストの切り替えを完了するには、カーネルをCPUで実行する必要があります。
Linuxパフォーマンス最適化(11)-CPUパフォーマンス最適化の原則
各コンテキストスイッチには、数十ナノ秒から数マイクロ秒のCPU時間が必要です。プロセスコンテキストの切り替えが頻繁に行われると、CPUがレジスタ、カーネルスタック、仮想メモリなどのリソースの保存と復元に多くの時間を費やす可能性があります。実際にプロセスを実行する時間を短縮します。
Linuxは、TLB(Translation Lookaside Buffer)を介して仮想メモリと物理メモリ間のマッピング関係を管理します。仮想メモリが更新されると、TLBも更新する必要があり、それに応じてメモリアクセスが遅くなります。マルチプロセッサシステムでは、L3キャッシュは複数のプロセッサで共有されます。キャッシュを更新すると、現在のプロセッサプロセスだけでなく、キャッシュを共有する他のプロセッサプロセスにも影響します。
コンテキスト切り替えはプロセス切り替えにのみ必要です。つまり、コンテキスト切り替えはプロセススケジューリングにのみ必要です。Linuxは、CPUごとに準備完了キューを維持し、CPUの優先度と待機時間に従ってアクティブなプロセス(つまり、CPUを実行して待機しているプロセス)を並べ替えてから、CPUを最も必要とするプロセス、つまり最も優先度が高く、CPUを待機しているプロセスを選択します。実行する最長のプロセス。
プロセススケジューリングをトリガーするシナリオは次のとおりです。
(1)すべてのプロセスを公平にスケジュールできるようにするために、CPU時間をタイムスライスに分割し、タイムスライスを各プロセスに順番に割り当てます。プロセスのタイムスライスが使い果たされると、システムによって一時停止され、CPUの実行を待機している他のプロセスに切り替えられます。
(2)プロセスのシステムリソースが不足している場合(メモリ不足など)、プロセスはリソースが満たされた後にのみ実行でき、プロセスは中断され、システムは他のプロセスの実行をスケジュールします。
(3)プロセスがsleep function sleepメソッドによってアクティブに中断すると、スケジュールが変更されます。
(4)優先度の高いプロセスが実行されている場合、優先度の高いプロセスの動作を保証するために、現在のプロセスは中断され、優先度の高いプロセスによって実行されます。
(5)ハードウェア割り込みが発生すると、CPU上のプロセスは割り込みによって中断され、代わりにカーネル内の割り込みサービスルーチンが実行されます。

6.CPUコンテキストスイッチングインジケーター

Linuxパフォーマンス最適化(11)-CPUパフォーマンス最適化の原則
cs(コンテキストスイッチ):1秒あたりのコンテキストスイッチの数。
in(interrupt):1秒あたりの割り込みの数。
r(実行中または実行可能):準備完了キューの長さ、つまり、実行中でCPUを待機しているプロセスの数。
b(ブロック):中断できないスリープ状態にあるプロセスの数。

Vmstatは、システムの全体的なコンテキスト切り替え状況のみを提供します。pidstatを使用して、プロセスの特定のCPUコンテキスト切り替えを表示します。
pidstat -w 5は、各プロセスのコンテキスト切り替えを表示できます。
Linuxパフォーマンス最適化(11)-CPUパフォーマンス最適化の原則
cswch:
1秒あたりの任意のコンテキストスイッチの数nvcswch:1秒あたりの非任意のコンテキストスイッチの数。
自発的なコンテキスト切り替えとは、プロセスが必要なリソースを取得できないことによって引き起こされるコンテキスト切り替えを指します。たとえば、自発的なコンテキスト切り替えは、IOやメモリなどのシステムリソースが不足している場合に発生します。より自発的なコンテキストスイッチは、プロセスがリソースを待機していることを示し、IOなどの他の問題が発生する可能性があります。
非自発的コンテキスト切り替えとは、タイムスライスの期限が切れたためにプロセスがシステムによって強制的にスケジュールされたときに発生するコンテキスト切り替えを指します。たとえば、多数のプロセスがCPUをめぐって競合している場合、非自発的なコンテキスト切り替えが発生する傾向があります。より非自発的なコンテキストスイッチは、プロセスがスケジュールを強制されており、すべてCPUをめぐって競合していることを示しています。
割り込み数の増加は、CPUが割り込みハンドラーによって占有されていることを示しています。また、/ proc / interruptsファイルを表示して特定の割り込みタイプを分析する必要があります。

2.平均CPU負荷

1.プロセスステータス

Rは、RunningまたはRunnableの略語です。これは、プロセスがCPUの準備完了キューで実行中であるか実行を待機していることを意味します。
Dは、Disk Sleepの略語、つまりUninterruptible Sleepです。これは通常、プロセスがハードウェアと相互作用しており、相互作用プロセスが他のプロセスまたは割り込みによって中断されることを許可されていないことを意味します。D状態のプロセスは、平均負荷を増加させます。
ZはZombieの略語で、ゾンビプロセスを意味し、プロセスは終了しましたが、親プロセスはリソース(プロセス記述子、PIDなど)を再利用していません。
SはInterruptibleSleepの略で、イベントを待機しているため、プロセスがシステムによって一時停止されていることを意味します。プロセスが待機しているイベントが発生すると、プロセスは起動され、R状態になります。
Iは、Idleの略語です。つまり、中断できないスリープカーネルスレッドで使用されるアイドル状態です。I状態のプロセスはそうではありません。
Tは、StoppedまたはTracedの略語であり、プロセスが一時停止または追跡状態にあることを示します。SIGSTOP信号をプロセスに送信すると、SIGSTOP信号に応答して一時停止状態(Stopped)になります。次に、SIGCONT信号をプロセスに送信すると、プロセスの実行が再開されます(プロセスがターミナルで直接開始されている場合は、fgコマンドを使用して復元する必要があります。フォアグラウンドで実行)。
XはDeadの略語であり、プロセスが終了したことを意味するため、topまたはpsコマンドには表示されません。
iowaitが上昇すると、ハードウェアからの応答を取得できないため、プロセスは長期間中断できない状態になる可能性があります。中断できない状態は、プロセスデータがハードウェアの状態と一致していることを確認するためのものであり、通常の状況では、中断できない状態は短時間で終了します。したがって、短期間の中断のない状態プロセスは、通常、無視できます。ただし、システムまたはハードウェアに障害が発生した場合、プロセスは長期間中断できない状態のままになり、システム内に多数の中断できないプロセスが発生する可能性があります。
通常の状況では、プロセスが子プロセスを作成するとき、システム呼び出しwaitまたはwaitpidを介して子プロセスの終了を待機し、子プロセスのリソースを再利用する必要があります。子プロセスが終了すると、SIGCHLDシグナルが親プロセスに送信されるため、親プロセスは引き続きSIGCHLD信号の処理機能を登録して、リソースを非同期に回復することができます。親プロセスがこれを行わない場合、または子プロセスの実行速度が速すぎる場合、親プロセスには子プロセスの状態を処理する時間がなく、子プロセスは早期に終了し、子プロセスはゾンビプロセスになります。通常、ゾンビプロセスは比較的短時間続き、親プロセスがリソースを再利用した後に終了します。または、親プロセスが終了した後、initプロセスによって再利用された後に終了します。親プロセスが子プロセスの終了を処理せず、実行を継続すると、子プロセスは常にゾンビ状態になります。多数のゾンビプロセスでPIDプロセス番号が不足するため、新しいプロセスを作成できず、回避する必要があります。

2.CPU負荷平均の概要

平均負荷とは、システムが実行可能状態および単位時間あたりの中断不可能な状態にあるプロセスの平均数、つまりアクティブなプロセスの平均数を指し、CPU使用率とは直接の関係はありません。
実行可能状態プロセスとは、CPUを使用または待機しているプロセス、つまりR状態(実行中または実行可能)のプロセスを指します。
中断不可能な状態のプロセスは、D状態であるハードウェアデバイスのI / O応答を待機するなど、カーネル状態キープロセス(中断不可能)のプロセスです(中断不可能なスリープ、ディスクとも呼ばれます)。スリープ)プロセス。
プロセスがディスクに対してデータを読み書きするとき、データの一貫性を確保するために、プロセスは他のプロセスによって中断されたり、ディスク応答を取得する前に中断されたりすることはできません。この時点で、プロセスは中断できない状態にあります。この時点でプロセスが中断されると、ディスクデータとプロセスデータに一貫性がなくなる可能性があります。
割り込み可能な状態は、プロセスおよびハードウェアデバイスに対するシステムの保護メカニズムです。
平均負荷は実際にはアクティブなプロセスの平均数であるため、平均負荷インデックスは、現在のコンピューターシステムの論理CPUの数で参照する必要があります。理想的な条件下では、各CPUがたまたまプロセスを実行すると、各CPUを十分に活用できます。
平均負荷インデックスは、topコマンドまたはuptimeコマンドを使用して表示できます。
Linuxパフォーマンス最適化(11)-CPUパフォーマンス最適化の原則
稼働時間によって観測される3つの平均値は、最後の1分、5分、および15分の平均負荷と、3つの異なる時間間隔の平均負荷です。これは、システム負荷の傾向を分析するためのデータソースを提供し、現在のシステム負荷をより包括的かつ3次元的に理解できます。状況。
(1)1分、5分、15分の平均負荷値が基本的に同じであれば、システム負荷は非常に安定しています。
(2)1分間の平均負荷値が15分間の平均負荷値よりもはるかに小さい場合は、過去1分間のシステムの負荷が減少しているが、過去15分間の負荷が大きいことを意味します。
(3)1分間の平均負荷値が15分間のレザーチャンピオン負荷値よりもはるかに大きい場合は、最後の1分間の負荷が増加していることを意味します。これは一時的または継続的に増加する可能性があるため、継続的な観察が必要です。1分間の平均負荷が論理CPUの数に近づくか超えると、現在のシステムで過負荷の問題が発生していることを示します。

3.CPU使用率

1.CPU使用の概要

平均負荷とは、単位時間あたりの実行可能な状態と中断できない状態のプロセスの数を指します。したがって、負荷平均には、CPUを使用しているプロセスだけでなく、CPUを待機しているプロセスとIOを待機しているプロセスも含まれます。
CPU使用率は、単位時間あたりのCPU使用率の統計であり、パーセンテージで表示されます。
CPU使用率は、単位時間あたりのCPUビジー状態の統計であり、必ずしも平均負荷に対応しているわけではありません。CPUを大量に使用するプロセスは、平均負荷の増加につながります。この時点で、平均負荷はCPU使用率と一致しています。IOを集中的に処理し、IOを待機すると、平均負荷も増加しますが、CPU使用率は必ずしも高くありません。 ; CPUを待機する多数のプロセススケジューリングも平均負荷の増加につながり、この時点でCPU使用率は比較的高くなります。
平均負荷は、システムの全体的な負荷を反映して、システムの全体的なパフォーマンスをすばやく表示するための指標です。ただし、平均負荷インデックスでは、システムのパフォーマンスのボトルネックを特定できません。
平均負荷が
高い場合は、CPUを集中的に使用するプロセスが原因である可能性があります。平均負荷が高いと、必ずしもCPU使用率が高くなるとは限らず、IO待機時間が長くなる可能性があります。平均負荷が高い場合は、mpstat、pidstatを使用して負荷の原因の分析と特定に役立てることができます。 。

2.CPU使用量の定義

CPU使用率は、アイドル時間に加えて、合計CPU時間のパーセンテージです。
Linuxパフォーマンス最適化(11)-CPUパフォーマンス最適化の原則
/ proc / statデータから計算されたCPU使用率は、起動後の平均CPU使用率です。
CPU使用率を計算するために、パフォーマンス分析ツールは通常、ある期間(たとえば、3秒)で2つの値を取り、差を付けた後の期間中の平均CPU使用率を計算します。
Linuxパフォーマンス最適化(11)-CPUパフォーマンス最適化の原則
Linuxは、各プロセスの実行ステータスに関する統計情報、つまり/ proc / [pid] / statを提供します。パフォーマンス分析ツールは、/ proc / statおよび/ proc / [pid] / statに従って、ある時間間隔で平均CPU使用率を計算します。異なるパフォーマンス分析ツールで使用されるデフォルトの時間間隔は異なる場合があるため、複数のパフォーマンス分析ツールを使用して比較します。分析するときは、必ず同じ間隔を使用してください。たとえば、topはデフォルトで3秒の間隔を使用しますが、psはプロセスのライフサイクル全体を使用します。

3.CPU使用時間

マルチタスクオペレーティングシステムとして、Linuxは各CPUの時間を非常に短いタイムスライスに分割し、スケジューラを介してそれらを各タスクに順番に割り当てます。これにより、複数のタスクが同時に実行されているように見えます。CPU時間を維持するために、Linuxは事前定義されたビートレート(カーネルではHZとして表される)を介して時間割り込みをトリガーし、グローバル変数Jiffiesを使用して起動後のビート数を記録します。時間の中断が発生するたびに、Jiffiesの値は1ずつ増加します。ビートレートHZは、カーネルの構成可能なオプションであり、100、250、1000などに設定できます。システムが異なれば、設定する値も異なる場合があります。これは、/ boot / configカーネルオプションを照会することで確認できます。
grep 'CONFIG_HZ=' /boot/config-$(uname -r)
ビートレートHZはカーネルオプションであり、ユーザースペースプログラムから直接アクセスすることはできません。ユーザースペースプログラムを容易にするために、カーネルはユーザースペースビートレートUSER_HZを提供します。これは100HZに固定されています。Linuxは、/ proc仮想ファイルシステムを介してシステムの内部状態に関する情報をユーザースペースに提供し、/ proc / statはシステムのCPUとタスクに関する統計を提供します。
cat /proc/stat | grep ^cpu
Linuxパフォーマンス最適化(11)-CPUパフォーマンス最適化の原則
最初の列はCPU番号であり、最初の行の番号のないCPUはすべてのCPUの累積を表します。他の列は、さまざまなシナリオでのCPUの累積ビート数を表し、単位はUSER_HZで、10ミリ秒(1/100秒)です。
proc / statインジケーターは次のとおりです
。user(略してus)は、ユーザーモードのCPU時間を表し、ナイスタイムは含まれませんが、ゲストタイムは含まれます。
nice(niと略記)は優先度の低いユーザーモードのCPU時間を表し、プロセスのnice値は1〜19のCPU時間に調整されます。ニースの範囲は-20〜19です。値が大きいほど、優先度は低くなります。
システム(sysと略記)は、カーネルモードでのCPU時間を表します。
アイドル(略称id)はアイドル時間を表し、IOの待機時間(iowait)は含まれません。
iowait(略してwa)は、IOを待機しているCPU時間を表します。
irq(hiと略記)は、ハード割り込みを処理するためのCPU時間を表します。
softirq(略してsi)は、ソフト割り込みを処理するためのCPU時間を表します。
Steal(stと略記)は、システムが仮想マシンで実行されているときに他の仮想マシンが占有するCPU時間を表します。
ゲスト(ゲストと略記)は、仮想化を通じて他のオペレーティングシステムを実行する時間、つまり仮想マシンを実行するCPU時間を表します。
guest_nice(略してgnice)は、優先度の低い仮想マシンを実行する時間を表します。
一番上の出力%Cpu行は、システムのCPU使用率です。デフォルトの表示は、すべてのCPUの平均値です。数字の1を押して、各CPU使用率を表示します。
Linuxパフォーマンス最適化(11)-CPUパフォーマンス最適化の原則
Linuxパフォーマンス最適化(11)-CPUパフォーマンス最適化の原則
プロセスのリアルタイム情報では、各プロセスに%CPU列があります。これは、プロセスのCPU使用率を表します。これは、プロセスのユーザースペースで使用されるCPU、システム呼び出しによって実行されるカーネルスペースCPUを含む、ユーザーモードとカーネルモードのCPU使用率の合計です。レディキューは実行中のCPUを待機しています。仮想化環境には、実行中の仮想マシンが占有するCPUも含まれます。
pidstatを使用して、プロセスの特定のCPU使用率を
Linuxパフォーマンス最適化(11)-CPUパフォーマンス最適化の原則
表示します。%usrインジケーター:ユーザーモードCPU使用率
%システム:カーネルモードCPU使用率
%guest:実行中の仮想マシンCPU使用率
%wait:CPU使用量を待機中
%CPU:合計CPU使用量
平均部は、データの2セットの平均値を計算します。

4.異常なCPU使用

説明できないCPU使用率の高い状況では、短期間のアプリケーションが原因である可能性があります。
(1)他のバイナリプログラムはアプリケーションで直接呼び出されますが、実行時間が比較的短く、topなどのツールで見つけるのは簡単ではありません。
(2)アプリケーションがクラッシュして再起動し続けるため、起動プロセス中のリソースの初期化で多くのCPUリソースが消費される可能性があります。
短期プロセスビューは、execsnoopツールを使用して表示できます。

4、中断

1.割り込みの概要

割り込みは、システムの同時処理機能を向上させることができる非同期イベント処理メカニズムです。割り込みハンドラーは他のプロセスの操作を中断するため、通常のプロセス操作スケジュールへの影響を減らすために、割り込みハンドラーはできるだけ速く実行する必要があります。割り込みサービスプログラムが長時間実行されると、特に割り込みハンドラが割り込みに応答している場合、一時的に割り込みが閉じられ、最後の割り込み処理が完了するまで他の割り込みが応答しなくなります。つまり、割り込みが失われる可能性があります。
Linuxは、割り込みハンドラーの過剰実行と割り込み損失の問題を解決するために、割り込み処理プロセスを2つの段階に分割します。上半分は、割り込みを迅速に処理するために使用されます。割り込み無効モードで実行されます。主な処理は、ハードウェアまたは時間に依存します。作業の下半分は、通常はカーネルスレッドとして実行されている、上半分の未完了の作業の処理を遅らせるために使用されます。
上半分はハードウェア要求、つまり高速実行を特徴とするハード割り込みを直接処理し、下半分はカーネル、つまり遅延実行を特徴とするソフト割り込みによってトリガーされます。ハードウェア割り込みはCPUによって実行されているタスクを中断し、すぐに割り込みハンドラーを実行します。ソフトウェア割り込みはカーネルスレッドモードで実行され、各CPUはソフト割り込みカーネルスレッドに対応し、名前はksoftirqd / C番号であり、ソフト割り込みはCPU0に対応します。カーネルスレッドの名前はksoftirqd / 0です。ソフト割り込みには、ハードウェアデバイス割り込みハンドラーの下半分が含まれるだけでなく、カーネルスケジューリングやRCUロック(Read-Copy Update、RCUはLinuxカーネルで最も一般的に使用されるロックの1つ)などの一部のカーネル定義イベントもソフト割り込みです。 。
ネットワークカードは、データパケットを受信すると、ハードウェア割り込み方式で新しいデータをカーネルに通知します。カーネルは、割り込みハンドラーを呼び出してネットワークカードのデータをメモリに読み込み、ハードウェアレジスタのステータス(データが読み取られたことを示す)を更新して、最後に別のデータを送信します。ソフト割り込み信号は、下部にさらに処理を行うように通知します。ソフト割り込み信号によって下部が目覚めた後、ネットワークデータをメモリ内で見つける必要があります。次に、データは、アプリケーションに送信されるまで、ネットワークプロトコルスタックに従ってレイヤーごとに解析および処理されます。
Linuxのソフト割り込みには、ネットワークトランシーバー、タイミング、スケジューリング、RCUロックなどのさまざまなタイプが含まれます。procファイルシステムの/ proc / softirqsは、ソフト割り込みの動作を監視できます。
Linuxでは、各CPUは、ksoftirqd / CPU番号という名前のソフト割り込みカーネルスレッドに対応します。ソフト割り込みイベントの頻度が高すぎると、CPU使用率が高いため、カーネルスレッドによってソフト割り込み処理がタイムリーになり、ネットワークの送受信の遅延やスケジューリングの遅延などのパフォーマンスの問題が発生します。ソフト割り込みのCPU使用率が高すぎることも、最も一般的なパフォーマンスの問題の1つです。

2.表示を中断します

procファイルシステムは、カーネル空間とユーザー空間の間の通信メカニズムであり、カーネルのデータ構造を表示したり、カーネル構成を動的に変更したりするために使用できます。
/ proc / softirqsは、ソフト割り込みの実行ステータスを提供します。
/ proc / interruptsは、ハード割り込みの動作ステータスを提供します。
Linuxパフォーマンス最適化(11)-CPUパフォーマンス最適化の原則
最初の列の内容はソフト割り込みタイプです。ソフト割り込みには、さまざまな作業タイプに対応する10のカテゴリが含まれています。NET_RXはネットワーク受信の中断を意味し、NET_TXはネットワーク送信の中断を意味します。通常、異なるCPUでの同じタイプの割り込みの累積数は同じオーダーであり、違いはそれほど大きくありません。
/ proc / softirqsの内容は、システムが稼働してからの累積割り込み数です。プロダクションは通常、割り込み数の変化率に注意を払うため、watch -d cat / proc / softirqsを使用してソフト割り込みの変化を表示します。
Linuxパフォーマンス最適化(11)-CPUパフォーマンス最適化の原則
TIMER(時限割り込み)、NET_RX(ネットワーク受信)、SCHED(カーネルスケジューリング)、RCU(RCUロック)およびその他のソフト割り込みは常に変化しています。NET_RX、NET_TXソフト割り込みタイプは、ネットワークデータの送受信を表示するためにsarツールを使用する必要があります。
Linuxパフォーマンス最適化(11)-CPUパフォーマンス最適化の原則
最初の列は、レポートの時刻を示します。
2番目の列IFACEは、ネットワークカードを表します。
3番目の列rxpck / sは、1秒あたりに受信されたネットワークフレームの数PPSを表します。
4番目の列txpck / sは、1秒あたりに送信されるネットワークフレームの数PPSを表します。
5番目の列rxkB / sは、1秒あたりに受信したキロバイト数BPSを表します。
6番目の列txkB / sは、1秒あたりに送信されるキロバイト数BPSを表します。

3.中断のないプロセス

中断不可能な状態とは、プロセスがハードウェアと相互作用していることを意味します。プロセスデータとハードウェアの一貫性を保護するために、システムは他のプロセスまたは中断が中断不可能な状態でプロセスを中断することを許可しません。プロセスは長期間中断できない状態にあります。これは通常、システムにIOパフォーマンスの問題があることを示しています。

4.ゾンビプロセス

ゾンビプロセスは、プロセスが終了したが、その親プロセスが子プロセスによって占有されているリソースを再利用していないことを示します。短期間のゾンビ状態は通常無視されますが、プロセスは長期間ゾンビ状態にあります。つまり、子プロセスの終了を正常に処理しないアプリケーションが存在する可能性があります。

おすすめ

転載: blog.51cto.com/9291927/2594259
おすすめ