私は現在、独学の目的で、KCP、Dragonite、QUICに触発された信頼性の高いUDPトランスポートを実装しています。いくつかの最適化を適用したいと思います。そのうちの1つは多重化です。
私の考えは次のとおりです。データを小さなチャンクに分割し(チャンクサイズはMTUと相関しています)、コルーチンを利用して、複数のデータグラムソケットを介して非同期で(クライアントとサーバーの両方で)データを送受信します。
このソリューションは機能しますか?パフォーマンスの向上を期待する必要がありますか?
TCP UDPとは異なり、スロースタートはありません。つまり、最初からフルスピードで送信を開始できます(わかっている場合)。したがって、基本的に、送信を実行できる速度の制限は、ローカルシステムがデータを送信できる速度または使用可能な帯域幅のいずれかです。送信がCPUにバインドされておらず、想定する複数のソケットすべてのトラフィックが同じ方法(発信ネットワークカード、ルーター、着信ネットワークカード)を取り、ミドルボックスで接続固有のトラフィックシェーピングが行われず、複数を使用すると仮定します。ソケットは、さまざまなボトルネックの使用方法を変更しないため、速度が向上することはありません。
これは、送信がCPUバウンドの場合に変更されます。この場合、複数のコルーチンを複数のソケットと組み合わせて使用すると、複数のCPUコアで同時に実行され、CPUが再びバインドされるまで、より多くのパケットを送信できるという点で、今日のマルチプロセッサシステムをより有効に活用できる可能性があります。
これは、トラフィックが帯域幅に制限されている場合にも変更されますが、追加の帯域幅を提供するターゲットシステムへの代替パスがあります。ソケットを別のローカルIPアドレス(別のローカルネットワークカード上)にバインドするか、別のターゲットIPアドレス(同じターゲットシステム用)を選択することで、そのような代替パスを使用して、追加の帯域幅を利用できる場合があります。 。
同様に、クライアントとサーバー間の接続ごとの帯域幅を制限するトラフィックシェーピングがある場合は、複数のソケットが役立つ可能性があります。この場合、複数のソケットを使用すると、使用可能な帯域幅の量を増やすことができます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加