CPU割り込みは、サーバーがネットワーク・パケット、ストレージ・イベント、タイマーに応答する速さを制御します。割り込みが正しく分散されていなかったり、頻度が高すぎたりすると、アプリケーションの速度が著しく低下します。割り込み処理のクリーンなサーバーは、コンテキスト・スイッチを減らし、待ち時間を短縮し、ピーク負荷時の応答時間を安定させます。.
中心点
詳細を説明する前に、以下の重要な点をまとめておこう:
- 割り込み負荷 理解する:パーセンテージが重要になるとき
- パラレリズム 管理:同時割り込みとワーストケースのレイテンシ
- 三井住友海上エックス 使用するより多くのニュース、より良い配信
- RSS & Affinity: NIC割り込みをコアに配置する
- モニタリング 確立する:数字を読み、目的をもって行動する
サーバーのCPU割り込みを誘発するもの
割り込みは 信号, これは、CPUを現在のタスクから即座に引き離し、ハンドラーを開始させる。ネットワークカードは新しいパケットを報告し、ストレージコントローラーはI/Oが完了したことを知らせ、タイマーはクロックをトリガーする。 CPU時間. .アクティビティが高い場合、これらのイベントは多くのコンテキスト・スイッチとキャッシュ・ミスに加算される。そこで私は、カーネルのCPUがISRやDPCに費やす頻度と時間を監視している。これらのダイナミクスを理解すれば、応答時間を確実に制御し、アプリケーションの実行を著しくスムーズに保つことができる。.
高い割り込み時間がパフォーマンスを犠牲にする理由
健全な環境では、システムの中断は通常、以下の間である。 0.1-2% CPU、3-7%は短期的には可能である。割り込み時間が定期的に5-10%を超える場合は、多くの場合、ドライバの問題、ハードウェアの不具合、または不正なチューニングが背景にあります。30%から深刻になり、50%を超えると、次のような恐れがあります。 ボトルネック と遅い応答時間。アプリケーションはスループットを失い、レイテンシーは跳ね上がり、予測可能性は損なわれる。私はまず、ドライバーのバージョン、ファームウェア、アフィニティ、NICの割り込みの節度をチェックする。.
同時割り込み:待ち時間の把握
単一の割り込みが 問題; 複数のイベントが重なると難しくなる。低優先割り込み中に高優先割り込みが発生した場合、その処理はさらなる割り込みによって延長される。例:高優先度パスが75サイクル、低優先度パスが50サイクル必要な場合、低優先度パスの待ち時間は簡単に125サイクルに増加します。 最悪の場合-レイテンシが急速に増大する。この挙動はシステムを予測不可能にする。そこで私は、ホットパスが互いにブロックし合わないように、コアのアフィニティとプライオリティを計画する。.
普段使いのMSIとMSI-X
最近のホストはMSIまたは 三井住友海上エックス, は、古典的なライン信号(IRQライン)を送信する代わりに、メッセージをメモリ書き込みとして送信する。MSIは、メッセージをメモリ書き込みとして送信するため、レイテンシが短縮され、干渉の影響を受けにくくなります。MSI-Xは、より多くのメッセージ、個別のキュー、より正確なコアへの分配というコンセプトを拡張しています。これにより、割り込みの衝突が減り スケーリング 高スループットで。ドライバとファームウェアが安定してサポートしている限り、私はNICとNVMeコントローラに対してMSI-Xを有効にしています。.
| メカニズム | マックスメッセージ | 住所 | コアへの分配 | 典型的な効果 |
|---|---|---|---|---|
| レガシーIRQ | 1デバイス/回線につき1個 | ライン信号 | 制限あり | より高い レイテンシー, より多くの衝突 |
| 三井住友海上 | 最大~32 | メモリ書き込み(16ビット) | グッド | より少ないオーバーヘッド、より安定したパス |
| 三井住友海上エックス | 2048年まで | メモリライト(32ビット) | 非常に良い | より良い 流通, より高い並列性 |
DMA、DPC、そして正しいデータ・パス
DMAでは、デバイスはデータを直接 メモリ CPUは処理ルーチンのみをトリガーする。これにより、割り込みの発生を抑えることができる。DPCはISRの中で多くのことをするのではなく、実際の作業をバンドルするようにしている。これにより、クリティカルセクションの時間を短く保ち レイテンシー より予測しやすくなります。全体として、CPUはアプリケーション・ロジックにより多くの時間を割くことができる。.
RSSとCPUアフィニティーを特別に設定する
レシーブ・サイド・スケーリングは、ネットワーク・キューとその割り込みを複数の カーン. .私は、割り込み、DPC、ユーザースレッドを含む各キューを同じコアまたはコアクラスタにバインドして、クロスコアウェイクを回避している。異なるコアがフローに関与すると、キャッシュ・ミスやコンテキスト・スイッチが増加する。構造化されたアフィニティ・プランは、このような摩擦による損失を顕著に防ぎます。より深く掘り下げたい場合は、コンパクトな CPUとの親和性-ホスティング・セットアップの概要.
ストレージの割り込みとI/Oパスを解除する
ストレージはまた、多くのものを生み出す。 割り込み, 特に多くの小さなIOPSで。私はNVMeコントローラーにMSI-Xを使用し、入出力がローカルのままになるように固定コアにキューを割り当てています。さらに、適切な I/Oスケジューラ, を使用することで、キューごとの負荷を平準化することができる。Deadline、BFQ、MQのバリエーションは、ワークロードによって反応が大きく異なる。ここで適切なテストを行えば、ジッターを減らし スループット.
ネットワークストーム、SYNフラッド、割り込みモデレーション
突然の小包の洪水が、このような事態を引き起こした。 独立系ソフトウェアメーカー-レートでCPUの息の根を止める。私はNICの割り込みモデレーションを有効にして、パケットがレイテンシーのピークを発生させることなく、適度なバーストで到着するようにしている。DoSシナリオには、回復力のある SYN洪水防御 早い段階でコネクションテーブルを調整します。同時に、モデレーション自体の反応が遅すぎないかどうかを測定し、それから値を調整します。目的は、DPCを均等に分配するスムーズなパケットストリームを実現することです。 フィード.
モニタリング:数字を読み、行動する
私はいくつかの明確なことから始める。 指標CPUの総使用率、割り込み時間、DPC時間、コンテキスト・スイッチ、プロセッサー・キュー。CPUが通常50%以下であれば冷静に対応し、50~80%であればピークやホットスポットを観察し、80%以上であればスケーリングやチューニングを計画する。中断時間が30%以上になったら、ドライバー、ファームウェア、アフィニティーをチェックします。オーディオ/ビデオのレイテンシー・チェックは、カーネルがどれだけ決定論的に反応するかを間接的に示します。重要 可変 をテストし、再度測定する。.
NUMAトポロジーとPCIeローカリティ
マルチソケットのホストでは、割り込みアフィニティーは常に NUMA-トポロジー。NICまたはNVMeコントローラーは、PCIeルートコンプレックスに物理的に接続されているため、NUMAノードに接続されています。キューとその割り込みを 遠い コアの場合、データはUPI/QPIリンクを経由するため、レイテンシが増加し、帯域幅が減少します。そのため、デバイスがどのNUMAノードに割り当てられているかをチェックし、キューをローカルコアにバインドし、関連するユーザースレッドが同じノードを使用するようにする。Windowsでは、プロセッサ・グループと優先NUMAノードのデバイス設定に注意を払い、Linuxでは、IRQ、softirq、アプリケーション・スレッドを一貫してローカル・ノードにリンクする。その結果、ノード間のトラフィックが減り、より安定している。 ジッター-値と計算可能なワーストケースのレイテンシ。.
オフロード、NAPI、合体を正しく使う
オフロードは、割り込みフラッドに対する強力なレバーである。 ワークロード フィットした。大まかにまとめるとTSO/GSOはセグメンテーションをNICに移し、LRO/GROは受信セグメントを要約し、ホスト上のRSCはLROと同様の効果を持つ。バルク転送(バックアップ、レプリケーション)の場合、これらの機能はスループットを向上させ、ISRレートを大幅に削減する。しかし、レイテンシが重要なフロー(RPC、トレーディング、VoIP)では、大規模なアグリゲーションがISRレートに悪影響を及ぼす可能性がある。 応答時間 を拡張します。そのため、私は適度な設定を選んでいる:LROは、ミッドパスデバイスやファイアウォールが問題を引き起こしていない場合のみ、TSO/GSOは原則としてアクティブのままにします。.
LinuxのNAPIは、ロード以降、純粋な割り込みモードからポーリングモードに切り替わる。これによりピークが滑らかになり、何千もの短いISRをトリガする代わりに、DPCパスでCPUをビジー状態に保つことができる。とともに モデレーションを中断する (インタラクティブ・プロファイルには短いタイマー、バルクには長いタイマーを使う。マイクロ秒単位でインターバルをテストし、ドロップ、リングのフィルレベル、レイテンシを観察し、スイートスポットを見つける。ストレージスタックでは、アナログの調整ネジ(キューの深さ、NCQ、blk-mq最適化)が同じ効果をもたらす。 効率性.
IRQバランシングと静的ピンニング
自動IRQバランシングは許容範囲内で負荷を分散するが、完璧ではない。均質なウェブ環境では、私はしばしばこれを実行したままにしておき、ホットスポットだけをコントロールする。レイテンシーが重要な場合や非対称なセットアップの場合 静的ピン止め より優れている:キューとデバイスごとに固定CPUセットを定義し、リブートによって一貫性を保ち、softirqのマイグレーションを最小限に抑える。さらに、バックグラウンド・ワーク(タイマー、Kスレッド)のために「ハウスキーピング」コアを確保し、パフォーマンス・コアが空くようにしている。Windowsでは、特に割り込みステアリングと各キューのアフィニティ・マスクを使う。Linuxでは、IRQごとのアフィニティとSoftirqコントロールを使っている。モットー:必要なだけ自動化し、必要なだけ 決定論 可能な限り。.
仮想化とSR-IOV/仮想化
VMでは追加コストが発生する:仮想割り込みの意味 VMの終了, スケジューリングの遅延と共有キュー。I/O負荷の高いvCPUを適切なpCPUに固定し、I/Oホストでのオーバーコミットを避け、データプレーンスレッドを管理負荷から分離します。可能であれば SR-IOV仮想ファンクションはゲストVMにMSI-Xをもたらし、ハイパーバイザーのパスの負荷を軽減します。高スループットのシナリオでは、キューを1:1でvCPUにマッピングし、アフィニティーをゲストとホストで一貫させます。重要:RSS、合体、NUMAに関する同じルールがVMにも適用されます。 透明性 より低いので、より厳密に測定している。.
パワーマネージメントと決定論的レイテンシー
節電機能はバランスシートには良いが、ハードには悪い 遅延バジェット. .ディープCステートはウェイクアップ時間を延長し、アグレッシブな周波数変化はジッターの原因となる。厳密なSLOを持つホストでは、パフォーマンスプロファイルを設定し、深いパッケージCステートを制限し、サーマルリザーブが十分に大きい場合にのみターボを許可します。タイマーの決定(高分解能タイマー対低い割り込み周波数)も、カーネルの作業量と速度に影響する。ほぼリアルタイムのセットアップでは、チックレスモードと分離コアが役立つ:アプリケーションスレッドは分離コアで、システム作業は専用の「ハウスキーピング」コアで行う。 ホットパス 火災の心配はない。.
OSごとのツールと測定方法
私は 診断チェーン 無駄がなく、再現性がある。Linuxでは、/proc/interruptsと/proc/softirqsから始め、ethtoolでキューごとのカウンターをチェックし、合体やオフロードの設定を調べます。mpstat、vmstat、sarはマクロの傾向を示し、perfはISR/DPCのホットスポットを発見します。私は、パケットとドロップのカウンターを、カーネルの時間やフローのメトリクスと関連付けます。Windowsでは、割り込み/DPC時間、割り込み/秒、DPC/秒のパフォーマンス・インジケータがきれいな画像を提供する。重要なのは 時間スケール私は、ピーク、ドロップ、レイテンシのジャンプが一致するように、すべてを同期させて記録している。.
トラブルシューティングのプレイブックとアンチパターン
私の手順は一貫している。 観察する, 次に仮説、そして変更。典型的な原因:ISRレートが上昇するキューやデバイス、欠陥のあるファームウェア、高すぎる(タフなシステム)または低すぎる(ISRストーム)合体値、大きすぎるバンドル・オフロード、NUMAノード間でキューをプルするスレッド。私は、影響を受けるデバイスを分離し、保守的なデフォルトをテストし、ドライバ/BIOSを調整し、負荷をきれいに分散させます。アンチパターン:すべてを同時に動かす、面倒なロールバック、ベースラインなし、コンテキストなしの測定。もししつこく 可変 を繰り返せば、すぐに安定したコンフィギュレーションが完成する。.
10/25/100GホストとNVMeのブループリント
10G NICの場合、CPU世代とパケットプロファイルに応じて、4~8個のRSSキューを計算します。私は、合体を控えめに(例えば、二桁マイクロ秒前半)、GROをオン、LROを注意深く開始します。25Gでは8-16キューに拡張し、アフィニティは厳密にNUMAローカルに保ちます。40/100Gからは、キュー・アーキテクチャは以下のようになります。 コアタスク多くのキュー、コアごとのクリーンなアロケーション、アクティブなオフロード、NAPIは負荷時に効果を発揮する。NVMeストレージの場合、私はコアごとに少なくとも1つのキューをマッピングし、キューの深さをワークロードに適したものに保ちます。小さなI/Oはより多くの並列性から恩恵を受け、大きなシーケンシャル転送は安定した合体ポリシーとバーストを滑らかにするスケジューラから恩恵を受けます。ゴールは変わらず、一定のレイテンシ、ホットコアなし、リングのオーバーフローなしである。.
迅速な成功のための実践的チェックリスト
最初に更新する ドライバー とBIOS/ファームウェアに問題があると、割り込みの負荷が高くなることがよくあるからだ。それから、可能であればMSI-Xに切り替えて、キューをコアにきれいに分配する。フローアフィニティが正しく、ホットパスが一貫性を保つようにRSSを設定します。NICでは、モデレーションをトラフィック・プロファイルに合わせ、レイテンシーへの影響を観察します。異常値が見つかり続けるようであれば、ハードウェアの欠陥、不正確なオプション、あるいは問題のあるデバイスを、除外手順と別の プロファイリング.
コストと利益を現実的に評価する
すべてのシステムに最大限の性能が必要なわけではない 微調整. .私は、パケット負荷が高く、IOPSが小さく、レイテンシが厳しいホストを優先しています。割り込みのオーバーヘッドが少なければ、アプリケーションのためにCPUがすぐに解放されるからだ。クリティカルでないサーバーでは、最新のドライバーとMSI-Xを使った堅実な基本構成で十分です。測定値が私を導いてくれるのであって、直感や 前提条件.
要約:私が日々のメンテナンスに詰め込んでいるもの
私は一貫して観察している。 割り込み- ドライバとファームウェアを最新の状態に保ち、可能な限りMSI-Xを使用する。フロー、DPC、スレッドがローカルのままになるように、ワークロードごとにRSSとアフィニティーを計画する。NICのモデレーションをトラフィックのパターンに適応させ、ストレージキューをきれいに分配し、適切なI/Oパスを使用する。モニタリングで異常値が出た場合は、ドライバ、ハードウェア、コンフィギュレーションを見直します。こうすることで、割り込み処理サーバーは予測可能なままとなり、ワークロードは安定して実行される。 パフォーマンス.


