云服务器ECS网卡多队列优化
背景
在服务器网卡收包发包数量非常大时,在系统繁忙时,如果过多网卡中断集中在单一cpu上导致cpu来不及响应造成网络性能下降,网络性能的瓶颈一般不在网卡而在cpu,现在的网卡很多支持万兆和多队列。
为了解决网卡中断集中在单一cpu的问题,在多核服务器上,需要通过将中断队列绑定到不同的cpu。主要有两种情况,多队列多重中断网卡通过SMP IRQ affinity方法绑定到不同的cpu,单队列网卡通过RPS/RFS模拟多队列多重中断网卡的功能,将模拟的软件队列绑定到不同的CPU。RPS/RFS在多队列多重中断网卡多cpu环境不起作用,在网卡队列少于cpu核数时,可以解决cpu负载不均衡的问题。
网卡多队列
网卡多队列需要多队列网卡的支持,是在硬件网卡上支持的。常用的Intel的82575、82576,I350,Boardcom的57711等网卡都支持多队列.如果是实体机,可通过如下方式判断是否支持多队列:lspci -vvv #lspci在centos 6.x之后的版本不会默认安装,可yum install pciutils进行安装。如果Ethernet条目下有Message Signaled Interrupts(MSI),则网卡支持多队列。
线上使用的是XEN镜像的虚拟机,为单队列网卡,不支持网卡多队列特征(升级的kvm镜像支持网卡多队列)。在linux 2.6.35内核版本以后,提交的patch RPS采用软件模拟的方式,实现了多队列网卡所提供的功能,分散了在多CPU系统上数据接收时的负载, 把软中断分到各个CPU处理,而不需要硬件支持,大大提高了网络性能。
网卡中断
对于多队列网卡在硬件层支持了多队列中断,网卡发送硬件中断到中断控制器然后触发cpu软中断。对于单队列网卡,可以在操作系统层RPS/RFS模拟软件多队列中断触发cpu软中断。
RPS/RFS
- RPS 全称是 Receive Packet Steering, 这是Google工程师 Tom Herbert (therbert@google.com )提交的内核补丁, 在2.6.35进入Linux内核. 这个patch采用软件模拟的方式,实现了多队列网卡所提供的功能,分散了在多CPU系统上数据接收时的负载, 把软中断分到各个CPU处理,而不需要硬件支持,大大提高了网络性能。
- RFS 全称是 Receive Flow Steering, 这也是Tom提交的内核补丁,它是用来配合RPS补丁使用的,是RPS补丁的扩展补丁,它把接收的数据包送达应用所在的CPU上,提高cache的命中率。
- 这两个补丁往往都是一起设置,来达到最好的优化效果, 主要是针对单队列网卡多CPU环境(多队列多重中断的网卡也可以使用该补丁的功能,但多队列多重中断网卡有更好的选择:SMP IRQ affinity)
SMP IRQ affinity
多队列网卡的cpu亲和性设置网上资料很多,这里不再做介绍。下面主要对我们使用的单队列网卡虚拟机采用RPS/RFS优化设置进行介绍。
优化过程
RPS cpu bitmap测试分类: 0(不开启rps功能,默认), one cpu per queue(每队列绑定到1个CPU核上), all cpus per queue(每队列绑定到所有cpu核上), 不同分类的设置值如下
- 0(不开启rps功能)
/sys/class/net/eth0/queues/rx-0/rps_cpus 00000000 /sys/class/net/eth0/queues/rx-1/rps_cpus 00000000 /sys/class/net/eth0/queues/rx-2/rps_cpus 00000000 /sys/class/net/eth0/queues/rx-3/rps_cpus 00000000 /sys/class/net/eth0/queues/rx-4/rps_cpus 00000000 /sys/class/net/eth0/queues/rx-5/rps_cpus 00000000 /sys/class/net/eth0/queues/rx-6/rps_cpus 00000000 /sys/class/net/eth0/queues/rx-7/rps_cpus 00000000/sys/class/net/eth0/queues/rx-0/rps_flow_cnt 0 /sys/class/net/eth0/queues/rx-1/rps_flow_cnt 0 /sys/class/net/eth0/queues/rx-2/rps_flow_cnt 0 /sys/class/net/eth0/queues/rx-3/rps_flow_cnt 0 /sys/class/net/eth0/queues/rx-4/rps_flow_cnt 0 /sys/class/net/eth0/queues/rx-5/rps_flow_cnt 0 /sys/class/net/eth0/queues/rx-6/rps_flow_cnt 0 /sys/class/net/eth0/queues/rx-7/rps_flow_cnt 0/proc/sys/net/core/rps_sock_flow_entries 0
- one cpu per queue(每队列绑定到1个CPU核上)
/sys/class/net/eth0/queues/rx-0/rps_cpus 00000001 /sys/class/net/eth0/queues/rx-1/rps_cpus 00000002 /sys/class/net/eth0/queues/rx-2/rps_cpus 00000004 /sys/class/net/eth0/queues/rx-3/rps_cpus 00000008 /sys/class/net/eth0/queues/rx-4/rps_cpus 00000010 /sys/class/net/eth0/queues/rx-5/rps_cpus 00000020 /sys/class/net/eth0/queues/rx-6/rps_cpus 00000040 /sys/class/net/eth0/queues/rx-7/rps_cpus 00000080/sys/class/net/eth0/queues/rx-0/rps_flow_cnt 4096 /sys/class/net/eth0/queues/rx-1/rps_flow_cnt 4096 /sys/class/net/eth0/queues/rx-2/rps_flow_cnt 4096 /sys/class/net/eth0/queues/rx-3/rps_flow_cnt 4096 /sys/class/net/eth0/queues/rx-4/rps_flow_cnt 4096 /sys/class/net/eth0/queues/rx-5/rps_flow_cnt 4096 /sys/class/net/eth0/queues/rx-6/rps_flow_cnt 4096 /sys/class/net/eth0/queues/rx-7/rps_flow_cnt 4096/proc/sys/net/core/rps_sock_flow_entries 32768
- all cpus per queue(每队列绑定到所有cpu核上)
/sys/class/net/eth0/queues/rx-0/rps_cpus 000000ff /sys/class/net/eth0/queues/rx-1/rps_cpus 000000ff /sys/class/net/eth0/queues/rx-2/rps_cpus 000000ff /sys/class/net/eth0/queues/rx-3/rps_cpus 000000ff /sys/class/net/eth0/queues/rx-4/rps_cpus 000000ff /sys/class/net/eth0/queues/rx-5/rps_cpus 000000ff /sys/class/net/eth0/queues/rx-6/rps_cpus 000000ff /sys/class/net/eth0/queues/rx-7/rps_cpus 000000ff/sys/class/net/eth0/queues/rx-0/rps_flow_cnt 4096 /sys/class/net/eth0/queues/rx-1/rps_flow_cnt 4096 /sys/class/net/eth0/queues/rx-2/rps_flow_cnt 4096 /sys/class/net/eth0/queues/rx-3/rps_flow_cnt 4096 /sys/class/net/eth0/queues/rx-4/rps_flow_cnt 4096 /sys/class/net/eth0/queues/rx-5/rps_flow_cnt 4096 /sys/class/net/eth0/queues/rx-6/rps_flow_cnt 4096 /sys/class/net/eth0/queues/rx-7/rps_flow_cnt 4096/proc/sys/net/core/rps_sock_flow_entries 32768
环境中设置为all cpus per queue,下图中优化后效果,优化前中断集中在cpu0,设置后均衡分配在cpu0-cpu3.
one cpu per queue方法在接收udp包时可能会造成网络性能下降,中断集中在单一cpu的情况。具体参考https://blog.csdn.net/yy405145590/article/details/9837839
参考文章:
https://blog.csdn.net/qiushanjushi/article/details/44244643 Linux系统中RPS/RFS介绍
https://www.cnblogs.com/zhjh256/p/6020609.html 年后vmware linux top si高以及网卡队列. 软负载相关优化
https://blog.csdn.net/yy405145590/article/details/9837839 Linux内核 RPS/RFS功能详细测试分析
https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/6/html/performance_tuning_guide/s-network-packet-reception 性能调节指南
https://blog.csdn.net/wangjianno2/article/details/48983999/ 网卡多队列学习小结
https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0058758453.html# 开启网卡多队列功能
云服务器ECS网卡多队列优化相关推荐
- 华为弹性云服务器ECS,协同优化网络产业信息
华为在研究工作方面富有创新性.挑战性.可持续性.华为弹性云服务器ECS运用新方法创新突破,以新概念创新技术支持,巩固优化云服务.在网络上打造出一个安全可靠的服务平台,同时也助力更多企业的维稳发展.华为 ...
- 【云服务器 ECS 实战】专有网络 VPC、弹性网卡的概述与配置
一.ECS 专有网络 VPC 1. 传统经典网络与专有网络 VPC 对比 2. 建立自己的专有网络 VPC 二.弹性网卡 1. 弹性网卡的概念与优势 2. 弹性网卡的配置 一.ECS 专有网络 VPC ...
- 阿里云服务器ECS存储增强通用型g7se实例CPU性能参数详解
腾讯云服务器ECS存储增强通用型实例规格族g7se实例CPU处理器采用Intel Xeon(Ice Lake) Platinum 8369B,基频2.7 GHz,全核睿频3.5 GHz,单实例顺序读写 ...
- 性能测评:阿里云服务器ECS通用型g8i实例CPU内存安全存储
阿里云服务器ECS通用型实例规格族g8i采用2.7 GHz主频的Intel Xeon(Sapphire Rapids) Platinum 8475B处理器,3.2 GHz睿频,g8i实例采用阿里云全新 ...
- 云服务器ECS使用限制概览,让你的上云少走一些坑
限制概述 使用云服务器ECS有下列限制: 不支持安装虚拟化软件和二次虚拟化(例如安装使用VMware Workstation).仅弹性裸金属服务器和超级计算集群支持二次虚拟化. 不支持声卡应用. 不支 ...
- 云服务器ecs是虚拟机,云服务器ecs虚拟机
云服务器ecs虚拟机 内容精选 换一换 企业主机安全(Host Security Service,HSS)是提升服务器整体安全性的服务,通过主机管理.风险防御.入侵检测.安全运营.网页防篡改功能,可全 ...
- 阿里云服务器ECS实例规格性能区别及选择攻略
阿里云服务器ECS有多种实例规格,如ECS共享型S6.ECS计算型C6等,云服务器规格不同性能不同,CPU型号不同.网络收发包PPS性能不同,连接数.多队列.云盘IOPS.云盘带宽等性能参数不同,云服 ...
- 跟我一起来学弹性云服务器ECS【华为云至简致远】
[摘要] 弹性云服务器(Elastic Cloud Server,ECS)是由CPU.内存.操作系统.云硬盘组成的基础的计算组件.弹性云服务器的开通是自助完成的,您只需要指定CPU.内存.操作系统.规 ...
- 云服务器ECS(一)
一.云服务器ECS的概念 云服务器Elastic Compute Service(ECS)是阿里云提供的一种基础云计算服务.使用云服务器ECS就像使用水.电.煤气等资源一样便捷.高效.您无需提前采购硬 ...
最新文章
- 干货 | tensorflow模型导出与OpenCV DNN中使用
- 构建之法现代软件工程(第五次)
- BLE简介和Android BLE编程
- mvc html.display,Asp.Net MVC中的Html.DisplayFor()用于项目列表
- javax.ws.rs.NotSupportedException: Cannot consume content type
- 局域网内数据采集总结(四)
- 华为epg-sms 多cp_Linux桌面上的SMS,Linux 25岁生日以及更多开源新闻
- 微软再损一将!继Nat Friedman后,另一Xamarin联合创始人也已离职
- 天呢,小学生都在B站讲算法?
- HTML基础开头代码
- 戴尔服务器进入pxe启动
- extern关键字作用
- windos下 elasticksearch7.13安装踩坑记
- html2canvas+canvas2image 做vue移动端页面海报
- Interview with Dustin Kirkland, Ubuntu Core Developer about encryption in Ubuntu
- 创新、创业,风险投资介绍。附:2019年热门风险投资人 ( VCPE )
- 级联失效matlab,加权无标度网络的级联失效模型
- 江苏计算机学业水平测试多少分过关,江苏学业水平测试的相关问题整理
- Python中的命名元组(namedtuple)到底是什么东西?干嘛用的?
- 使用DirectDraw直接显示YUV视频数据