Tensorlake のサンドボックスは、AI エージェントが作業を行うための高性能実行環境です。エージェントはファイルのアップロード、ダウンロード、プロセス制御などのためにサンドボックスと頻繁に通信します。しかし、従来のイングレスアーキテクチャは 2 つの L7 リバースプロキシに依存しており、複雑なタイムアウト設定、高い CPU オーバーヘッド、接続の中断といった問題がありました。そこでチームは、データパスを L7 プロキシから L4 バイト転送に移行し、カーネル TLS(kTLS)と splice(2) システムコールを導入することで、ほぼオーバーヘッドのないデータ転送を実現しました。
旧アーキテクチャでは、ユーザートラフィックはまずエッジゲートウェイで TLS 終端と認証が行われ、次に mTLS で第 2 の L7 プロキシに転送され、そこでサンドボックス内のアプリケーションにリクエストが送られていました。このプロセスでは、ユーザースペースでのコピーが 2 回発生し、完全な HTTP 解析が行われていたため、パフォーマンスが制限されていました。新しいアーキテクチャでは、データパスを独立した L4 転送デーモンとして分離し、サンドボックスオーケストレータから切り離すことで、オーケストレータのアップデート時にリアルタイムの接続が中断される問題を解決しました。
新しいデータパスは完全に L4 層で動作します。エッジゲートウェイが TLS を終端した後、mTLS でホスト上の L4 転送デーモンに接続し、サンドボックス ID とターゲットアドレスを含む短いフレームを送信します。転送デーモンはサンドボックスアプリケーションへの接続を確立し、splice(2) を使って 2 つの接続をカーネル内で直接結合します。重要なのは、転送デーモンがユーザースペースで TLS 1.3 ハンドシェイクを完了した後、setsockopt(TLS_TX) と setsockopt(TLS_RX) で鍵をソケットにインストールし、カーネルにレコード層の処理を任せることです。これにより、ゲートウェイソケットから読み取られたデータは既に復号済みの平文となり、ゼロコピーでサンドボックスのソケットに splice されます。このプロセスでは、ユーザースペースのバッファリングは一切行われません。
L7 層がなくなったため、アダプティブタイムアウトはバイトフローの監視に基づくようになりました。splice() が返すバイト数を使ってトラフィックを計測し、転送デーモンは定期的にオーケストレータに報告してサンドボックスのアイドルタイマーをリセットします。接続のクローズもより透過的になり、半クローズやリセット信号がそのまま伝達されます。
パフォーマンステストでは、単一接続のスループットが 1.12 GB/s から 2.50 GB/s に向上し、GB あたりの CPU 消費は 0.90 CPU 秒から 0.49 CPU 秒に低下しました。興味深いことに、パフォーマンス向上の大部分は L7 の解析とバッファリングを排除したことによるもので、kTLS 自体は約 20% のスループット向上に貢献しています。これらのテストは単一ホストで行われ、複数接続の場合は集約スループットが 8.67 GB/s(69 Gbps)に達します。チームは今後、splice ループの直列化問題を最適化し、kTLS をバイパスしてカーネル内で直接結合する方法も検討しています。