H_ERTT(4) | FreeBSD Kernel Interfaces Manual | H_ERTT(4) |
名称
h_ertt — 強化されたラウンドトリップ時間 (Enhanced Round Trip Time) Khelp モジュール書式
#include < netinet/khelp/h_ertt.h>解説
h_ertt Khelp モジュールは、瞬時の RTT の低雑音の見積りを接続毎に TCP に提供するために khelp(9) フレーム内で動作します。実装は、遅延した承認に直面して堅牢であること、 TCP セグメンテーションオフロード (TSO)、 TCP タイムスタンプと全体の TCP タイムスタンプオプションの不足を操作するレシーバを試みます。遅延した承認を使用する TCP レシーバは、(最初のタイムスタンプを反映する) あらゆる 2 番目のパケットを承認するか、または 2 番目のパケットが到着しなければ承認の引き金となるタイムアウトを使用します。 h_ertt によって使用されたヒューリスティックが、レシーバが遅延した承認を使用することを決定するなら、(承認の引き金となる) 2 番目のパケットを使用して RTT を測定します。正確に決定できないので、承認が最初のパケットのためのものであるなら、 RTT を測定しません。
TSO が使用中であるとき、 h_ertt は、新しい測定に使用するパケットをマークしている間にすぐに TSO を無効にします。プロセスには、接続でごくわずかな影響があります。
h_ertt は、各接続の TCP 制御ブロックで続く struct を関連づけます:
struct ertt { TAILQ_HEAD(txseginfo_head, txseginfo) txsegi_q; /* プライベート. */ long bytes_tx_in_rtt; /* プライベート. */ long bytes_tx_in_marked_rtt; unsigned long marked_snd_cwnd; int rtt; int maxrtt; int minrtt; int dlyack_rx; /* プライベート. */ int timestamp_errors; /* プライベート. */ int markedpkt_rtt; /* プライベート. */ uint32_t flags; };
プライベートとマークされたフィールドは、 h_ertt 実装の外側でどのようなコードでも操作するべきではありません。プライベートでないフィールドは、次のデータを提供します:
- bytes_tx_in_marked_rtt
- markedpkt_rtt で転送されたバイト数。
- marked_snd_cwnd
- マークされた rtt 測定のための cwnd の値。
- rtt
- 最新の RTT 測定。
- maxrtt
- 取られた最も長い RTT 測定。
- minrtt
- 取られた最も短い RTT 測定。
- flags
- ERTT_NEW_MEASUREMENT フラグは、新しい測定が利用可能であるときに、実装によって設定されます。新しい測定のための通知方法としてそれを使用したいなら、フラグを未設定とすることは、 h_ertt 消費者の責任です。
謝辞
このソフトウェアの開発とテストは、Community Foundation Silicon Valley において FreeBSD Foundation と Cisco University Research Program Fund からの助成金によって一部可能となりました。歴史
h_ertt モジュールは、 FreeBSD 9.0 ではじめて登場しました。このモジュールは、 Advanced Internet Architectures、Melbourne、Australia のために Swinburne University of Technology の Centre において NewTCP 研究プロジェクトに従事している間に、David Hayes によって 2010 年に始めてリリースされました。その他の詳細は、次で利用可能です:
http://caia.swin.edu.au/urp/newtcp/
作者
h_ertt Khelp モジュールとこのマニュアルページは、 <david.hayes@ieee.org>によって書かれました。バグ
モジュールは、モジュールがロードされた後に、作成されたすべての新しい TCP 接続のために強化された RTT 見積りを維持します。実際に ERTT 見積りを心配する接続に影響されるだけのモジュールがあることが可能であるかどうか確かめるのは、有益であるかもしれません。January 18, 2012 | FreeBSD |