PVE解决e1000-detect-hardware-unit-hang的问题

PVE解决e1000-detect-hardware-hang的问题

1
2
nano /etc/network/interfaces #找到对应的网卡,iface eno1 inet manual,加上:
post-up /usr/bin/logger -p debug -t ifup "Disabling segmentation offload for eno1" && /sbin/ethtool -K eno1 tso off gso off gro off && /usr/bin/logger -p debug -t ifup "Disabled offload for eno1"
1
2
3
4
5
综合以上几种方法,我最后采用的解决办法是:禁用Proxmox宿主机上的TCP checksum offload,并将OpenWRT使用的网卡虚拟化方式改为E1000。实际测试下来没有再发生网卡hang的问题,满速率下载(250Mbps左右)时CPU占用率50%左右,比之前使用Virtio时CPU占用率要高10%左右,还是可以接受的。

问题算是解决了,最后顺带去进一步学习了下相关的知识,首先是TCP checksum offload,此技术的作用是将计算TCP checksum的工作由CPU软件实现改为由NIC设备(即网卡等)硬件实现,以此达到节约CPU资源的目的

另外就是Virtio与E1000,这是两种不同的网络虚拟化技术,Virtio是半虚拟化而E1000是全虚拟化。对于全虚拟化方案来说,虚拟机是完全感知不到自己是运行在一个虚拟环境中的;而半虚拟化则是虚拟机知道自己就是运行在一个虚拟环境中,此时IO驱动就可以做一些针对性的修改优化,以此降低虚拟化层进行转换带来的开销及性能损失。显而易见,半虚拟化技术的隔离度是没有全虚拟化好的,而且要是虚拟机驱动有问题会导致宿主机也出问题。这就是为什么在使用Virtio时OpenWRT网络出现问题会导致整个Proxmox的网络都不能用了的原因。除了这两种虚拟化方式外,还有些更为先进的虚拟化技术,如SR-IVO等,有兴趣的话可以看看下面这篇文章的总结:

KVM虚拟化网络优化技术总结

Related Issues not found

Please contact @chariothy to initialize the comment