lro通过合并接收数据包减少cpu开销从而提升性能。其原理是将多个tcp数据段合并为大数据包提交上层协议栈,适用于高带宽场景如视频流传输。查看是否启用可用ethtool -k eth0命令,输出large-receive-offload: on表示已启用。启用方法为执行ethtool -k eth0 lro on,需替换eth0为实际接口名。持久化设置可写入/etc/rc.local或使用cron的@reboot任务。相比其他技术,gro为软件实现兼容性好,rps/rfs适合多核处理,通常优先启用gro或lro之一即可。
linux网络接口的LRO(Large Receive Offload)是一种用于提升接收数据包性能的技术。它通过将多个接收到的数据包合并成一个较大的数据包,减少CPU中断和处理开销,从而提高吞吐量。如果你在使用Linux服务器或高性能网络应用时发现接收端性能瓶颈,可以考虑启用或优化LRO设置。
什么是LRO?为什么能提升性能?
LRO的基本原理是:在网络层将多个TCP数据段合并为一个大的数据包再提交给上层协议栈,这样可以显著减少系统处理每个小包所带来的CPU开销。尤其在高带宽、低延迟的应用场景下,比如视频流、大规模数据传输等,开启LRO后效果明显。
不过要注意的是,LRO主要适用于TCP流量,对udp帮助有限。而且如果应用需要非常低的延迟或精细的流量控制,可能不适合开启LRO。
如何查看当前网卡是否支持并启用了LRO?
你可以通过ethtool命令来查看网卡是否支持LRO以及当前是否已经启用:
ethtool -k eth0 | grep large-receive-offload
输出类似如下内容:
large-receive-offload: on
如果是on,说明已经启用;如果是off,则未启用。
如果你不确定网卡是否支持LRO,也可以直接尝试启用看看有没有报错。
如何手动启用LRO?
要启用LRO,同样使用ethtool命令:
ethtool -K eth0 lro on
其中eth0替换为你实际使用的网络接口名称。
注意:某些老旧网卡或驱动不支持LRO功能,执行上述命令会提示错误信息。此时建议升级驱动或更换硬件。
如果你希望每次系统启动时自动启用LRO,可以将这条命令写入启动脚本,例如添加到/etc/rc.local文件中:
echo "/sbin/ethtool -K eth0 lro on" >> /etc/rc.local
或者使用cron的@reboot任务:
crontab -e # 添加如下行 @reboot /sbin/ethtool -K eth0 lro on
LRO与其他接收优化技术的区别
除了LRO之外,还有几种常见的接收端优化技术,比如GRO(Generic Receive Offload)和RPS/RFS(Receive Packet Steering)。
通常建议优先启用GRO,因为它是软件实现,兼容性更好。而LRO则是硬件加速版本,性能更高但依赖网卡支持。
如果你的环境同时支持LRO和GRO,一般只需要启用其中一个即可,避免重复合并造成混乱。
基本上就这些。配置LRO不是特别复杂,但容易被忽略。在高负载环境下适当开启这项功能,确实能带来明显的性能提升。