背景
当下云计算、大数据盛行的背景下,大并发和大吞吐量的需求已经是摆在企业面前的问题了,其中网络的性能要求尤为关键,除了软件本身需要考虑到性能方面的要求,一些硬件上面的优化也是必不可少的。加我VX:atstudy-js 回复“测试”,进入 自动化测试学习交流群~~
作为一名测试工作者,对于性能测试的问题肯定不会陌生,但是测试不仅仅是执行和收集数据,更多的应该是分析问题、找到性能瓶颈以及一些优化工作。
毕竟在客户现场测试性能的时候,能够通过一些系统层面的调优,提升软件的性能,那对项目无疑是一件锦上添花的事。
指标
不管你做何种性能测试,指标是绕不过去的事,指标是量化性能测试的重要依据。衡量某个性能的指标有很多,比如衡量数据库性能通常用TPS、QPS和延时,衡量io性能通常用iops、吞吐量和延时,衡量网络的性能指标也有很多,在业界有一个RFC2544的标准,参考链接:https://www.rfc-editor.org/rfc/rfc2544。
这里稍微解释一下几个指标:
背靠背测试:在一段时间内,以合法的最小帧间隔在传输介质上连续发送固定长度的包而不引起丢包时的数据量。
丢包率测试:在路由器稳定负载状态下,由于缺乏资源而不能被转发的帧占所有该被转发的帧的百分比。
时延测试:输入帧的最后一位到达输入端口到输出帧的第一位出现在输出端看的时间间隔。
吞吐量测试:没有丢包情况下能够转发的最大速率。
通常客户对于吞吐量和时延的指标是比较关心的,吞吐量反应了系统的并发的处理能力,时延反应了整体业务的响应时间。
测试准备
本文以网卡中的战斗机intel X710为测试对象,进行小包的吞吐量测试。
Tips:通常大包的测试可以达到线速,小包则很难线速,相同mtu下,包越小单位时间内cpu处理的包数越多,cpu的压力越大。
测试拓扑
在被测设备上插入X710网卡,使用网卡的2个网口建立linux bridge,通过测试仪发送接收数据包:
[root@localhost~]#brctl addbr test
[root@localhost~]#brctl addif test enp11s0f2 enp11s0f3
[root@localhost~]#ip link set test up
[root@localhost~]#brctl show
bridge name bridge id STP enabled interfaces
test 8000.6cb311618c30 no enp11s0f2
enp11s0f3
virbr0 8000.5254004c4831 yes virbr0-nic
3.2硬件信息
有个伟人曾说过,“如果性能测试不谈硬件,那么就和恋爱不谈结婚一个道理,都是耍流氓”。
鲁迅:"我没说过!"题外话,这里先简单说一下数据包进入网卡后的流程:数据包进入到网卡后,将数据缓存到服务器内存后通知内核进行处理,接着协议栈进行处理,通常netfilter也是在协议栈去处理,最后应用程序从socker buff读取数据。
言归真正,本文测试采用的是国产之光飞腾S2500服务器。
4、测试调优
针对以上拓扑,发送128字节万兆双向流量,用RFC2544标准进行测试。
RFC2544的标准是0丢包测试吞吐量,结果是818Mbps
以上都是前菜,接下来是本文的重头戏,根据已有资源做一些优化,提升“测试”性能,让客户满意。
4.1调整队列数
调整网卡的队列数,利用网卡的多队列特性,不同的队列通过中断绑定到不同的cpu,提升cpu处理性能,提升网络带宽。
调整队列数,这里也不是越大越好,因为服务器的cpu个数是有上限的,队列多的话会出现多个中断绑定在同一个cpu上,这里我服务器单个numa有8个cpu,修改队列数为8。
[root@localhost~]#ethtool-l enp11s0f2
Channel parameters for enp11s0f2:
Pre-set maximums:
RX:0
TX:0
Other:1
Combined:128
Current hardware settings:
RX:0
TX:0
Other:1
Combined:8
因为数据包会根据hash来进入到多个收包队列,因此发送数据包的时候,可以选择源ip变化的流来确保使用了网卡的多队列,可以查看网卡的队列计数。
……
由于作者版权要求,仅展示文章的一部分,如需阅读完整版文章,可以私信下方二维码。
添加微信:atstudy-js 或者扫描下方二维码,备注“博客”邀请你进入Python自动化测试学习交流群~