萌えハッカーニュースリーダー

2025/08/30 04:13 Accelerating Linux Pipes with Solarflare Onload

出典: https://medium.com/@sgn00/accelerating-linux-pipes-with-solarflare-onload-9c17ba9eb36b
hakase
博士

ロボ子、今日はSolarflare OnloadでLinuxパイプを高速化する話じゃ。

roboko
ロボ子

Solarflare Onloadですか。初めて聞きます。

hakase
博士

これはLinuxのカーネルバイパスを実装するオープンソースライブラリなのじゃ。これを使うと、モードスイッチのオーバーヘッドを削減したり、アプリケーション固有の最適化ができたり、データコピーを減らせたりするらしいぞ。

roboko
ロボ子

なるほど。カーネルバイパスでそんなに利点があるんですね。

hakase
博士

そうじゃ。特にLinuxパイプはプロセス間通信(IPC)のメカニズムで、カーネル管理の循環バッファを使うから、Onloadで高速化する意味があるのじゃ。

roboko
ロボ子

記事によると、`pipe()`、`read()`、`write()`システムコールを使うんですね。

hakase
博士

その通り!Onloadは、BSDソケットAPIと一部のglibcシステムコールラッパーを実装しておる。Solarflare NICと組み合わせると最強らしいが、標準LinuxシステムでもLinux XDPインターフェースにフォールバックできるから安心じゃ。

roboko
ロボ子

へー。設定はどうするんですか?

hakase
博士

`onload`コマンドでアプリケーションを起動して、`LD_PRELOAD`メカニズムでOnloadライブラリをプリロードするだけじゃ。簡単じゃろ?

roboko
ロボ子

確かに簡単そうですね。ベンチマークの結果はどうでしたか?

hakase
博士

ピンポンテストで平均ラウンドトリップタイム(RTT)を測定したところ、ノンブロッキングモードではOnloadを使うと平均RTTが約5倍も短縮されたらしいぞ!

roboko
ロボ子

5倍ですか!すごいですね。でも、ブロッキングモードでは改善が見られないと。

hakase
博士

そうなんじゃ。でも、`EF_PIPE_RECV_SPIN=1`と`EF_SPIN_USEC=10`を設定すると、ブロッキングモードでもパフォーマンスが改善されるらしい。

roboko
ロボ子

なるほど。環境変数をチューニングするんですね。

hakase
博士

Onload加速パイプのユースケースとしては、最小限のアプリケーション変更で、共有メモリIPCに近いパフォーマンスを実現できるのが大きいじゃろうな。低レイテンシIPCのための便利なドロップインオプションじゃ。

roboko
ロボ子

共有メモリIPCに近いパフォーマンスですか。それは魅力的ですね。

hakase
博士

しかも、パイプだけでなく、ソケット関連の機能や多重化I/Oも高速化できるらしいぞ。Solarflare NICハードウェアと組み合わせると、カーネルを完全にバイパスして、ユーザー空間からNICと直接通信できるようになるらしい。

roboko
ロボ子

それはすごいですね!でも、お高いんでしょう?

hakase
博士

まあ、そこはそれじゃ。でも、標準LinuxシステムでもXDPにフォールバックできるから、試してみる価値はあるぞ!

roboko
ロボ子

そうですね。試してみる価値はありそうです。勉強になりました!

hakase
博士

ところでロボ子、パイプを高速化すると、何が嬉しいか分かるか?

roboko
ロボ子

えーと、処理が速くなること、ですか?

hakase
博士

正解!…って、当たり前じゃ!まるで、ロボ子のジョーク回路を高速化したみたいじゃな!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search