kTLS メモ
モチベーション
CPU 使用率を減らすには暗号処理をオフロードするしかない
- Erlang/OTP 26.0 で ssl に kTLS 対応が入る
Support for Kernel TLS (kTLS), has been added to the SSL application, for TLS distribution (-proto_dist inet_tls), the SSL option {ktls, true}.
- ただしこれは tls_dist での利用、ssl での利用も将来的に来ると考えている
- kTLS が来ると思っていなかったので知識が全くないので調べておきたい
- kTLS のアリ/ナシでの性能比較をしておきたい
- 今まで TLS 終端を nginx で行っていたが kTLS が来るなら TLS 終端をしないようにしたい
- DataPacket で Mellanox ConnectX-6 Dx が利用できることに気付いた
- kTLS の TLS_HW が利用できる
- Zig + Erlang VM で kTLS + QUIC を利用していきたい
- OpenSSL に QUIC が来る、QUIC で kTLS が利用可能になるのかは知っておきたい
用途
- WebRTC では TURN over TLS と WebSocket over TLS の二つでの利用を考えている
- WebTransport では HTTP/3 over QUIC と HTTP/2 over TLS の二つでの利用を考えている
検証
- WebSocket over TLS は k6 で検証
- HTTP/2 overt TLS は k6 で検証
- TURN over TLS は自力
- HTTP/3 over QUIC は自力
コメント
kTLS ならこれ読んだ方がいいよとかあれば、こちらにコメントしてもらえると嬉しいです。
募集
時雨堂では Zig と Erlang/OTP で kTLS などを利用した WebRTC や WebTransporrt によるリアルタイムサーバーの開発を手伝ってくれる人を募集しています。
資料
6.3. ネットワーク Red Hat Enterprise Linux 9 | Red Hat Customer Portal
KTLS がテクノロジープレビューとして利用可能に
RHEL は、テクノロジープレビューとして KTLS (Kernel Transport Layer Security) を提供します。KTLS は、AES-GCM 暗号化のカーネルで対称暗号化アルゴリズムまたは複号アルゴリズムを使用して TLS レコードを処理します。KTLS には、この機能を提供するネットワークインターフェイスコントローラー (NIC) に TLS レコード暗号化をオフロードするインターフェイスも含まれています。
/docs/manmaster/man1/openssl-s_server.html
-ktls
Enable Kernel TLS for sending and receiving. This option was introduced in OpenSSL 3.2.0. Kernel TLS is off by default as of OpenSSL 3.2.0.
-sendfile
If this option is set and KTLS is enabled, SSL_sendfile() will be used instead of BIO_write() to send the HTTP response requested by a client. This option is only valid when -ktls along with -WWW or -HTTP are specified.
-zerocopy_sendfile
If this option is set, SSL_sendfile() will use the zerocopy TX mode, which gives a performance boost when used with KTLS hardware offload. Note that invalid TLS records might be transmitted if the file is changed while being sent. This option depends on -sendfile; when used alone, -sendfile is implied, and a warning is shown. Note that KTLS sendfile on FreeBSD always runs in the zerocopy mode.
Kernel TLSとSSL_sendfile()によるNGINXのパフォーマンス向上 - NGINX
日本語だとこれが圧倒的に詳しい。
その他
後で整理する
- oracle/ktls-utils: TLS handshake utilities for in-kernel TLS consumers
- Kernel Transport Layer Security (kTLS) Offloads - MLNX_EN v5.8-1.0.1.1 LTS - NVIDIA Networking Docs
-
Kernel TLSをOpenSSLで有効にする - Qiita
- これ多分、確認できてない?
- OpenSSLのSSL_sendfileとパッチを当てたnginxでLinuxのkTLSを試してみた · hnakamur's blog
-
Kernel TLS offload — The Linux Kernel documentation
- 本家なのでこれをしっかり読むのがよさそう
- Fedora、kTLS実装によるGnuTLSの高速化をFedora 38で実現へ | gihyo.jp
-
https://legacy.netdevconf.info/1.2/papers/ktls.pdf
- KTLS: Linux Kernel Transport Layer Security
-
https://freebsdfoundation.org/wp-content/uploads/2020/07/TLS-Offload-in-the-Kernel.pdf
- TLS Offload in the Kernel
- TLS in the kernel [LWN.net]
- FreeBSD in kernel TLS implementation notes
- Kernel TLS and TLS hardware offload :: FreeBSD Presentations and Papers
- TLS Offload to Network Devices
- TLSが難しい?RustとLinuxカーネルで実装しよう! - nttlabs - Medium
Netflix
-
Netflix: Streaming Entertainment to 200 Million Members Around the World
-
Serving Netflix Video Traffic at 800Gb/s and Beyond
-
Serving Netflix Video at 400Gb/s on FreeBSD
-
Serving Netflix Video at 400Gbps on FreeBSD by Drew Gallatin - YouTube
-
Serving Netflix Video at 400Gb/s on FreeBSD :: FreeBSD Presentations and Papers
-
Serving 100 Gbps from an Open Connect Appliance | by Netflix Technology Blog | Netflix TechBlog
-
Hacker News
- Sr SW Engineer, Netflix Open Connect CDN working on FreeBSD kernel performance.
- We've been running kTLS + SSL sendfile on FreeBSD at Netflix for the last 6 or 7 years
- Serving Netflix Video at 400Gb/s on FreeBSD [pdf]
NVIDIA Mellanox
- Kernel Transport Layer Security (kTLS) Offloads
- Ethernet ネットワーク アダプター - ConnectX SmartNIC | NVIDIA
- DataPacket で Mellanox が選択できる
- Hardware | DataPacket.com
- NVIDIA Mellanox MCX623106AC-CDAT ConnectX-6 が選択できる
- https://docs.nvidia.com/networking/display/ConnectX6DxEN
- ConnectX-6 Dx EN adapter card, 100GbE, Dual-port QSFP56, PCIe 4.0 x16, Crypto and Secure Boot, Tall Bracket
- つまり DataPacket では kTLS が利用できる Mellanox を使うことが可能
-
Mellanox ConnectX-6 Dx EN adapter card、100GbE、Dual-port QSFP56、PCIe 4.0 x16、Crypto and Secure Boot、Tall Bracket MCX623106AC-CDAT - NTT-X Store
- 価格:275,990円