TCPタイムアウトの変更(2)

前回の投稿において、タイマ粒度はどうなっているのか、という疑問があったが、良く見るとHZの値がキーであることに気がついた。

#define TCP_RTO_MIN ((unsigned)(HZ/5))

Linux KernelにおけるHZについて詳しい説明があるのが@IT:Linux Kernel Watch 8月版 割り込み頻度変更で消費電力は低下するか?(1/2)で、

 カーネル2.6.13-rc1にて、タイマー割り込みの頻度「HZ」が変更可能になりました。その際に、デフォルトの値が以前の
HZ=1000

から
HZ=250

になりました。このデフォルト値変更は多くの議論を巻き起こしました。

と説明している。実際に/boot/config-2.6.18-3-686を見てみると、

# CONFIG_HZ_100 is not set
CONFIG_HZ_250=y
# CONFIG_HZ_1000 is not set
CONFIG_HZ=250

と、それらしきことが書いてある。よってTCP_RTO_MINはHZ/5=250/5=50ということだ。

で、おそらく、このHZがKernelの割り込みであるのだから、TCPの割り込みもそれで入っているのかもしれない。また、興味深い事実として、

 デフォルト値を250から1000に戻してほしいという要求に対して、Linusは「それが必要なユーザーが1000に変更したらよいだけだろう」と反論しました。そして、「『デフォルトを1000にするべきだ』と主張するのであれば、それが本当に良いということを示すデータを見せろ」というのです。

と書かれている。すなわち、もしTCPのタイマの粒度=Kernelのタイマの粒度であるのなら、HZを1000にしてより細かい粒度のタイマを試すことも可能かもしれない。

4msタイマと1msタイマの違いがどれほどあるのか分からないが、レイヤ2との協調性を実現する道具としては魅力的ではある。誤差の範囲にしかならないかもしれないが…

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>