CentOS 6 系列の環境で、システムログに irqbalance: WARNING, didn't collect load info for all cpus, balancing is broken というメッセージが確認されました。この問題の背景には、irqbalance が Linux システム上でサービスとして動作し、マルチコアプロセッサ環境におけるハードウェア割り込みの分散処理によるパフォーマンス向上機能がある。
基本的な動作メカニズム
- 前回の統計情報を初期化
- /proc/interrupts を参照して割り込み状況を取得
- /proc/stat を使用して各CPUの負荷情報を取得
- 取得したデータを元に割り込みのバランスを計算
- CPUアフィニティを設定してバランス調整
- 指定された時間だけスリープ後、再度処理を繰り返す
irqbalance の理論的背景
irqbalance は、パフォーマンス向上と省エネの両面で効果を持つ設計となっています。このサービスは、システムの利用状況に応じて次の2つのモードを自動的に切り替えます。
- Performance mode: 割り込みをすべてのCPUコアに均等に分散し、パフォーマンスを最大化
- Power-save mode: 割り込みを1つのCPUに集中させ、他のCPUのアイドル時間を増やして消費電力を抑える
ただし、現実にはCPU負荷の偏りを生むケースがあり、特にサーバ環境では無効にすることが推奨されます。
メモリリーク問題と対応
海外のフォーラムでも同様の問題が報告されており、Banana Pi 上の Allwinner ARM プラットフォームでメモリリークが確認されています。最終的な結論として、このサービスは既に時代遅れであり、パフォーマンス向上に寄与しないばかりか、かえって問題を引き起こす可能性があるとされています。
そのため、一般的なユーザーは以下のコマンドでこのパッケージを削除することが推奨されています。
sudo apt-get purge irqbalance
実際の対応手順
Linuxシステムにおけるこの問題の根本的な対応策は、サービスの停止と削除です。
service irqbalance stop
サービス停止後、htop などでメモリ使用量を確認すると、メモリ消費が低下していることが確認できます。
その後、完全に削除するには:
sudo apt-get purge irqbalance