vpnサーバーが遅い

vpnサーバーが遅いと連絡が入った。
調べると、以下のような感じ・・・

eth9: flags=4163 mtu 1500
inet 222.222.222.222 netmask 255.255.255.0 broadcast 222.222.222.255
ether aa:bb:cc:dd:ee:aa txqueuelen 1000 (Ethernet)
RX packets 500614698 bytes 350228165526 (326.1 GiB)
RX errors 0 dropped 2 overruns 145513 frame 0
TX packets 495427717 bytes 304122743490 (283.2 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device memory 0xfbb80000-fbbfffff

RXのoverrunが目立つので調査開始
bytes

正常に受信/送信できたバイト数を意味します。
packets

正常に受信/送信できたパケット数を意味します。
errors

Ethernet の CRC エラーが検知され、処理できなかったパケット数を意味します。ケーブル接触不良やノイズ、受光が低レベルであることなどが原因として考えられます。
dropped

以下の4つのケースがあります。

1.Ethernetヘッダの”Type”に、サポートしていないプロトコルが入っていた場合
2.予期せぬVLANタグのフレームを受信した場合
3.IPv6を無効化したインタフェースでIPv6のパケットを受信した場合
4.softnet_stat の Backlog(積み残し処理) が許容量を超えたとき

1~3を総括すると、この dropped は「意図的に破棄した未サポートプロトコルパケットの数」を示しています。
ただし例外が4です。これについては、そもそもこの dropped 等のインタフェースのカウンタを司る softnet_stat というプログラム自身において
処理しきれない程に大量のパケットが来たときに溢れたものも(プログラム構造上やむなく) dropped として取り扱います。

overrun

overrun は前述の dropped の “4” と同じ状況で起こりえます。
ただし、こちらは rx-ring (ring-buffer) と呼ばれる、NICの受信パケットを取り扱うメモリバッファ領域が確保できず
破棄してしまったパケットを意味します。
つまり、この overrun は「大量パケット(スパイク)を受信し、メモリバッファ不足により処理が行えず
やむなく破棄したパケットの数」を示しています。
つまり、通信量が多く、パケットの取りこぼしが起きるケースにおいては、softnet_stat のバックログ枯渇が先か
メモリバッファ枯渇が先かによって、どちらのカウンタがアップするかが決まります。これは環境依存です。

なお、Linuxでrx-ring(ring-buffer)の確認、および変更するときは以下を実行します。

【確認】
[root@localhost ~]# ethtool -g eth9
Ring parameters for eth9:
Pre-set maximums:
RX: 4096
RX Mini: 0
RX Jumbo: 0
TX: 4096
Current hardware settings:
RX: 256
RX Mini: 0
RX Jumbo: 0
TX: 256

【変更】
[root@localhost ~]# ethtool -G eth9 rx 512

vi /etc/rc.d/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run ‘chmod +x /etc/rc.d/rc.local’ to ensure
# that this script will be executed during boot.

touch /var/lock/subsys/local
###— overrun happned RX change buffer 2018-07-11 WATS —###
/usr/sbin/ethtool -G eth0 rx 512
/usr/sbin/ethtool -G eth5 rx 512
/usr/sbin/ethtool -G eth9 rx 512

ディープだな・・・

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です