サーバのNIC(eth0)にてRXのdroppedカウンタが増加していることに気がついた。
◆ 問題点
droppedが増えている。
droppedが増えている。
$ ifconfig
eth0 Link encap:Ethernet HWaddr 78:E7:D1:DE:AE:7A
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:1229784925 errors:0 dropped:830 overruns:0 frame:0
TX packets:1527648296 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3738595284 (3.4 GiB) TX bytes:1955713102 (1.8 GiB)
Interrupt:169 Memory:f4000000-f4012800
RX : Receive eXchange(受信)
TX : Transmit eXchange(送信)
受信側のリングバッファ(ring buffer)のサイズを上げることにする。
◆ 現在の設定確認
$ ethtool -g eth0
Ring parameters for eth0:
Pre-set maximums:
RX: 1020 ← ここまで上げられる
RX Mini: 0
RX Jumbo: 4080
TX: 255
Current hardware settings:
RX: 255 ← 現在値
RX Mini: 0
RX Jumbo: 0
TX: 255
-g : Queries the specified ethernet device for rx/tx ring parameter information.
バッファを領域がいっぱいになったあとは、名前のとおり、
古いデータを順次上書きするような循環バッファとして機能する。
リングバッファの現在の利用率を確認することは難しい。
NICドライバが管理する領域であり、OSからは確認できない。
◆ 設定の変更
さしあたり2倍程度にする(ルート権限が必要である)。
CPUの処理量の増加が増やすことのデメリットとしてあげられる。
CPUの処理量の増加が増やすことのデメリットとしてあげられる。
$ ethtool -G eth0 rx 512
-G : Changes the rx/tx ring parameters of the specified ethernet device.
設定変更後、一時的にNICのリセットが発生し、リンクのダウン・アップ(ただし瞬断)が発生した。
◆ 設定変更後の確認
$ ethtool -G eth0 rx 512
Ring parameters for eth0:
Pre-set maximums:
RX: 1020
RX Mini: 0
RX Jumbo: 4080
TX: 255
Current hardware settings:
RX: 512 ← 変更された
RX Mini: 0
RX Jumbo: 0
TX: 255
◆ 設定変更後の有効性確認
ドロップカウンタが増加し続けているか確認する。
リングバッファのサイズを変更するとカウンタは初期化される。
しばらく時間をおいて確認するも増加していない。
$ ifconfig
eth0 Link encap:Ethernet HWaddr 78:E7:D1:DE:AE:7A
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:1229784925 errors:0 dropped:0 overruns:0 frame:0
TX packets:1527648296 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3738595284 (3.4 GiB) TX bytes:1955713102 (1.8 GiB)
Interrupt:169 Memory:f4000000-f4012800
◆ 設定の永続化
設定を永続化させるために、下記ファイルにも記載しておく。
$ vi /etc/rc.d/rc.local
#!/bin/sh
ethtool -G eth0 rx 512
大規模なシステムを構築するなら下記も見直すことが必要である。
kernelチューニング
ユーザ単位でのシステムリソース制限
TSO(TCPsegmentation offload)、
GSO(Generic Segmentation Offload)
の扱いも考慮すべきである。
tcを利用したトラフィックコントロール内の
【TSO、GSOの扱い】章を参照。
ethtool -G eth0 rx 512
大規模なシステムを構築するなら下記も見直すことが必要である。
kernelチューニング
ユーザ単位でのシステムリソース制限
TSO(TCPsegmentation offload)、
GSO(Generic Segmentation Offload)
の扱いも考慮すべきである。
tcを利用したトラフィックコントロール内の
【TSO、GSOの扱い】章を参照。