13 ポイント 投稿者 GN⁺ 2024-09-10 | 1件のコメント | WhatsAppで共有
  • QUICはWebアプリケーションの性能向上に画期的な変化をもたらすと期待されるプロトコルだが、性能は期待に及ばない
  • この論文では、高速ネットワークにおけるQUICの性能を体系的に分析する

要旨

  • 高速インターネットにおいて、UDP+QUIC+HTTP/3スタックはTCP+TLS+HTTP/2と比べて最大45.2%のデータ転送スループット低下を示す
  • QUICとHTTP/2の性能差は、基礎帯域幅が増加するほど大きくなる
  • この問題は、軽量データ転送クライアントと主要Webブラウザ(Chrome、Edge、Firefox、Opera)、多様なホスト(デスクトップ、モバイル)、多様なネットワーク(有線ブロードバンド、セルラー)で観測される
  • ファイル転送だけでなく、動画ストリーミング(最大9.8%の動画ビットレート低下)、Webブラウジングなど多様なアプリケーションに影響を与える
  • 厳密なパケット追跡分析とカーネルおよびユーザー空間のプロファイリングを通じて根本原因を特定する
  • 特に、過剰なデータパケットとQUICのユーザー空間ACKによって受信側の処理オーバーヘッドが高い
  • 観測された性能問題を緩和するための具体的な推奨事項を提示する

性能低下の根本原因

  • 受信側のカーネルレベルで過剰なパケット処理オーバーヘッドが発生
    • QUICはUDP GRO(Generic Receive Offload)を使用しないため、TCPに比べてはるかに多くのパケットを処理しなければならない
    • これはnetif_receive_skb関数の呼び出し回数がQUICで大幅に多いことから確認される
  • ユーザー空間でもQUICの過剰なパケット処理オーバーヘッドが発生
    • カーネルから渡された多数のパケットを処理する際のオーバーヘッドが大きい
    • ユーザー空間でQUIC ACKを生成することもオーバーヘッドの原因となる

性能低下緩和のための提案

  • 受信側でUDP GROを導入
    • UDPスタックで処理すべきパケット数を減らし、カーネルおよびユーザー空間のオーバーヘッドを低減
    • ただし、多様なクライアント環境でUDP GROを展開するのは容易ではない可能性がある
  • GSO/GROのようなオフロードソリューションをQUIC向けに改善
    • 異なるサイズのUDPパケットトレインもオフロードできるように支援
    • GSOに適切なペーシング設定を追加してネットワーク輻輳を防止
  • 受信側のQUICロジックを最適化
    • QUIC ACK送信を遅延させ、応答生成オーバーヘッドを低減
    • recvmmsgを使って一度に複数のUDPパケットを読み取り、性能を改善
  • マルチスレッドダウンロードを使用
    • 大容量ファイルでは、複数CPUコアを活用したマルチスレッドダウンロードで受信性能を向上できる
    • ただし、公平性の問題を考慮する必要がある

1件のコメント

 
GN⁺ 2024-09-10
Hacker Newsの意見
  • syscall インターフェースが複雑で、基本 API は一般的なサイズのパケット(約 1500 バイト)に対して遅すぎる
    • GSO は役に立つが、API が複雑で、最近でもバグが多い
  • Spectre 緩和により syscall のコストがさらに高くなった
    • BSD ソケット / POSIX API を置き換える必要がある
    • uring は複雑だが、中間レベルの API が必要
  • システムの UDP バッファはデフォルトで小さすぎる
    • 専門家だけが使っており、専門家は設定を調整している
  • UDP スタックは最適化可能
    • GSO がそれを示しているが、GSO 自体が高コストで複雑
  • 現在利用可能ないくつかの最適化は、小規模/中規模でしか機能しない
    • たとえば、経路探索を避けるための接続バインディング
  • GSO を実装すると、性能が大幅に向上する可能性がある
    • プラットフォーム側のバッファサイズを増やす必要があるだろう
  • QUIC 初期には、UDP スタックは TCP スタックより最適化が進んでいなかった
    • UDP Generic Receive Offload のような最適化が必要
  • HTTP/2 も急いでリリースされたように見える
    • Chrome がサーバープッシュ対応を削除した
    • もっと慎重な検討が必要
  • QUIC と HTTP/2 は、ネットワーク帯域幅が低いときは似た性能を示す
    • 帯域幅が 500Mbps を超えると QUIC の性能は低下する
    • これは主にローカルネットワークで問題になる
  • Google には、処理負荷をユーザーに転嫁する傾向がある
    • たとえば、AV1 ビデオコーデックは、消費者側に HW デコード機能がない段階で配布された
  • 研究論文は arXiv にある
  • RTT が 0.23ms の ping への言及
    • 高遅延環境でも QUIC が最良
  • RFC9000 を読むのは難しく、複雑
    • QUIC の高レベルなアイデアは単純だが、仕様は多くの例外処理を要求する
  • 研究の無料 PDF を提供
  • 接続プロトコルをユーザー空間へ移すことは、良い計画ではないかもしれない