解决Intel E800系列(ICE)适配器上的系统不稳定和iSCSI超时
解决英特尔 E800 系列 (ICE) 适配器上的系统不稳定性和 iSCSI 超时问题
症状
使用英特尔 E810 或其他 800 系列网络适配器(由 ice 驱动程序管理)的系统可能会遇到以下问题,特别是在无盘或 iSCSI 启动环境中:
- 系统完全挂起: 服务器在高 I/O 事件期间(如虚拟机 (VM) 启动或大文件传输)变得无响应。
- iSCSI 连接中断: 内核日志显示
Did not receive response to NOPIN,随后 iSCSI 会话失败。 - 存储目标错误: 存储服务报告无法定位目标 IQN,导致客户端磁盘断开连接。
- ZFS 死锁: 如果使用 ZFS,日志可能会充满有关
zd块设备已存在的debugfs错误。
根本原因
主要原因是影响动态设备个性化 (DDP) 包的 固件到内核不匹配。
当 Linux 系统升级(例如从内核 5.10 升级到 6.1)时,ice 驱动程序通常期望特定版本的 DDP 配置文件(例如 ice-xxxxxxxxxxxxxxxx.pkg)。如果此文件在 /lib/firmware/intel/ice/ddp/ 中缺失,驱动程序将回退到通用"操作系统默认"模式或"安全模式"。
在这种次优状态下,网卡禁用高级硬件卸载和数据包转向。在重负载下,CPU 被网络中断淹没,导致存储流量的心跳丢失和系统完全死锁。
解决方案路径
1. 识别缺失的固件
检查系统日志以识别内核请求的确切文件名:
dmesg | grep ice
寻找类似以下的错误:firmware: failed to load intel/ice/ddp/ice-xxxxxxxxxxxxxxxx.pkg (-2)。
2. 部署优化的通信 DDP 固件
"操作系统默认"包通常不足以满足存储工作负载。建议使用 英特尔以太网 800 系列电信 (通信) DDP 包。
- 从英特尔支持网站下载最新的通信 DDP 包。
- 提取
.pkg文件并将其复制到系统固件目录:cp ice_comms-x.x.xx.x.pkg /lib/firmware/intel/ice/ddp/
3. 通过符号链接映射固件
使用现有的高性能包创建符号链接来满足内核的特定请求:
cd /lib/firmware/intel/ice/ddp
# 链接通用名称
ln -sf ice_comms-x.x.xx.x.pkg ice.pkg
# 链接 dmesg 中请求的特定名称
ln -sf ice_comms-x.x.xx.x.pkg ice-xxxxxxxxxxxxxxxx.pkg
4. 重建启动映像并重启
为了确保驱动程序在启动的最早阶段加载优化的固件,请重建 initramfs:
update-initramfs -u
reboot
验证
重启后,验证高级固件已成功加载:
dmesg | grep ice
正确的输出: ice 0000:xx:xx.x: The DDP package was successfully loaded: ICE COMMS Package version x.x.xx.x
一旦硬件卸载激活,iSCSI 心跳应保持稳定,即使在 I/O 饱和峰值期间也是如此。
更新于: 24/04/2026
谢谢!
