TCPは、IPのようにトラフィックを優先しません。データをアップロードしているTCPバックグラウンド接続が多数開かれている場合(BitTorrentがバックグラウンドでシードしている場合など)、TCPはパケットをIPレベルに送信するために一度に1つのソケットのみを選択するため、特定のソケットで遅延が発生する可能性があります。したがって、特定のソケットは、他の多くの接続に加えて、優先順位を持たずに順番を待たなければならず、遅延が発生します。
私は現在いくつかの実験を行っており、そのような輻輳状況でTCPによって生成される遅延を測定しようとしています。この遅延はトランスポート(TCP)レベルで発生するため、一部のLinuxシステムコールが使用される正確な瞬間をフックすることにより、遅延を正確に測定することを考えています。
TCPを使用してサーバーにデータをアップロードしたいと思っています(Iperfツールを使用できます)。システムコールをフックするために、 SystemTapを使用したいと思います。このツールは、特定のシステムコールが呼び出された正確な瞬間を教えてくれます。
パケットを送信するときに使用される2つのシステムコールの名前を知りたいです。
- パケットを要求する最初のTCPレベルの関数(それはtcp_sendmsgです)。
- 最後のTCPレベルの関数は、それをIPネットワークレベルに渡すパケットを要求しましたか?
これら2つのシステム関数を呼び出す瞬間の違い(デルタ)は、私が知りたい遅延です。