お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2016-12-11 16:21:13

sekihirakousen
新しいメンバ
登録日: 2011-11-12

Delayed ACKの値について

今、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
------

ご教授のほど、よろしくお願いいたします。

オフライン

 

#2 2016-12-14 12:59:22

taka.zoo.n
メンバ
登録日: 2013-05-30

Re: Delayed ACKの値について

私はこのへんの話題に詳しくはありませんがレスがつかないようなので:
問題の定数がどのように使われているのかを調べてみると分かることが多いと思ます。
手元の 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 のソースで確認してください。

オフライン

 

Board footer

Powered by FluxBB