关于ceph调优,在调优系统篇已经作了比较全面的介绍,不过,针对其中单独的一些部分,在进行较为深入的调查测试后,其中还是有不少东西值得细说
写在前面
松鼠哥的ceph专业课程上线啦!
面向新手同学,从0实战,全面入门ceph安装部署与运维,有需要的同学赶紧扫码订购吧:
中断对程序的性能影响很大,做好调优对性能提升很大。
关于系统中断
中断,通俗来讲,是程序向系统报告其作业情况的一种方式,作业完成或者遇到问题,自己无法处理而需要系统进行处理的,就需要通过中断的方式通知系统,比如主板插入了某些硬件设备,就会产生一个硬件中断报告给系统,好让系统及时得知该事件;又如程序运行中遇到了致命的段错误,也会通过中断方式通知系统,让系统来进行下一步的处理;值得一提的是,系统收到中断之后,大部分情况下都要停下当前cpu工作,来进行中断的处理,例如网卡收包完成,会产生中断告诉系统,这时系统会安排处理器来处理收到的报文
中断对性能的影响
从上述简单的说明可知,程序会不定时地通过中断方式来向系统报告信息,在某些高性能场合,中断所产生的处理器切换开销是不容忽视的,所以深入了解中断机制,合理进行中断设置安排,对性能的提升是大有裨益的
口说无凭,来点真家伙,下面进行一些网络性能测试来验证一下中断及numa对网络的影响:
1 | [tanweijie@ceph-c204 ~]$ numactl -H |
我的环境中有2个node,每个node有28个cpu,当然,每个node对应一个物理cpu;下面我将所有系统中断处理绑定在node0的最后两个core,也就是40、41上面,然后使用iperf3进行网络性能测试:
1 | [tanweijie@ceph-c204 ~]$ cat chang_interupt.sh |
执行上述脚本后,即可完成绑定,它主要是通过修改中断的cpu掩码来修改处理中断的cpu;接下来我们使用numactl来跑iperf3,然后使用另外一个设备来充当客户端进行网络测试,这里使用39号cpu测试,是因为39号cpu和40、41号cpu在相同的物理cpu上,这样中断处理就不会跨node,稍后将会进行跨node的比较,此环境使用的是40Gbps的IB卡及一个4036E IB交换机
1 | [tanweijie@ceph-c204 ~]$ /usr/bin/numactl -a -C 39 -m 0 /usr/bin/iperf3 -s |
可以看到,网络带宽23.5 Gbits/sec非常稳定,结果也是23.5 Gbits/sec,这时我们使用另外一个node的cpu来启动测试,进行对比,client没有作任何的修改
1 | [tanweijie@ceph-c204 ~]$ /usr/bin/numactl -a -C 49 -m 0 /usr/bin/iperf3 -s |
测试结果相比此前有比较明显的性能下降,并且有波动,我们这里仅仅只是使用不同的node的cpu进行server的启动,就产生了明显的差别,这里进行一下分析:
node与内存的影响分析
此前的系统调优篇也介绍过,不同的node进行内存访问和数据交换需要付出的代价是很大的,这里,我们使用了iperf3绑定在node1上,中断则绑定在node0的最后两个cpu上面,当网络数据进行交互时,大流量产生了非常多的中断请求(可以使用cat /proc/interrupts |grep mlx4查看),使得系统被频繁干扰,负责处理中断的是相同的物理cpu的时候,其数据传递所需要的代价小得多,另外一点值得关注,就是负责通信的IB网卡是默认绑定到node0的,这就意味着,IB卡收到数据包之后,首先会存放在node0的local内存,再通知cpu进行处理,而处理中断的cpu如果在node0,则不需要进行跨node传递,其效率提升就会比较明显
对ceph调优的启示
对ceph的系统优化,当前我们的做法就是,每个osd绑定2个core,rgw绑定14个core,保持node对齐,并且将IB网卡中断绑定到osd对应的node的cpu上,其余中断则全部绑定到系统使用的node上面,实际测试发现,对集群网络稳定性和网络效率有显著的提升
- 本文作者: 奋斗的松鼠
- 本文链接: http://www.strugglesquirrel.com/2018/04/22/浅析系统调优关于中断调优的处理/
- 版权声明: 本博客所有文章除特别声明外,创作版权均为作者个人所有,未经允许禁止转载!