前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CVM网络带宽测试参考

CVM网络带宽测试参考

原创
作者头像
dinghailong
修改2023-06-18 19:01:48
6130
修改2023-06-18 19:01:48
举报
文章被收录于专栏:用户8156813的专栏

1 背景

在公有云使用过程中,对于CVM (Cloud Virtual Machine)的网络性能测试需求比较普遍,例如:新上到腾讯云平台,或者有新的产品计划上线,这些情况下都希望对CVM实际网络情况做一个摸底。虽然官方文档[1]也有关于网络带宽测试的说明,但是仅仅给出了最基本的方法,对于可能遇到的问题并没有完整的指导。而为了测试到CVM标称的网络性能规格,需要将性能优化到极致,其中的细节尤其重要。腾讯云现网客户也因此有不少遇到此类问题提工单咨询,为此耗费了大量的时间。本文希望通过将此过程中遇到的问题进行系统性的说明,从而提高测试效率,为客户节省时间。

2 测试环境

本次测试使用了4台IT5.8XLARGE128机型,其中1台为待测试的机器,其它3台作为陪练机。官方文档[1]给出了8台陪练机的建议,而经过网络参数调优后,使用3台陪练机就足够了。测试机器的操作系统选用了CentOS 7.9,对应镜像ID为img-l8og963d。实际验证CentOS 7.2 往上的系统都是可行的,这包括了:CentOS 8.x,CentOS Stream 8,以及 CentOS Stream 9。为了保持环境的一致性,4台测试机器安装了同样的OS版本。

测试过程分为了两个阶段:

第一阶段采用1对1测试,在此过程中摸索出哪些参数会对网络吞吐带宽有影响;

第二阶段采用1对n测试,通过多客户端将网络带宽打满,从而测试出性能极限。

3 操作步骤

详细的操作步骤分为如下几步:

3.1 确认CVM网络规格

测试的第一步需要确认CVM实例的网络规格参数。例如本测试中采用的实例规格型号为:IT5.8XLARGE128。根据官网说明[2],该型号硬件资源为CPU32核,内存128G,网络参数为:

网络收发包(pps)(出+入):250万

内网带宽能力(Gbps)(出+入):12

3.2 确认网卡队列数

为了充分利用并发处理的能力,我们需要获取到网卡队列数,方法如下所示:

1) 确认网卡名称

运行ip a 查看网卡信息

这里第一个是loopback 虚拟网卡,用于与自身通信的;第二个,eth0 是实际的网卡名称。

2) 获取网卡队列数

采用如下命令获取网卡队列数:ethtool -l eth0 ,这里eth0是我们前面获取到的网卡名称。

可以看到对于该CVM机型,队列数是8,这个值是我们后面设置并发度测试的基础。顺便注意一下“current hardware settings” 中的combined 数值应该与“Pre-set maximums”中的一致,如果不一致,需要更改过来。

3.3 安装iperf3

测试采用了iperf3软件。在CentOS下安装该软件,可以采用如下任何一种方式:

1) 采用yum方式安装

输入如下命令即可完成iperf3的安装:

yum install iperf3

采用yum方式安装的版本根据CentOS版本的不同会有不同。

2) 采用软件包方式安装

可以下载并安装该软件包[3]

wget http://mirror.centos.org/centos/7/os/x86_64/Packages/iperf3-3.1.7-2.el7.x86_64.rpm

chmod +x ./iperf3-3.1.7-2.el7.x86_64.rpm

rpm -ivh ./iperf3-3.1.7-2.el7.x86_64.rpm

安装完成后运行“iperf3 -v”可以查看版本信息。

3.4 1对1测试

测试时一个CVM以服务器的方式运行iperf3[4],另外一个CVM以客户端的方式运行。

1) 服务端测试命令

iperf3 -s -i 20 -p 9901

其中各项参数含义为:

-s 表示运行在服务端模式

-i 20 表示每隔20秒显示一次结果

-p 9901 表示在9901端口监听

2) 客户端测试命令

iperf3 -c $server_ip -p 9901 -t 300 -i 20 -P 8

其中各项参数含义为:

-c $server_ip -c表示连接到服务器,其中“$server_ip”用服务器IP地址替代

-p 9901 表示连接到端口 9901

-t 300 表示测试时长为300秒

-i 20 表示每隔20秒显示一次结果

-P 8 表示并发数为8

注意:这里“-p”是小写的,表示端口号;“-P”是大写的,表示并发数,并发数的大小与之前所查到的网卡队列数相对应。

为了观察网络流量情况,需要在server端安装sar工具,具体命令如下所示:

yum install sysstat -y

systemctl start sysstat.service

systemctl enable sysstat.service

安装完成后,在server端运行如下命令查询网络流量信息:

sar -n DEV 10

其中“10”表示每隔10秒显示一次统计信息。

3) -t 参数说明

上述测试中使用了“-t”指定了测试时长。这是因为根据TCP/IP协议的说明,网络数据发送过程中有一个滑动窗口的概念。若网络状态良好,其发送/接受窗口的大小是逐步增长的,并最终达到一个最大值。在这个过程中,网络吞吐带宽是逐步增大的,所以性能测试持续的时间建议不要太短。

4) -P 参数设置

如前所述,iperf3中P参数代表并发度。直觉上应该与网卡队列数相关,但是关于如何设置该参数并没有明确的理论说明。我们通过实际测试得到结果如下:

P值

带宽值Gbits/sec

说明

3.73

不指定P值

-P 8

6.39

-P 16

7.29

-P 24

7.60

测得的最高值

-P 32

7.22

-P 40

6.98

5) time-wait参数调整

在上述并发度的测试过程中,有时候会观察到time-wait连接参数保持水平状态,这时候表示server端已经无法接受新的连接。可以通过调小“net.ipv4.tcp_fin_timeout”并调大“net.ipv4.tcp_max_tw_buckets”这两个参数来解决这个问题。例如可以做如下调整:

sysctl -w net.ipv4.tcp_fin_timeout=30 (可以根据业务情况调小)

sysctl -w net.ipv4.tcp_max_tw_buckets = 6000 (可以根据业务情况调大)

3.5 1对n测试

1) 测试方式说明

在1对1测试的情况下还不能够将被测试机器的带宽推到极限,此时需要在server端启动多个监听端口,并启动多个陪练机测试。

可以通过多个终端登录服务器,并发别运行如下命令:

iperf3 -s -i 20 -p 9901

iperf3 -s -i 20 -p 9902

iperf3 -s -i 20 -p 9903

在3个陪练机器上分别运行:

iperf3 -c $server_ip -p 9901 -t 300 -i 20 -P 24

iperf3 -c $server_ip -p 9902 -t 300 -i 20 -P 24

iperf3 -c $server_ip -p 9903 -t 300 -i 20 -P 24

其中“$server_ip”用服务器的ip替换;9901,9902,和9903对应着服务上的不同监听端口。然后在服务器端运行“sar -n DEV 10”查看测试数据。

2) TCP参数调整

开启1对n测试后,发现server端的网络带宽还是没有达到标称值。经过深入研究发现,缺省的tcp参数并没有针对大带宽的机器做过优化,所以需要对tcp参数做一下特别设置。主要的修改包括如下几项[5]

将读写缓冲区的最大值调整到2GB

sysctl -w net.core.rmem_max=2147483647

sysctl -w net.core.wmem_max=2147483647

TCP/IP的读写窗口是逐步变化的,调整如下

sysctl -w net.ipv4.tcp_rmem="4096 87380 2147483647"

sysctl -w net.ipv4.tcp_wmem="4096 65536 2147483647"

拥塞控制算法替换为htcp,通常默认的会是cubic。两种算法的对比参见文档

sysctl -w net.ipv4.tcp_congestion_control=htcp

建议开启fair queueing 特性

sysctl -w net.core.default_qdisc=fq

将上述调整应用到server端以及所有的client端,最后得到测试结果如下:

这里测试的是收数据性能,但是计算的时候需要把收发的值加到一起与规格说明做对比。此外需要注意,这里显示的是大B,而规格说明中用到的是小b,需要换算后再做比较。选取第一行测试值计算如下:

(1581994.24+6605.70)*8 = 12708799.52 kbps

可以看到达到了标称的12Gbps。

3.6 发送带宽测试

上面的测试是server工作在接收模式,若要转换成发送模式只要分别在client端加上“-R”参数,其格式如下所示:

iperf3 -c $server_ip -p 9901 -t 300 -i 20 -P 24 -R

iperf3 -c $server_ip -p 9902 -t 300 -i 20 -P 24 -R

iperf3 -c $server_ip -p 9903 -t 300 -i 20 -P 24 -R

这样得到发送模式下的带宽值如下所示:

同样选取第一行计算:

(7115.14+1608763.67)*8 = 12927030.48 kbps

可以看到也是达到了标称值的。

4 问题讨论

1) 测试过程中没有观察到带宽最大值达到标称值?

测试过程中我们会观察到网络带宽值是在动态变化的,这是因为实际带宽值受到通信链路中各个节点的影响,例如中间的交换机如果有其它大流量通信等就会影响到测试值。测试过程中以观察到的最大值为准,如果最大值还是不能达到标称值,建议一方面采用较长的测试时长,从而使得发送/接受窗口可以增长到最大值,获得最佳性能;另一方面,建议可以选择不同的时段多测试几次,选取最大值。

2) 测试过程中观察到有丢包现象?

CVM网络规格中对网络收发包和内网带宽能力均做了说明。如果超出上述规格限制,就有可能出现丢包现象。客户在某些限时抢购的业务场景下还有可能出现瞬时流量突发,此时也会导致流量超规格引起丢包。但是这种情况在CVM流量监控图上却不一定能发现问题,是因为监控图显示的数据粒度是分钟级别的,经过平均后不一定能够发现秒级的突发。

下图是一个业务场景中,客户端的CVM超过pps规格引起丢包的情况。可以看到在3次握手的过程中,客户端发送ack的应答包以及后续的重传包均没有能够到达server端。在宿主机层面的分析发现是因为超规格,数据包被丢弃了。

3) 不同操作系统版本对于测试结果是否有影响?

本测试采用了CentOS 7.9版本,而在客户生产环境中还有一些使用着CentOS 6.x 版本。根据参考文献[6]所做的分析,CentOS 7.2的TCP性能优于CentOS 6.5。所以建议尽量采用高版本的操作系统。

4) 优化网络性能的常用方法有哪些?

网络性能的测试同时也是优化网络的过程,这就涉及到对TCP/IP的各项参数进行调优。建议可以参考文档[5]《40G/100G Network Tuning》以及参考文档[7]《TCP/IP Tuning》对各项参数进行调整,此外也可根据其它文档进行绑核等操作,从而提高测试性能。

5 参考资料

[1] 腾讯官网“网络性能测试”说明

https://cloud.tencent.com/document/product/213/11460

[2] CVM实例规格说明

https://cloud.tencent.com/document/product/213/11518

[3] CentOS 7, CentOS 8,CentOS 8 Stream以及CentOS 9 Stream 支持的软件包

https://centos.pkgs.org/

[4] iperf 官方参考文档

https://iperf.fr/iperf-doc.php#3doc

[5] 40G/100G Network Tuning

https://fasterdata.es.net/host-tuning/linux/100g-tuning/

[6] Recent Linux TCP Updates, and how to tune your 100G host

https://fasterdata.es.net/assets/Papers-and-Publications/100G-Tuning-TechEx2016.tierney.pdf

[7]《TCP/IP Tuning》

https://www.ateam-oracle.com/post/tcpip-tuning

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 背景
  • 2 测试环境
  • 3 操作步骤
    • 3.1 确认CVM网络规格
      • 3.2 确认网卡队列数
        • 3.3 安装iperf3
          • 3.4 1对1测试
            • 3.5 1对n测试
              • 3.6 发送带宽测试
              • 4 问题讨论
              • 5 参考资料
              相关产品与服务
              云服务器
              云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档