- BPF(eBPF)の観測機能を活用し、システム性能を常時自動でチューニングできるよう設計された軽量ツール
解決しようとしている問題
- チューニングオプションが多すぎる: Linuxカーネルには1600個以上のチューニング可能なsysctlパラメータが存在する。さまざまな環境に合う設定を見つけるのは複雑で難しい
- 管理者の介入減少: 現代のクラウドシステムでは、手動チューニングより自動化された管理が必要。ほとんどのシステムは初期設定後、管理者の介入がほとんどない
- 静的設定の限界: システム環境は継続的に変化するため、固定値でチューニングするのは非効率になりうる
中核となる設計原則
- 最小オーバーヘッド: 高頻度イベントの追跡を避け、必要な場合にのみ観測機能を使用
- ポリシー説明の明確化: syslogに「何が」「なぜ」変更されたのかを記録
- 管理者優先: 管理者が値を設定した場合は自動チューニング機能を無効化
- 無設定の原則: 追加設定なしで自動的にチューニング。できるだけマジックナンバーを避ける
- 動的調整: TCPメモリ使用量が増加した場合、バッファサイズを縮小してシステムのバランスを取る
主な概念
- チューナー(tuner): 各チューナーはBPFプログラムで発生したイベントを処理し、関連するチューニング可能項目を管理
- 戦略(strategy): チューナーは複数の戦略を持つことができ、各戦略は評価関数を通じて効果的な戦略を選択
- イベント(event): チューナーID、シナリオ、ネットワークネームスペース情報などが含まれ、チューナーはこの情報を基に適切な処置を実行
アーキテクチャ
bpftuneはデーモンとして動作し、複数の.so形式のプラグインチューナーをロードして管理する。
- 各チューナーは固有のIDを持ち、BPFとユーザー空間でイベントを処理する。
- BPFコンポーネントは
bpftune.bpf.hを含み、共有変数とマップ定義を使用する。
サポートされるチューナー一覧
- TCP connection tuner: 輻輳制御アルゴリズムを自動チューニング
- neighbour table tuner: 隣接テーブルサイズを自動拡張
- route table tuner: ルートテーブルサイズを自動拡張
- sysctl tuner: チューニングされたsysctl値が手動設定と競合する場合はチューナーを無効化
- TCP buffer tuner: TCPバッファサイズを自動調整
- net buffer tuner: コアネットワーク関連のチューニングを自動調整
- netns tuner: ネットワークネームスペースの追加と削除を検知
2件のコメント
Hacker Newsの意見
bpftuneは設定不要のツールとして設計されているCachyOSですぐに利用できるCachyOS Hello->Apps/Tweaksからアクセスできる