鲲鹏社区首页
中文
注册
开发者
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

Linux RPS和XPS配置

通过RPS(Receive Packet Steering)在接收端将网卡硬中断和相应的软中断分离在不同的CPU核上处理,解决高硬中断率时两者相互影响带来的单CPU处理瓶颈。XPS(Transmit Packet Steering)和RPS类似,用于发送侧CPU核分离。RPS和XPS主要用于网卡硬件队列数少,但CPU核资源相对丰富的场景。RPS/XPS在Linux官网上有详细介绍,参考链接如下:

https://www.kernel.org/doc/Documentation/networking/scaling.txt

RPS主要解决哪个CPU核处理硬中断,哪个CPU核处理软中断,哪个CPU核消耗网络数据。在未开启RPS前,硬中断和软中断默认在同一个CPU核处理。如下图所示,软、硬中断都在CPU0上处理。

当开启RPS功能后,硬中断在CPU0上处理,而软中断根据规则匹配后在CPU2上处理。

XPS原理类似于RPS,这里不再介绍。

通过以下命令可指定由某个或某几个CPU核处理网卡硬件队列相应的软中断。

  • 网卡接收方向

    echo <cpu bit map> > /sys/class/net/<device name>/queues/rx-<queue>/rps_cpus

  • 网卡发送方向

    echo <cpu bit map> > /sys/class/net/<device name>/queues/tx-<queue>/xps_cpus

  • cpu bit map:表示CPU核的掩码。
  • queue:表示网卡硬件队列号。

以下示例为网卡设备eth0接收方向指定由CPU0~CPU31处理网卡硬件队列相应的软中断。

echo "00000000,ffffffff" > /sys/class/net/eth0/queues/rx-0/rps_cpus