背景描述:
最近在一个客户的项目拓展和做过程中,希望客户在IDC中自建的容器服务能够部分使用云上的容器服务,基于IDC环境和虚拟机上的容器服务之间,做了一些静态和动态的性能对比测试。测试过程终于到一些问题,针对问题前后经过多轮分析对比,在问题定位和分析上的一些总结,希望能供大家借鉴。
测试环境:
测试场景说明:
下属公有云的容器均指公有云上的容器PaaS服务,参考:https://cloud.tencent.com/product/tke
1.静态测试:
物理机环境:在物理机上部署容器,其中一个容器中部署nginx,压测的apache ab压测工具分别在同一个物理机的容器中和在另外一个物理节点的容器中。
虚拟机环境:在公有云虚拟机上部署容器,其中一个容器中部署nginx,压测的apache ab压测工具分别在同一个公有云虚拟机上的容器中和在另外一个虚拟机节点容器中。
2.动态测试:
该应用分布有3个节点,基于Java应用,OSP1节点作为前端的入口,接受请求,请求业务逻辑通过proxy节点,最终转发到后端OSP-2节点。这3个节点分别存在如下两个场景:
a)3个节点分别部署于物理机上的容器中。
b)3个节点分别部署于虚拟机上的容器中。
测试过程:
1.静态测试场景分析
静态测试方法和模型:
实际最终静态测试的初步统计:
客户初步测试的结论:
1.如果ab所在工具节点和nginx所在容器不在一个虚拟机上,跨虚拟机压测,那么性能会比物理机环境有20%差异。
2.但是虚拟机的CPU主频和性能比物理机的CPU新2代,V2和V4,主频也更高。
过程分析:
如上图所示,根据客户的测试场景,我们分别重新登录客户环境,进行了一些模拟测试,发现主要性能差异电视,12核24G的虚拟机节点作为被调用的服务器端时,和物理机环境存在差异。
因此分析思路分别从几下几个途径展开:
1.物理机和虚拟机的配置差异,环境差异。
2.网卡队列上的差异:
差异点2:物理机关闭rps,CVM开启rps,物理机的网络中断都由CPU0和CPU6处理,CVM的8个核处理硬中断,12个核处理软中断,用于网络处理,抢占了业务CPU。
最终的分析原因:
原因:配置存在差异
1)物理机是24核,CVM是12核,CPU核数少一半。
2)物理机默认关闭rps,虚拟机是开启RPS;物理机网卡中断默认绑定到cpu0和cpu6,虚拟机CPU都需要处理中断
3)CVM网卡开启多队列,总共8个队列。
原理:
Ø(CVM4)这个CVM存在网络中断、软中断抢占了CPU,以及跨numa访问
Ø这个CVM只有12C,但有8个队列,2个numa,开启了rps导致网路过来时,8个核有硬中断处理,12个cpu都有软中断处理,与业务抢CPU
改进建议:
①关闭rps,有8个cpu响应中断和处理软中断,可以达到15K~16K qps
②关闭rps,只开启一个队列,由CPU0处理硬中断和软中断,将nginx绑定到1~11核上运行
③正式业务的时候,可以用指定镜像创建CVM,在CVM中设置好网络中断。
配置优化改进建议:
①创建24核CVM,再进行测试,按照默认开启RPS,QPS为14k
②关闭rps,有8个cpu响应中断和处理软中断,QPS可以达到15K~16K(和物理机保持一致,关闭rps)
③关闭rps,只开启一个队列,由CPU0处理硬中断和软中断,QPS可以达到17~18K(和物理机类似,网卡中断绑定到某个核)
④关闭rps,只开启一个队列,由CPU0处理硬中断和软中断,将nginx绑定到1~11核上运行,可以达到23000~24000 qps(该步骤不做推荐,只做优化测试)
⑤正式业务的时候,可以用指定镜像创建CVM,在CVM中设置好网络中断。
ab测试,对于网络请求和吞吐的要求不是很高,但是对于CPU的处理和响应要求较高,所以是比较消耗CPU资源的。
但是RSS,RPS通过在队列和CPU不对等的情况下,通过四元组hash来将网络请求转发到不同的CPU来处理(软中断),虽然能提升网络IO,但是由于CPU处于不断的中断处理,反而降低了CPU计算处理的能力。所以这是为什么关闭RPS后,性能反而提升的原因。
扩展阅读:
RPS(Receive Packet Steering)主要是把软中断的负载均衡到各个cpu,简单来说,是网卡驱动对每个流生成一个hash标识,这个HASH值得计算可以通过四元组来计算(SIP,SPORT,DIP,DPORT),然后由中断处理的地方根据这个hash标识分配到相应的CPU上去,这样就可以比较充分的发挥多核的能力了。通俗点来说就是在软件层面模拟实现硬件的多队列网卡功能,如果网卡本身支持多队列功能的话RPS就不会有任何的作用。该功能主要针对单队列网卡多CPU环境,如网卡支持多队列则可使用SMP irq affinity直接绑定硬中断。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。