ASUS XG-C100Cのチューニング

Red Hat

安価な10G NICということで2枚買って、1枚はRHEL 7.5、1枚はWindows 10 1803に。双方共にNetgearのXS505Mに接続。

Linux側はifconfig、もしくは/etc/sysconfig/network-scripts/ifcfg-*でMTUを9014に。

# ifconfig enp10s0 mtu 9014

kernel parameterは/etc/sysctl.conf/etc/sysctl.d/99-sysctl.confに以下。

net.ipv4.tcp_timestamps=0
net.ipv4.tcp_sack=0
net.ipv4.tcp_low_latency=1
net.ipv4.tcp_window_scaling=0
net.ipv4.tcp_dsack=0
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
net.core.netdev_max_backlog=250000
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.core.rmem_default=16777216
net.core.wmem_default=16777216
net.core.optmem_max=16777216
net.ipv4.tcp_rmem="4096 87380 16777216"
net.ipv4.tcp_wmem="4096 65536 16777216"

Win側はデバイスマネージャからASUS XG-C100Cを選択して、詳細設定でJumbo Packetを9014 Bytesに。

Linuxでiperf3を起動、firewall-cmdで5201/tcpを開けて待つ。

# firewall-cmd --add-port 5201/tcp
# firewall-cmd --reload
# iperf3 -s -p 5201

Windowsでcmd.exeでiperf3を起動。i5-6500なので、-Pは4 (core)。

C:\Users\rio_a\Desktop\iperf-3.1.3-win64>iperf3.exe -c 192.168.1.2 -p 5201 -l 16384 -t 30 -P 4 -w 512k

これで8.7Gbpsぐらい。

さて、RHEL 7.5ではXG-C100Cのドライバはatlantic.koなんだけど、何が弄れるかというと以下。

# ethtool -k enp10s0 | grep -v fixed
Features for enp10s0:
rx-checksumming: on
tx-checksumming: on
	tx-checksum-ip-generic: on
scatter-gather: on
	tx-scatter-gather: on
tcp-segmentation-offload: on
	tx-tcp-segmentation: on
	tx-tcp-mangleid-segmentation: off
generic-segmentation-offload: on
generic-receive-offload: on
large-receive-offload: off
receive-hashing: on
tx-nocache-copy: off

LROをonにすると、kernelがpanicしたw
たぶんデフォのまま使うのが吉というか、安いNICなので例えばadaptive-rxなんかはサポートされてないし。