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

2025/08/22 03:51 Io_uring, kTLS and Rust for zero syscall HTTPS server

出典: https://blog.habets.se/2025/04/io-uring-ktls-and-rust-for-zero-syscall-https-server.html
hakase
博士

ロボ子、今日のITニュースはすごいぞ!C10k問題からio_uringまで、ウェブサーバーの進化が止まらないのじゃ!

roboko
ロボ子

博士、C10k問題とは、具体的にどのような問題だったのでしょうか?

hakase
博士

C10k問題は、簡単に言うと「1つのウェブサーバーで1万同時接続をどう捌くか」という問題じゃ。昔はリクエストごとにプロセスをフォークしてたから、それがボトルネックになったのじゃ。

roboko
ロボ子

なるほど。それで、どのように解決されたのですか?

hakase
博士

最初はスレッドを使ったり、`poll()`や`select()`で効率的にリクエストを処理するようにしたのじゃ。でも、`select()`や`poll()`は、接続数が増えるとカーネルとのやり取りが大変になるという限界があったのじゃ。

roboko
ロボ子

`select()`や`poll()`の限界ですか。具体的にはどのような問題があったのでしょう?

hakase
博士

例えば、1万の接続がある場合、リクエスト処理ループの各イテレーションでカーネルに送信する必要がある1万個の整数の配列が必要になるのじゃ。これではスケールしないのじゃ。

roboko
ロボ子

それで、`epoll`が登場したのですね。

hakase
博士

`epoll`はLinuxの救世主じゃった!システムコールが安価になり、デルタのみを処理し、アクティブな接続を再通知する必要がなくなったのじゃ。

roboko
ロボ子

さらに、`io_uring`という技術も出てきたのですね。これはどのようなものなのでしょうか?

hakase
博士

`io_uring`は、システムコールの代わりに、カーネルに非同期的に消費させるキューに命令を書き込むのじゃ。これで、システムコールがメモリへの書き込みで済むようになったのじゃ!

roboko
ロボ子

システムコールがメモリへの書き込みで済むとは、すごいですね!

hakase
博士

そうじゃろ!ビジー状態のウェブサーバーは、設定完了後、システムコールを一度も実行せずにクエリを処理できるのじゃ!

roboko
ロボ子

他に、パフォーマンスを向上させるための工夫はありますか?

hakase
博士

CPUのコアごとに1つのスレッドを実行し、そのコアにバインドするのが理想的じゃ。NUMAハードウェアでは、スレッドがローカルNUMAノード上のメモリのみにアクセスするようにするのじゃ。

roboko
ロボ子

メモリ割り当てについても工夫があるようですね。

hakase
博士

そうじゃ。接続ごとに固定されたチャンクを事前に割り当てて、その接続に関するすべての情報をそこに格納するのじゃ。これで、新しい接続でシステムコールが不要になり、メモリの断片化を防ぎ、メモリ不足のリスクを回避できるのじゃ。

roboko
ロボ子

`kTLS`という技術も紹介されていますね。

hakase
博士

`kTLS`は、アプリケーションが暗号化/復号化のジョブをカーネルに引き渡すことができるLinuxカーネルの機能じゃ。`sendfile()`が使えるようになったり、ネットワークカードがハードウェアサポートを備えている場合、暗号化操作をCPUからネットワークカードにオフロードできるのじゃ。

roboko
ロボ子

`Descriptorless files`とは、どのような最適化手法なのでしょうか?

hakase
博士

ファイル記述子をユーザースペースとカーネルスペース間でやり取りすることを避ける最適化手法じゃ。ユーザースペースが見るファイル記述子番号は単なる整数となり、`/proc/pid/fd`には表示されず、io_uringでのみ使用できるのじゃ。

roboko
ロボ子

これらの技術を学ぶための良いリソースはありますか?

hakase
博士

`tarweb`という、これらの技術をより良く学ぶために構築されたウェブサーバーがあるぞ。Rust、io_uring、kTLSを使用しているのじゃ。

roboko
ロボ子

`io-uring`を使用する際の注意点はありますか?

hakase
博士

`write`操作を送信する場合、そのバイトのメモリーロケーションは、完了キューに表示されて操作が完了とマークされるまで、割り当て解除または上書きしてはならないのじゃ。気をつけないと、データが壊れる可能性があるぞ。

roboko
ロボ子

なるほど、奥が深いですね。今日のニュースは大変勉強になりました!

hakase
博士

じゃろ?最後に一つ、ウェブサーバーが速すぎて、ロボ子の処理が追いつかなくなったらどうする?

roboko
ロボ子

えっと…、どうしましょう?

hakase
博士

答えは簡単!ロボ子をオーバークロックするのじゃ!…って、冗談じゃぞ!

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

Search