2016-10-18 3 views
1

カスタムプロトコルでTCPのようなRTT推定を実装しています。私は、以前のRTT推定が行われていない最初の繰り返しの場合は、機能にLinuxカーネルでTCPのRTTを測定する

static void tcp_rtt_estimator(struct sock *sk, long mrtt){ 
long m = mrtt; /* RTT */ 

を見ると、コードスニペットはmの値がsrttに直接取られていないのはなぜ

srtt = m << 3;   /* take the measured time to be rtt */ 

です?私の理解によると、パラメータmrtt_usは、現在の往復時間測定のためのjiffiesの値に過ぎません。

mrtt_usについての上記の仮定は間違っていますか?はいの場合、この関数にどのような値を渡す必要がありますか?

P.S.-私は現在、この関数に渡しているjiffiesで測定されたRTTを持っています。 srtt = m << 3

+0

はそれがルーチンに渡されたRTT値に適用されるアルゴリズムを平滑化の一部ではないですか? http://ee.lbl.gov/papers/congavoid.pdf – bytefire

+0

はい、スムージングアルゴリズムでは、最初のRTT測定を直接SRTTとして使用し、適切なものを使用するよう指示していますsecong RTT測定から式を使用する必要があります。 https://tools.ietf.org/html/rfc6298のセクション2.2 –

答えて

1

の私はhttps://lkml.org/lkml/1998/9/12/41それは言及

でLKML上のメールチェーンの1からこれを考え出したので、最初srtt値が測定されたRTT以外のものが格納されているSRTTが実際にあることになると明らかに、これは間違っています実際のSRTTの8倍。私はそれが計算のより高い精度を提供するような方法で行われたと思います。だから、質問に答えるために、RTTの測定値はjiffy単位で、この関数に渡されるべき

(カーネルのバージョン3.13)

関連する問題