Ubuntu日本語フォーラム
ログインしていません。
今、TCPの勉強していて、少しわからないことが出てきて、質問させていただきます。
いろいろ調べていると、UbuntuはDelayed ACKをtcp.hで制御していることが分かったのですが、結局何ミリ秒
遅延させているのかよく分かりません。
具体的にどれくらい遅延させているものなのでしょうか。
Ubuntu16.10の場合、HZが「250」に設定されていたので、10ミリ秒という認識でよいのでしょうか。
------
root@ubu1610:/proc/sys/net/ipv4# more /usr/src/linux-headers-4.8.0-22/include/net/tcp.h(抜粋)
#define TCP_DELACK_MAX ((unsigned)(HZ/5)) /* maximal time to delay before sending an ACK */
#if HZ >= 100
#define TCP_DELACK_MIN ((unsigned)(HZ/25)) /* minimal time to delay before sending an ACK */
#define TCP_ATO_MIN ((unsigned)(HZ/25))
#else
#define TCP_DELACK_MIN 4U
root@ubu1610:/proc/sys/net/ipv4# cat /boot/config-`uname -r` | grep '^CONFIG_HZ='
CONFIG_HZ=250
------
ご教授のほど、よろしくお願いいたします。
オフライン
私はこのへんの話題に詳しくはありませんがレスがつかないようなので:
問題の定数がどのように使われているのかを調べてみると分かることが多いと思ます。
手元の kernel ソースは 14.04 のものしかないので 14.04(Linux 3.13) の場合ですが、
net/ipv4/tcp_output.c の 3040〜3060行目の付近を見ると TCP_DELACK_MIN の値が使われる場合は結局 jiffies に加算されていつ timeout するかが決められていることが分かります。jiffy はおおよそ 1/HZ 秒なので TCP_DELACK_MIN はおおよそ
(HZ/25)*(1/HZ)=1/25 秒 = 40msec
を表します。(HZ の値に関わらず同じ時間を表すことになることに注意。)
TCP_DELACK_MAX も考え方は同じです。なおどの時間単位になっているかは、念のため、お使いの kernel version のソースで確認してください。
オフライン