31.3. 忙碌轮询
如果分析揭示了高延迟,则您的系统可能会受益于基于轮询的,而不是中断的数据包接收。
忙碌轮询有助于降低网络接收路径中的延迟,方法是允许套接字层代码轮询网络设备的接收队列,并禁用网络中断。这会删除由中断和结果上下文切换造成的延迟。但是,它还会增加 CPU 利用率。忙碌的轮询也可以防止 CPU 处于睡眠状态,从而造成额外的电源消耗。所有设备驱动程序支持忙碌轮询行为。
其他资源
31.3.1. 启用忙碌轮询
默认情况下,忙碌的轮询被禁用。这个步骤描述了如何启用忙碌的轮询。
流程
确定启用了
CONFIG_NET_RX_BUSY_POLL
编译选项:# cat /boot/config-$(uname -r) | grep CONFIG_NET_RX_BUSY_POLL CONFIG_NET_RX_BUSY_POLL=y
启用忙碌轮询
要在特定套接字上启用忙碌轮询,将
sysctl.net.core.busy_poll
内核值设置为0
以外的值:# echo "net.core.busy_poll=50" > /etc/sysctl.d/95-enable-busy-polling-for-sockets.conf # sysctl -p /etc/sysctl.d/95-enable-busy-polling-for-sockets.conf
此参数控制在套接字轮询上等待数据包的微秒数,然后选择
syscalls
。红帽建议值为50
。-
将
SO_BUSY_POLL
套接字选项添加到套接字。 要在全局范围内启用忙碌轮询,将
sysctl.net.core.busy_read
设置为0
以外的值:# echo "net.core.busy_read=50" > /etc/sysctl.d/95-enable-busy-polling-globally.conf # sysctl -p /etc/sysctl.d/95-enable-busy-polling-globally.conf
net.core.busy_read
参数控制设备队列中等待套接字读取的数据包的微秒数。它还设置SO_BUSY_POLL
选项的默认值。对于少量插槽,红帽建议使用值50
,对于大量插槽,红帽推荐值100
。对于大量插槽(例如超过几百个),请改为使用epoll
系统调用。
其他资源
-
ethtool(8)
,socket(7)
,sysctl(8)
, 和sysctl.conf(5)
man page - 配置 ethtool offload 功能