驱动有点问题。
问题简述
Intel I219-LM 的网卡,在 1Gbps 对等网络上进行 iperf 测试时,如果由 client 端发起连接,TCP throughput 只有 500Mbps,如果由 server 端发起连接,则无问题。
该问题由 Linux Kernel v4.14.3 对 e1000e 驱动引入的一个 bugfix 所致,根据 Hetzner 的文档,关闭网卡的 segmentation offloading 可以解决这个性能问题。经本人测试后实则不然,关闭 TSO 与 GSO 后的 I219-LM 网卡在 v4.15+ 内核自带的 e1000e v3.6.2-k 和 Intel 官网最新的 e1000e v3.8.4-NAPI 驱动下仍然存在 10% 左右的吞吐量损失。
目前,在 rollback 该 patch 且关闭 TSO 与 GSO 的情况下才能实现正常 1Gbps的吞吐量。
解决方案
目前,该问题需要这几个步骤进行解决:
- 下载编译修正的驱动
- 使用 dkms 安装内核模块,并允许内核升级的时候自动重新编译并安装该模块
- 使用 networkd-dispatcher 将 ethtool 的修改持久化
准备环境
apt install git build-essential dkms networkd-dispatcher ethtool
将驱动作为 dkms 的模块
git clone https://github.com/KozakaiAya/e1000e-rollback.git e1000e-3.8.4 cd e1000e-3.8.4 cp -R . /usr/src/e1000e-3.8.4 dkms add -m e1000e -v 3.8.4 dkms build -m e1000e -v 3.8.4 dkms install -m e1000e -v 3.8.4
在驱动的 repo 中已经加入了 dkms.conf,所以这里直接将代码复制到对应位置以后用 dkms 安装即可。
如果需要删除该模块,使用 dkms remove -m e1000e/3.8.4 --all
配置 networkd-dispatcher
sudo vi /usr/lib/networkd-dispatcher/routable.d/10-disable-offloading
10-disable-offloading 内容
#!/bin/sh ethtool -K <iface> tso off gso off
将这里的 <iface> 改成对应的 interface 名称
然后保证该文件的 owner 为 root:root,权限为 755(rwxr-xr-x)
重启一下使用 ethtool -i <iface> 和 ethtool -k <iface> 查看一下驱动是否已经变为 3.8.4-NAPI,TSO 和 GSO 是否已经关闭。
参考资料
https://downloadcenter.intel.com/download/15817/Intel-Network-Adapter-Driver-for-PCIe-Intel-Gigabit-Ethernet-Network-Connections-Under-Linux-?product=71305
https://downloadmirror.intel.com/15817/eng/readme.txt
https://forum.manjaro.org/t/solved-only-half-gigabit-eth-with-intel-i219-lm-v-under-kernel-4-14-to-4-19/58886
https://forum.manjaro.org/t/slow-ethernet-on-manjaro-kde-fine-on-antergos/40294/21
https://wiki.hetzner.de/index.php/Low_performance_with_Intel_i218/i219_NIC/en
https://github.com/torvalds/linux/commit/b10effb92e272051dd1ec0d7be56bf9ca85ab927
https://michael.mulqueen.me.uk/2018/08/disable-offloading-netplan-ubuntu/
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/diff/drivers/net/ethernet/intel/e1000e?id=v4.14.3&id2=v4.14.2
https://help.ubuntu.com/community/DKMS
https://linux.die.net/man/8/dkms
Appendix:iperf3 测试结果
https://paste.gloriousdays.pw/?745c0acb890060af#C15hxVo1YZWyWPynmpfwZG4Pp76Ns9fj2ZFmPtMCuSSK