rps 是 linux 系统中用于将网络数据包分发到多个 cpu 处理的软件负载均衡机制,其核心是通过配置 /sys/class/net/<iface>/queues/rx-<n>/rps_cpus 文件中的 cpu 掩码,使软中断处理均匀分布,提升网络吞吐并降低延迟。1. 查看接收队列数量可通过 ls /sys/class/net/<iface>/queues/ | grep rx- 或 ethtool -l <iface> 实现;2. 手动配置 rps 需写入掩码至对应文件如 echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus;3. 自动配置可编写脚本结合 rc.local 或 systemd 服务实现;4. 实际使用中需注意 cpu 绑定策略、监控负载、搭配 rfs/xps 并避免过度分配 cpu。

Linux 系统中,网络接口的 RPS(Receive Packet Steering)是一种软件层面的负载均衡机制,用于将接收的数据包在多个 CPU 核心之间进行分发处理。相比硬件层面的 RSS,RPS 是在内核协议栈中实现的,适用于普通网卡也能提升多核处理性能。

要让 RPS 发挥作用,关键在于合理配置其映射规则,使得软中断处理能均匀地分布到多个 CPU 上,从而提高整体网络吞吐能力并降低延迟。

RPS 的核心思想是通过软件方式决定哪个 CPU 来处理某个队列上的数据包。默认情况下,一个网卡队列的数据包只由一个 CPU 处理,这样在高流量下容易造成单核过载。
启用 RPS 后,可以指定一组 CPU 来参与该队列的软中断处理,实现负载分担。
它的工作原理是在 /sys/class/net/<iface>/queues/rx-<n>/rps_cpus 文件中设置掩码,告诉内核哪些 CPU 可以处理这个队列的软中断。

在开始配置之前,先确认你的网卡支持多少个接收队列:
ls /sys/class/net/<iface>/queues/ | grep rx-
比如 rx-0, rx-1, … 表示有两个或更多接收队列。每个队列都可以单独配置 RPS。
你也可以使用 ethtool -l <iface> 查看网卡的中断队列信息:
ethtool -l eth0
输出会显示当前驱动支持的最大队列数以及当前使用的队列数。
配置 RPS 主要是修改每个接收队列目录下的 rps_cpus 文件,写入 CPU 掩码。例如:
echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus
这里的 f 是十六进制表示法,对应二进制 00001111,即允许 CPU 0~3 处理这个队列的软中断。
常见掩码对照表如下:
| 十六进制 | 允许的 CPU(从右往左) |
|---|---|
| 1 | CPU0 |
| 3 | CPU0, CPU1 |
| f | CPU0~3 |
| ff | CPU0~7 |
| ffff | CPU0~15 |
你可以根据服务器 CPU 数量和负载情况灵活设置。如果系统有 8 个 CPU,想让所有 CPU 都参与处理,就可以用 ff。
每次重启之后这些配置都会失效,所以建议写成脚本或者通过 systemd 服务来加载。
一种简单的方式是写个 shell 脚本放在 /etc/rc.local 或者作为启动服务运行:
#!/bin/bash
IFACE="eth0"
for queue in $(ls /sys/class/net/$IFACE/queues/ | grep rx-); do
echo ff > /sys/class/net/$IFACE/queues/$queue/rps_cpus
done注意:确保文件系统挂载完成后再执行这个脚本,否则路径可能不存在。
另外,也可以结合 udev 规则,在网卡加载时自动应用配置。
top、mpstat 或 sar 监控 CPU 使用率,观察是否实现了负载均衡。基本上就这些。配置 RPS 不复杂,但细节上需要注意掩码格式、队列数量和 CPU 资源的平衡。只要设置得当,就能有效提升多核系统的网络处理性能。
以上就是如何配置Linux网络接口RPS软中断 多核处理负载均衡的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号