---
title: Linux RPS和XPS配置
description: "通过RPS（Receive Packet Steering）在接收端将网卡硬中断和相应的软中断分离在不同的CPU核上处理，解决高硬中断率时两者相互影响带来的单CPU处理瓶颈。XPS(Transmit Packet Steering)和RPS类似，用于发送侧CPU核分离。RPS和XPS主要用于网卡硬件队列数少，但CPU核资源相对丰富的场景。RPS/XPS在Linux官网上有详细介绍，参考链接如下："
url: https://www.hikunpeng.com/document/detail/zh/kunpengmodule/S920S08/usermanual/S920S08_06_0038.html
sourcePath: /source/zh/kunpengmodule/S920S08/usermanual/S920S08_06_0038.html
indexId: 5ec0cfb63907db20dec7d64b3431edc7285bd3d4c366d2bd485e3b76273f0a9a64
---
# 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(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
```
