ソフトウェア

Netflixはパフォーマンスの改善のためにどのようにLinuxのカーネルを拡張する仕組み「eBPF」を利用しているのか?


Netflixの技術ブログに、Linuxのカーネル機能を拡張できる「eBPF」を活用してパフォーマンスを改善する方法が投稿されました。

Noisy Neighbor Detection with eBPF | by Netflix Technology Blog | Sep, 2024 | Netflix TechBlog
https://netflixtechblog.com/noisy-neighbor-detection-with-ebpf-64b1f4b3bbdd


Netflixのコンピューティング・パフォーマンスエンジニアリングチームは、定期的にマルチテナント環境におけるパフォーマンスの問題を調査しています。問題が発生したとき、調査の最初のステップは原因がアプリケーションにあるのか基盤となるインフラストラクチャにあるのかを切り分けることです。


Netflixのサービスを支えるプラットフォームのTitusは1つのシステムに複数のサービスを同居させるマルチテナント方式のプラットフォームです。マルチテナント環境では1つのサービスがサーバーのリソースを大量に消費することで隣接するコンテナのパフォーマンスを低下させる「ノイジーネイバー」が特に問題になります。

しかし、従来のパフォーマンス分析ツールのperfなどは大きなオーバーヘッドが発生してさらにパフォーマンスが低下するリスクがあったり、問題の発生後にパフォーマンス分析ツールを入れても調査の効率が悪かったりするなど、ノイジーネイバーの影響を検出したり問題をデバッグしたりするのは難しいとのこと。

そこで、NetflixのエンジニアチームはLinuxのカーネル機能を拡張するツールであるeBPFを使用し、「sched_wakeup」「sched_wakeup_new」「sched_switch」という3つのフックを活用してプロセスがCPUで実行されるまでにスケジューリングキューでどの程度待機しているのかを測定しました。


スケジューリングキューでの待機時間を継続的に監視することで、ノイジーネイバーの問題が発生した時にスムーズに捕捉できるようになるとのこと。例えば下図は単一のコンテナを実行する十分なCPU容量を備えたサーバーのスケジューリングキューの待機時間の推移です。青線で示されているコンテナの待機時間は平均83.4マイクロ秒で、まれに400マイクロ秒程度のスパイクが発生していることが分かります。


途中でホスト上のCPUをフル活用する2つ目のコンテナを起動すると、1つ目のコンテナの待機時間に13万1000マイクロ秒(131ミリ秒)のスパイクが発生しました。緑色の線で表示されているシステムのプリエンプションも同時に増加しており、実際のノイジーネイバーはシステムプロセスであることが浮き彫りになっています。アプリケーションがHTTPトラフィックを処理している場合などにこうしたパターンが現れるとのこと。


Netflixは、eBPFを使用することでシステムのパフォーマンスを継続的かつ効率良く監視することができ、データを元に実用的な洞察が可能になったと述べています。

この記事のタイトルとURLをコピーする

・関連記事
カーネル領域で不適切なアップデートが行われてもクラッシュしないようにする技術「eBPF」とはどんな仕組みなのか - GIGAZINE

AIはアスリートの「ケガ防止」や「パフォーマンス向上」にどうやって役立てられているのか? - GIGAZINE

無料でウェブページのパフォーマンスを一発可視化できるツール「Firefox Profiler」レビュー - GIGAZINE

フィクションを読むと認知パフォーマンスが向上する - GIGAZINE

生理は女性アスリートの認知機能を向上させるとの研究結果、女性の「生理でパフォーマンスが悪化している」との自己評価とは真逆の結果に - GIGAZINE

Threadsがスケジュール投稿や投稿分析などの新たな機能をテスト中 - GIGAZINE

in ソフトウェア, Posted by log1d_ts

You can read the machine translated English article here.