Linux怎么开启RPS网络并行_Linux多队列网卡优化配置【高并发】

发布时间 - 2026-01-25 00:00:00    点击率:
应优先启用网卡硬件RSS,再依次配置RPS、RFS、XPS及中断亲和性:1.用ethtool启用多队列;2.为各rx队列设RPS CPU掩码;3.配置RFS流表容量与全局阈值;4.为tx队列设XPS掩码;5.禁用irqbalance并静态绑定中断到对应CPU。

一、确认网卡多队列支持并启用硬件RSS

若网卡本身支持硬件多队列(RSS),应优先启用该功能以实现底层流量散列分发,为RPS提供良好基础。硬件RSS可将入站数据包按流哈希分发至不同接收队列,避免单队列瓶颈。

1、执行命令查看当前网卡队列能力:ethtool -l eth0(将eth0替换为实际网卡名,如ens33、enp0s3等)。

2、若输出中“Combined”字段最大值大于1,且当前值为1,则说明硬件支持但未启用多队列。

3、将接收与发送队列数设为CPU物理核心数(例如4核):

sudo ethtool -L eth0 combined 4

4、验证设置生效:ls /sys/class/net/eth0/queues/ 应显示 rx-0、rx-1、rx-2、rx-3 等多个接收队列目录。

二、启用RPS实现软件层接收负载分发

RPS在内核网络栈软中断(NET_RX_SOFTIRQ)阶段,依据数据包特征选择目标CPU进行后续处理,弥补无RSS硬件或队列数不足时的多核利用率缺陷。

1、计算CPU掩码:假设使用前4个CPU核心(编号0–3),十六进制掩码为 f(即二进制1111);若需启用CPU0、CPU2、CPU3,则掩码为 e(1110)。

2、为每个接收队列启用RPS并指定CPU掩码:echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus

3、重复步骤2,依次配置其余队列:echo f > /sys/class/net/eth0/queues/rx-1/rps_cpusecho f > /sys/class/net/eth0/queues/rx-2/rps_cpusecho f > /sys/class/net/eth0/queues/rx-3/rps_cpus

4、设置全局RPS流表总条目数(推荐值为CPU数×4096):echo 16384 > /proc/sys/net/core/rps_sock_flow_entries(以4核为例)。

三、配置RFS提升缓存局部性与流一致性

RFS根据应用进程所在CPU及上次处理该流的CPU位置,动态调整RPS目标,减少跨CPU缓存失效,增强L3缓存命中率,特别适用于长连接或高吞吐TCP服务。

1、启用RFS需先确保RPS已开启,然后设置每接收队列的流表容量:echo 4096 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt

2、对所有rx-*队列重复执行:echo 4096 > /sys/class/net/eth0/queues/rx-1/rps_flow_cntecho 4096 > /sys/class/net/eth0/queues/rx-2/rps_flow_cntecho 4096 > /sys/class/net/eth0/queues/rx-3/rps_flow_cnt

3、启用全局RFS开关(需内核CONFIG_RFS_ENABLED=y):echo 1 > /proc/sys/net/core/netdev_rfs_threshold

四、绑定XPS优化发送路径CPU亲和性

XPS控制数据包从协议栈发出时使用的发送队列所绑定的CPU,避免tx队列跨核访问导致锁竞争与cache line bouncing,与RPS形成收发双向协同。

1、检查发送队列是否存在:ls /sys/class/net/eth0/queues/ | grep tx-

2、为每个tx-*队列设置XPS CPU掩码(与对应rx队列保持一致):echo f > /sys/class/net/eth0/queues/tx-0/xps_cpus

3、若存在tx-1、tx-2等,同样执行:echo f > /sys/class/net/eth0/queues/tx-1/xps_cpusecho f > /sys/class/net/eth0/queues/tx-2/xps_cpus

五、禁用irqbalance并手动绑定中断亲和性

irqbalance服务会动态迁移网卡中断,可能破坏RPS/XPS所需的稳定CPU映射关系。在高并发场景下,应停用该服务并静态绑定各队列中断到专用CPU。

1、停止并禁用irqbalance:sudo systemctl stop irqbalance && sudo systemctl disable irqbalance

2、查找网卡中断号:cat /proc/interrupts | grep eth0,识别形如“eth0-rx-0”、“eth0-rx-1”的行及其左侧数字(如45、46)。

3、将中断45绑定至CPU0:echo 1 | sudo tee /proc/irq/45/smp_affinity

4、将中断46绑定至CPU1:echo 2 | sudo tee /proc/irq/46/smp_affinity

5、依此类推,使rx-0→CPU0、rx-1→CPU1、rx-2→CPU2、rx-3→CPU3,确保中断与RPS目标CPU严格对齐。


# linux  #   # 优化配置  # echo  # class  # 并发  # 绑定  # 掩码  # 数据包  # 多核  # 值为  # 多个  # 依此类推  # 设为  # 适用于  # 所需 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  三星网站视频制作教程下载,三星w23网页如何全屏?  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  Laravel如何配置任务调度?(Cron Job示例)  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  魔方云NAT建站如何实现端口转发?  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  jQuery中的100个技巧汇总  Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  如何在云主机快速搭建网站站点?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  Laravel观察者模式如何使用_Laravel Model Observer配置  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  Laravel如何处理异常和错误?(Handler示例)  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  Android 常见的图片加载框架详细介绍  电商网站制作价格怎么算,网上拍卖流程以及规则?  🚀拖拽式CMS建站能否实现高效与个性化并存?  Python文件异常处理策略_健壮性说明【指导】  什么是javascript作用域_全局和局部作用域有什么区别?  Python结构化数据采集_字段抽取解析【教程】  如何快速启动建站代理加盟业务?  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  Python面向对象测试方法_mock解析【教程】  Linux安全能力提升路径_长期防护思维说明【指导】  重庆市网站制作公司,重庆招聘网站哪个好?  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  Laravel模型事件有哪些_Laravel Model Event生命周期详解  大型企业网站制作流程,做网站需要注册公司吗?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  如何快速完成中国万网建站详细流程?  phpredis提高消息队列的实时性方法(推荐)  详解阿里云nginx服务器多站点的配置  EditPlus中的正则表达式实战(5)  如何在万网开始建站?分步指南解析  JavaScript常见的五种数组去重的方式  如何用y主机助手快速搭建网站?  如何实现建站之星域名转发设置?  百度浏览器如何管理插件 百度浏览器插件管理方法  linux top下的 minerd 木马清除方法  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  在Oracle关闭情况下如何修改spfile的参数  Linux后台任务运行方法_nohup与&使用技巧【技巧】  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  音乐网站服务器如何优化API响应速度?  Laravel如何创建自定义中间件?(Middleware代码示例)  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】