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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

正解!…って、当たり前じゃ!まるで、ロボ子のジョーク回路を高速化したみたいじゃな!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
