收起左侧

关于网卡驱动从r8169替换至r8168的一次体验

2
回复
27
查看
[ 复制链接 ]

1

主题

1

回帖

0

牛值

江湖小虾

关键词:

螃蟹网卡,R8169,R8168,RTL8111/8168/8411,SMB,速率,驱动

前情提要:

我的飞牛是运行在一台矿渣上面的,cpu是4125,8gb内存,搭载了一块螃蟹的RTL8111/8168/8411网卡。

在某一次飞牛更新之后,我发现我的飞牛的SMB接受速率跑不满了,固定只有16MB/s,但是从飞牛发出的速率依旧是千兆级别,打开FTP协议测试,收发都可以稳定千兆。当初盲猜是SMB协议问题,一顿操作猛如虎,关闭/etc/samba 配置的aio审计,关掉加密,强制SMB握手协议,但是一直都是只能16MB接收。

后面在飞牛Docker部署了一个OpenSpeedTest测试,http速率测试飞牛发出可以稳定千兆,但是飞牛接受大概有十分之一的次数是只有130Mb/s,于是开始怀疑是网卡问题,细究发现飞牛镜像搭载的是r8169的通用驱动,对于一些高速率网卡有时候会有bug导致掉速卡速,论坛里面有好多2.5G网卡的帖子,但是好像我没有见到过关于千兆网卡的。

于是自己着手自己照猫画虎,折腾一晚上已弄好,来跟大伙分享一下路,避免采坑。


动手操作:

以下内容是实际操作结合当时咨询的AI回复的结果:

P0:确认状态

使用ssh连接飞牛,确认当前驱动状态

sudo ethtool -i <网卡名>(一般是enp1s0)

此处得到返回driver:r8169,基本就是问题所在了

image.png

此处AI建议看一下系统内核版本和记录网卡PCI地址,但是感觉没什么用因为后面是直接引用的无需手动抄写,但是也写上来吧

# 也看一下内核版本(后面装 headers 要用)
uname -r
# 记一下你的网卡 PCI 地址(方便最后验证)
lspci -nnk | grep -A3 -i realtek

顺带准备一套键鼠或者准备一张USB网卡之类的,因为驱动安装的时候当前使用8169的网卡会断网,所以建议使用键鼠或者从usb网卡连接ssh,这样全程几乎不会受到影响

P1:安装编译依赖

切换root

sudo -i

更新软件源,安装编译工具

apt update

apt install -y build-essential libelf-dev curl wget

安装匹配当前内核的 linux-headers

apt install -y linux-headers-$(uname -r)

精简牛可能会报错,因为精简牛的仓库缺失了某些源码所以没法完成,需要手动下载headers的deb包

验证安装到位

ls /lib/modules/$(uname -r)/build/Makefile
# 不报错就 OK

P2:下载螃蟹r8168驱动源码

螃蟹的驱动搜索真的很烦很烦,网址又不固定,建议手动搜索然后下载

Realtek

官网左侧三道杠,下载中心,通讯网络ICS

选择“Realtek PCIe FE / GbE / 2.5GbE / 5G / 10G Family Controller Software”

可以使用页内搜索定位8168,找到Unix的8168驱动,点击下载

image.png

此处会得到一个.tar.bz2包,使用ssh文件管理或者U盘传到飞牛的某个路径,此处选择了/tmp

cd /tmp
tar -jxvf r8168-*.tar.bz2
cd r8168-*/     # 进入解压后的目录
ls               # 你应该能看到 autorun.sh src/ Makefile 等

P3:编译,安装

懒人操作,使用官方脚本,简单便捷

chmod +x autorun.sh
./autorun.sh

AI提示,这个脚本会:

make编译 r8168.ko
make install把模块装进 /lib/modules/$(uname -r)/...
把 r8169加入黑名单(/etc/modprobe.d/里写 blacklist)
depmod -a && update-initramfs -u
加载 r8168 并卸载 r8169 → 此时网口会闪断再恢复
如果是 SSH 会话,./autorun.sh跑完网络一般会自己恢复(约 30~90 秒);但如果它没回来,就去接显示器看控制台,多半是 DHCP 没续上,手动 dhclient enp1s0(接口名按你的改)即可。

AI还介绍了高手操作,享受过程,步步掌握,我没实操,没法反馈会发生什么

cd src/
make clean
make all
make install
#成功之后
# blacklist 掉内核自带的 r8169
echo "blacklist r8169" > /etc/modprobe.d/blacklist-r8169.conf
echo "install r8169 /bin/false" >> /etc/modprobe.d/blacklist-r8169.conf

# 更新 initramfs 让黑名单持久化
update-initramfs -u

# 立刻切换(⚠️ 这里会断网)
modprobe -r r8169
modprobe r8168

# 如果 IP 丢了就续一下 DHCP
dhclient $(ip -br link | awk '/DOWN|UNKNOWN/{print $1; exit}') 2>/dev/null || echo "请手动 dhclient 你的网卡名"

P4:验证驱动,验证持久化

ethtool -i <网卡名>

此处会输出driver:r8168

version:<你从官网下载到的版本号>

假如你的root因为连接掉了,就使用sudo

lspci -nnk | grep -A3 -i realtek

验证正在用哪个驱动

应该可以发现网卡在使用r8168

reboot

重启机器,验证持久化,开机后ssh机器,重新执行P4,应输出r8168

再然后,因为网卡驱动导致的smb就可以满速运行了

image.png

P5:断网抢救

如果使用r8169的网卡ssh安装过程中联系不上机器了,就需要用到P0准备的键鼠了

rm -f /etc/modprobe.d/blacklist-r8169.conf
modprobe r8169
dhclient $(ip -br link | awk '/UP/{print $1; exit}')

清理掉装的模块,重新回到P3

rm /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/realtek/r8168.ko 2>/dev/null
depmod -a && update-initramfs -u
reboot

P6:飞牛SMB可能存在的一些坑

有说是/etc/samba 的smb.conf和smb.custom.conf里面的

aio read size = 0 
aio write size = 0

当这两个值=1的时候会触发异步写入吃掉巨量的SMB性能,这个可以在网页设置里面快速关掉,或者ssh之后使用sudo vim强制修改,各位自己品鉴。

还有一个就是上面提到的两个文件里面的

  vfs objects = trim_perms full_audit

这行会触发smb传输审计,会吃掉cpu的性能导致跟不上传输,实测下来J4125面对千兆传输,几乎不占用什么性能,这个也是各位自己品鉴吧。

后话

这件事本身不难,慢慢尝试,认真看各行命令的输出,注意细节就好,祝各位成功。

收藏
送赞
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

20

主题

188

回帖

525

牛值

共建版主

社区上线纪念勋章社区共建团荣誉勋章飞牛百度网盘玩家fnOS1.0上线纪念勋章EVO2产品纪念灌水之星AMD适配纪念勋章

如果没记错的话,默认是8169,开启性能模式就是8168

76

主题

5970

回帖

1235

牛值

共建版主

社区上线纪念勋章社区共建团荣誉勋章飞牛百度网盘玩家fnOS1.0上线纪念勋章EVO2产品纪念灌水之星AMD适配纪念勋章

螃蟹的网卡可以尝试开启网卡性能模式,默认是开源驱动,性能模式是厂家驱动。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则