irqbalance - 割り込み分散 チューニング チートシート
irqbalance はハードウェア割り込み (IRQ) をCPU コア 全体に分散するデーモン。Linux のデフォルトでは、ビジー NIC またはストレージ コントローラからのほとんどの割り込みは CPU 0 にルーティングされ、そのコアをボトルネック にしてその他がアイドル。irqbalance は割り込みロード を監視し、IRQ 親和性を再バランス してワークをまく。逆に、ハンド ピン留め CPU を持つレイテンシ クリティカル ワークロード の場合、多くの場合、それが分離されたコア 上に割り込みを移動できないようにそれを意図的に無効化される。
インストール
| プラットフォーム | コマンド |
|---|
| Debian/Ubuntu | sudo apt install irqbalance |
| Fedora/RHEL | sudo dnf install irqbalance |
| Arch Linux | sudo pacman -S irqbalance |
| サービス | sudo systemctl enable --now irqbalance |
| 確認 | irqbalance --version |
最初に割り込み を検査
| コマンド | 表示 |
|---|
cat /proc/interrupts | デバイス別 CPU 当たり 割り込み カウント |
watch -n1 'cat /proc/interrupts' | ライブ 成長 (ホット コア をスポット) |
mpstat -I SUM -P ALL 1 | 秒当たり CPU 当たりの割り込み |
cat /proc/irq/<N>/smp_affinity | 1 つの IRQ の親和性 マスク |
cat /proc/irq/<N>/smp_affinity_list | 同じ、CPU リスト として |
# 1 つの CPU はすべての NIC 割り込み を吸収しているのか?
watch -n1 "grep -E 'eth0|mlx|ens' /proc/interrupts"
デーモンを実行
| コマンド | 説明 |
|---|
sudo systemctl status irqbalance | 実行中 かどうかを確認 |
sudo irqbalance --foreground | フォアグラウンド で実行 (デバッグ) |
sudo irqbalance --oneshot | 1 回バランス した後、終了 |
sudo irqbalance --debug | 冗長 な決定 |
キー オプション / 環境
| 設定 | 効果 |
|---|
IRQBALANCE_BANNED_CPUS=<mask> | これらの CPU に IRQ を割り当てない |
--banirq=N | バランシング から特定の IRQ を除外 |
--policyscript=PATH | IRQ 単位のポリシー を決定 するスクリプト |
--interval=SECONDS | 再バランス 間隔 |
| `—hintpolicy=exact | subset |
--powerthresh=N | パワー セーブ 統合 しきい値 |
構成 は通常/etc/default/irqbalanceまたは/etc/sysconfig/irqbalanceに住む。
# 分離 されたコア 8-15 から IRQ を保つ (マスク 8 CPU..15 の場合)
echo 'IRQBALANCE_BANNED_CPUS=0000ff00' | sudo tee -a /etc/default/irqbalance
sudo systemctl restart irqbalance
手動 IRQ 親和性 (デーモン を無効化するとき)
# IRQ 42 を CPU 2 にピン留め (ビットマスク 0x4)
echo 4 | sudo tee /proc/irq/42/smp_affinity
# または CPU リスト で
echo 2 | sudo tee /proc/irq/42/smp_affinity_list
| アプローチ | 使用 |
|---|
| irqbalance 実行中 | 一般的なサーバー、変数 ロード |
| irqbalance 無効化 + 手動 ピン留め | 低レイテンシ、NUMA ピン留め、RT ワークロード |
| 禁止 CPU | ハイブリッド:バランス、ただし 分離 されたコア を保護 |
レイテンシ クリティカル パターン
# 一般的な低レイテンシ セットアップ:バランサー を停止し、NIC IRQ をアプリケーション の NUMA ノード の近く にピン留め
sudo systemctl stop irqbalance
sudo systemctl disable irqbalance
# 同じ NUMA ノード 上のコア に NIC IRQ の smp_affinity を設定
アプリケーション のメモリー と割り込み 処理が同じ NUMA ノード上に存在するようにnumactlと組み合わせ — クロスノード 割り込み 処理は古典的 な隠れ レイテンシ ソース。
変更 を確認
| チェック | コマンド |
|---|
| 割り込み スプレッド | mpstat -I SUM -P ALL 1 |
| Softirq ロード | top → CPU 当たり %si |
| ネットワーク スループット | sar -n DEV 1 |
| IRQ 当たり カウント | watch 'cat /proc/interrupts' |
成功 は、割り込み カウント が意図された コア 全体に均等に成長するか、まさに選択したコア に集中する場合のよう に見える。
irqbalance vs 関連チューニング
| ツール | ロール |
|---|
| irqbalance | CPU 全体に IRQ を分散 |
| numactl | プロセス CPU/メモリ を NUMA ノード にバインド |
| cpupower | 周波数/アイドル 状態制御 |
| tuned | 全体 システム プロファイル (irqbalance を管理できる) |
| RPS/RFS | ソフトウェア 側 パケット ステアリング |
リソース