---
title: 单队列网卡中断散列
description: "RPS全称是Receive Packet Steering，从Linux内核版本2.6.35开始引入。RPS采用软件模拟的方式，实现了多队列网卡所提供的功能，分散了在多CPU系统上数据接收时的负载，把软中断分到各个CPU处理，而不需要硬件支持，大大提高了网络性能。"
url: https://www.hikunpeng.com/document/detail/zh/perftuning/tuningtip/kunpengtuning_12_0030.html
sourcePath: /source/zh/perftuning/tuningtip/kunpengtuning_12_0030.html
indexId: 80e6cedf65f1dfaea6776725e8efa6d88a1b1dd73ea65dd9f25b8f12e135d76158
---
# 单队列网卡中断散列

#### 原理

RPS全称是Receive Packet Steering，从Linux内核版本2.6.35开始引入。RPS采用软件模拟的方式，实现了多队列网卡所提供的功能，分散了在多CPU系统上数据接收时的负载，把软中断分到各个CPU处理，而不需要硬件支持，大大提高了网络性能。

对单队列网卡可以使用RPS将中断分散到各个core处理，避免软中断集中到一个core导致该core软中断过高形成性能瓶颈。


#### 修改方式

通过直接修改网卡队列参数设置RPS，能够立即生效，无需重启服务器。

修改前：

```
/sys/class/net/eth0/queues/rx-0/rps_cpus 0
/sys/class/net/eth0/queues/rx-0/rps_flow_cnt 0
/proc/sys/net/core/rps_sock_flow_entries 0
```

修改方法：

```
echo ff > /sys/class/net/eth0/queues/rx-0/rps_cpus
echo 4096 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt
echo 32768 > /proc/sys/net/core/rps_sock_flow_entries
```

这里以单个网卡为例说明，ff对应的是core 0~7，表示将软中断散列到0~7个core上。如果是多个网卡，对应的ff需要修改。将并发活动连接的最大预期数目设置为32768，因为这是Linux内核官方推荐值。
