安価な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なんかはサポートされてないし。