前两篇信创网卡文章聊了选型和基础实测,这篇往深里走。驱动装上了只是第一步——ring buffer 设多大、中断怎么绑核、RSS 队列怎么分,这些参数直接决定网卡能不能跑满带宽。本文从驱动编译开始,一步步拆解信创环境下网卡性能调优的完整链路。
如果你还在选型阶段,建议先看《信创环境下网卡性能实测报告(2026版)》,那篇覆盖了芯片方案对比和基础性能数据。本文聚焦的是"装好驱动之后"的事情。
2026年,麒麟V10 SP1(内核5.10+)和统信UOS 1070(内核5.15+)已经内置了主流国产网卡驱动。LRES1031PF-2SFP+(沐创 RNP N10)和 LRES2045PT(网迅 WX1860)在这两个系统上都能免驱识别。但实际项目中,你大概率会遇到以下三种需要手动编译的场景:
场景一:老版本系统。 麒麟V10初始发行版(2019年,内核4.19)和统信UOS 1050之前的版本,内核中没有集成沐创和网迅的驱动模块。
场景二:自定义内核。 部分信创项目出于安全加固需求会裁剪或重编内核,导致网卡驱动模块被移除。
场景三:新芯片方案的首发驱动。 比如 LRES1530PF-2SFP28 的网迅 WX5025 方案,如果系统内核版本低于5.15,可能需要从 LR-LINK 官网下载新版驱动源码编译。
手动编译的标准流程:
# 1. 确认内核版本和头文件
uname -r
# 输出类似:5.10.0-106.ky10.aarch64
# 2. 安装内核开发包(麒麟V10)
sudo yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r)
# 3. 解压驱动源码包
tar xf LR-LINK_nic_driver_v3.x.tar.gz
cd LR-LINK_nic_driver_v3.x/
# 4. 编译(注意指定内核源码路径)
make KSRC=/usr/src/kernels/$(uname -r)
# 5. 安装模块
sudo make install
# 6. 加载模块
sudo modprobe lr_nic
# 或
sudo insmod src/lr_nic.ko
# 7. 验证
ip link show
dmesg | tail -20
国产 OS 自带的 gcc 版本可能和内核编译时使用的版本不一致。运行 gcc --version 和 cat /proc/version 对比——如果 gcc 大版本号不同(比如内核用 gcc 10 编译,系统装的是 gcc 12),编译驱动时可能报 modpversion 错误。解决办法是安装和内核匹配的同版本 gcc,或者用 make KCFLAGS="-Wno-error" 跳过版本检查。
驱动装好之后,默认参数通常是"保守配置"——保证能跑,但不是最优。调优的第一步是 ring buffer 和中断合并(interrupt coalescing),这两个参数都通过 ethtool 命令调整(参考 ethtool 手册)。
Ring buffer(收发队列深度)。 这个参数决定了网卡硬件和驱动之间缓冲区的容量。默认值通常是 256 或 512,在高并发小包场景下容易溢出导致丢包。
# 查看当前 ring buffer 设置
ethtool -g eth1
# 输出示例:
# Pre-set maximums:
# RX: 4096
# TX: 4096
# Current hardware settings:
# RX: 512
# TX: 512
# 调大到最大值(或 2048,视内存情况)
sudo ethtool -G eth1 rx 2048 tx 2048
实测数据:在 LRES1031PF-2SFP+ 上,ring buffer 从 512 调到 2048 后,64 字节小包 UDP 线速测试的丢包率从 0.08% 降到了 0.01% 以下。对于 LRES1530PF-2SFP28 这类 25G 网卡效果更明显——25G 线速下每秒约 37.2Mpps 的 64 字节包,ring buffer 不够用时丢包是毫秒级发生的。
中断合并(Interrupt Coalescing)。 这个参数控制网卡"攒多少个包才触发一次中断"。设得太低,CPU 被中断淹没;设得太高,延迟上升。
# 查看当前中断合并设置
ethtool -c eth1
# 输出示例:
# rx-usecs: 50
# rx-frames: 32
# tx-usecs: 50
# tx-frames: 32
# 吞吐量优先:增大合并窗口
sudo ethtool -C eth1 rx-usecs 200 rx-frames 128
# 延迟优先:减小合并窗口
sudo ethtool -C eth1 rx-usecs 10 rx-frames 8
信创环境中,数据库和存储网络场景优先调低延迟(rx-usecs 设 10-30);文件传输和备份场景优先调高吞吐(rx-usecs 设 100-500)。没有一组参数能同时满足两种需求——根据业务类型分别配置。
单核处理所有网卡中断是性能杀手。25G 网卡线速运行时,每秒数百万次中断如果全压在一个 CPU 核心上,那个核心直接跑满,其他核心却在闲置。解决办法是两件事:中断亲和性(IRQ Affinity)和 RSS(Receive Side Scaling)。
中断亲和性 是把网卡的不同中断分散绑定到不同 CPU 核心上(详见 Linux 内核 IRQ 亲和性文档)。
# 查看网卡中断号
cat /proc/interrupts | grep eth1
# 输出示例(4个中断向量):
# 128: 1234567 IRQ eth1-Tx-0
# 129: 2345678 IRQ eth1-Rx-0
# 130: 3456789 IRQ eth1-Rx-1
# 131: 4567890 IRQ eth1-Rx-2
# 将 Rx-0 绑到 CPU0,Rx-1 绑到 CPU1,Rx-2 绑到 CPU2
echo 1 | sudo tee /proc/irq/129/smp_affinity_list
echo 2 | sudo tee /proc/irq/130/smp_affinity_list
echo 4 | sudo tee /proc/irq/131/smp_affinity_list
RSS 队列 则是网卡硬件层面把入站流量哈希分发到多个接收队列,每个队列对应一个独立的中断向量和 CPU 核心。
# 查看当前 RSS 队列数
ethtool -l eth1
# 输出示例:
# Pre-set maximums:
# RX: 8
# Current hardware settings:
# RX: 2 ← 默认只开了2个队列
# 开到最大(或设为 CPU 核心数,取较小值)
sudo ethtool -L eth1 rx 8
实测对比:在飞腾 S2500(8核)+ LRES1530PF-2SFP28 的平台上,RSS 从默认 2 队列调到 8 队列后,8 线程 iperf TCP 吞吐量从 18.6 Gbps 提升到 23.4 Gbps——提升幅度接近 26%。瓶颈不在网卡硬件,而在单核处理能力被均匀分摊了。
国产 OS 默认运行的 irqbalance 服务会自动重新分配中断亲和性,可能覆盖你的手动配置。生产环境中建议二选一:要么关掉 irqbalance(systemctl stop irqbalance)然后手动绑定,要么保留 irqbalance 但用 irqbalance --oneshot 做一次初始分配后锁定。不要两边同时操作,否则参数会互相打架。
信创环境的复杂性在于 CPU 架构和 OS 版本的排列组合。下表汇总了 LR-LINK 主要网卡在不同平台上的兼容性状态(基于 2026 年 Q2 实测):
| 网卡型号 | 芯片方案 | 飞腾+麒麟V10 | 鲲鹏+麒麟V10 | 海光+UOS | 龙芯+麒麟V10 |
|---|---|---|---|---|---|
| LRES2045PT | 网迅 WX1860 | 免驱 ✔ | 免驱 ✔ | 免驱 ✔ | 免驱 ✔ |
| LRES1031PF-2SFP+ | 沐创 RNP N10 | 免驱 ✔ | 免驱 ✔ | 免驱 ✔ | 需编译 ⚠ |
| LRES1530PF-2SFP28 | 网迅 WX5025 | 免驱 ✔ | 免驱 ✔ | 免驱 ✔ | 需编译 ⚠ |
| LRES1027PF-4SFP28 | Intel E810 | 需驱动包 ⚠ | 需驱动包 ⚠ | 免驱 ✔ | 不支持 ✘ |
| SP681 | 华为全国产 | 需 HISI 驱动 ⚠ | 免驱 ✔ | 需驱动包 ⚠ | 不支持 ✘ |
| SP670 | 华为全国产 | 需 HISI 驱动 ⚠ | 免驱 ✔ | 需驱动包 ⚠ | 不支持 ✘ |
几个要点说明:
x86 平台(海光、兆芯) 兼容性最好。所有网卡驱动最初都在 x86 上开发和调试,海光 + UOS 的组合基本能做到开箱即用。
ARM 平台(飞腾、鲲鹏) 需要注意 dma_mask 设置。部分网卡在 ARM 架构上需要 64 位 DMA 地址空间,如果 BIOS 中 IOMMU 配置不当,可能出现"驱动加载成功但收不到包"的现象。鲲鹏平台对华为自家网卡的兼容性最优,这是预期之中的。
LoongArch 平台(龙芯) 驱动生态还在完善中。沐创和网迅的驱动在龙芯上需要打补丁后编译,建议直接联系 LR-LINK 技术获取龙芯专用驱动包。
基础测试用 iperf 跑一下吞吐量就够了,但要做严谨的性能评估,需要更系统的方法。
测试前准备清单:
# 1. 关闭系统节能特性(避免 CPU 降频影响结果)
sudo cpupower frequency-set -g performance
# 2. 关闭网卡节能特性
sudo ethtool --set-eee eth1 eee off 2>/dev/null
# 3. 确认 PCIe 链路速率和宽度
sudo lspci -vvv -s $(ethtool -i eth1 | grep bus-info | awk '{print $2}') | grep Lnk
# 4. 设置 MTU(如需 Jumbo Frame)
sudo ip link set eth1 mtu 9000
# 5. 清空 ARP 表避免首次包延迟
sudo ip neigh flush dev eth1
单线程 vs 多线程测试。 先用单线程暴露驱动瓶颈,再开多线程验证线速能力:
# 单线程 TCP(暴露单队列瓶颈)
iperf -c 192.168.1.2 -t 30 -i 1
# 8线程 TCP(验证多队列聚合带宽)
iperf -c 192.168.1.2 -t 30 -i 1 -P 8
# UDP 线速测试(验证丢包率)
iperf -c 192.168.1.2 -t 30 -u -b 25G -l 1472
# 延迟测试(用 qperf 更精确)
qperf 192.168.1.2 -oo msg_size:1:64K:*2 -t 60 tcp_lat
双向测试。 iperf 默认只测单向。真实业务中网卡同时收发,双向测试更能反映实际表现:
# 服务端启动双向模式
iperf -s -d
# 客户端同时收发
iperf -c 192.168.1.2 -d -t 30 -P 4
长时间稳定性测试。 跑 30 分钟以上的持续流量,观察吞吐量是否波动、是否出现间歇性丢包。这类问题通常和驱动内存泄漏或 PCIe 总线错误有关。测试期间用 dmesg -w 实时监控内核日志。
以 LRES1530PF-2SFP28(网迅 WX5025,25G 双口)在飞腾 S2500 + 麒麟V10 SP1 平台为例,调优前后的关键指标变化:
| 测试项 | 默认配置 | 调优后 | 变化 |
|---|---|---|---|
| TCP 8线程吞吐 | 18.6 Gbps | 23.4 Gbps | +26% |
| TCP 单线程吞吐 | 12.3 Gbps | 16.8 Gbps | +37% |
| UDP 64B 丢包率 | 0.08% | <0.01% | 改善 8 倍 |
| TCP 延迟(p99) | 186 μs | 94 μs | -49% |
| CPU 占用(满载) | 单核 89% | 8核均摊 28% | 负载均衡 |
调优手段对应关系:吞吐提升主要来自 RSS 队列扩展(8 队列)和 ring buffer 加大;延迟下降来自中断合并参数调低(rx-usecs 从 50 降到 10);CPU 均衡来自中断亲和性手动绑定。
麒麟V10 用 yum install ethtool,统信UOS 用 apt install ethtool。如果软件源中没有 ethtool 包,可以从源码编译:从 kernel.org 下载对应内核版本的 ethtool 源码,./configure && make && sudo make install 即可。部分信创项目会预装 ethtool 到 /usr/sbin/ 目录下,先试试 which ethtool 看看是否已有。
不是。RSS 队列数应设为"实际使用的 CPU 核心数"和"网卡最大队列数"中的较小值。比如飞腾 FT-2000/4 只有 4 核,即使网卡支持 8 队列,设成 4 就够了——多出来的队列绑不到核心反而浪费中断资源。另外,如果服务器上还有其他高负载任务(如数据库),需要预留 1-2 个核心给业务进程,不要把所有核心都分给网卡中断。
不需要。ethtool 的参数修改(ring buffer、中断合并、RSS 队列数)都是运行时生效,立即生效但重启后丢失。如果要持久化,在麒麟V10 中把命令写入 /etc/rc.local 或创建 NetworkManager dispatcher 脚本;统信UOS 中可以用 systemd service 在开机时自动执行。中断亲和性同理,建议写一个初始化脚本放在开机自启中。
可以共存,LRES1031PF-2SFP+(10G)和 LRES1530PF-2SFP28(25G)可以分别插在不同的 PCIe 槽位同时工作。调优参数的思路一样(ring buffer 调大、RSS 队列扩展、中断绑核),但具体数值需要根据各自带宽调整——25G 网卡的 ring buffer 建议设更大(4096),中断合并的 rx-usecs 阈值也需要比 10G 更激进才能发挥带宽优势。注意两张卡的中断不要绑到同一组核心上。
取决于驱动成熟度。在龙芯 3A5000 + 麒麟V10(LoongArch 版)上,沐创 RNP N10 的 10G 网卡经过补丁编译后,TCP 吞吐可以跑到 8.5-9.0 Gbps(标称 10G 的 85-90%),差距主要在 LoongArch 的 PCIe 控制器效率和驱动优化程度。网迅 WX5025 的 25G 方案在龙芯上的实测约 20-21 Gbps(80-84%)。如果项目对性能要求严格,建议优先选飞腾或鲲鹏平台,驱动成熟度更高,性能损耗更小。