前回の投稿において、タイマ粒度はどうなっているのか、という疑問があったが、良く見ると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との協調性を実現する道具としては魅力的ではある。誤差の範囲にしかならないかもしれないが…