ソフトウェアエンジニア現役続行

雑多なことを綴ります

PPPのtxqueuelenが小さすぎる

LinuxでイーサネットとPPPインタフェースのルーティングをすると、イーサネットからPPPインタフェースへの通信パケットをこぼしてしまうことがありました。
f:id:Oswald:20110226090524j:image
調べていった結果、PPPインタフェースのtxqueuelenが3(デフォルト値)であることが原因だと分かりました。


[root]# ifconfig ppp0
ppp0 Link encap:Point-to-Point Protocol
inet addr:x.x.x.x P-t-P:y.y.y.y Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1454 Metric:1
RX packets:600700 errors:0 dropped:0 overruns:0 frame:0
TX packets:1011374 errors:0 dropped:0 overruns:0 carrier:0
Collisions:0 txqueuelen:3
RX bytes:42335282 (40.3 Mb) TX bytes:1424516252 (1358.5 Mb)

txqueuelenはパケットの送信キューのサイズです。これが3つしかなかったため、イーサネットから大量にパケットが流れてくると、PPPインタフェースの送信キューからあふれてしまってました。

txqueuelenを30にしたところ、通信パケットがこぼれる現象は起こらなくなりました。


[root]# ifconfig ppp0 txqueuelen 30

手動でifconfigコマンドを使って毎回txqueuelenを設定するのは手間と感じる場合は、ip-up.localを使って自動化します。

[root]# cat /etc/ppp/ip-up.local
INTERFACE=$1
ifconfig $INTERFACE txqueuelen 30