背景介绍
随着全球特别是北美地区VNF网络应用渐渐地往云上迁移,云环境中更高的性能需求变得越来越迫切。作为一流数据处理中心部门,随着大势所趋,不仅仅专研于裸机的性能数据,也开始关注Intel平台在不同云环境中的性能表现。
在DPDK 22.07发布的 Intel NIC性能报告里,第一次添加了AWS(Amazon Web Services)云中基于Intel® Xeon® Platinum 8375C CPU 的m6id.metal 型号的DPDK性能数据。
云端部署
与裸机不同,云端的部署环境是私有的virtual private cloud(VPC)网络,其他地方的机器只能借助跳板机连接到公共的IP作为ssh引擎来连接网络。如图1所示,采用AWS上的3个实例,也就是3个VM环境来组建我们的测试环境。作为用户,可以根据需求来选择你要选用的机器型号。说到这个,需要了解下AWS的实例命名方式,以m6i.32xlarge为例,m6表示通用型m系列第6代,i表示Intel 处理器,m6i采用的是Intel目前最新一代的Xeon® Platinum 8375C处理器,点号的右侧是实例的大小,不同的实例大小表示vCPU数量、带宽等配置不同。目前m6i最大支持32xlarge规格,它的带宽是50Gbps,vCPU数量是128个。下文测试中用到的m6i 的metal规格和32xlarge规格一样,但是号称metal预留的是整台机器,可以减少其他用户的干扰,稳定性会更好些。目前AWS上支持的网卡驱动只有ENA(Elastic Network Adapter),我们不能选择或者更改此项搭配。
如图1所示的黄色方框是数据流部分,这里主要用到2个实例,一个是Tester实例,采用TREX发包器来软件发包,另一个是DUT(Device Under Test)实例,运行DPDK应用程序做数据转发。测试中,Tester和DUT实例类型选用的都是AWS 的Intel® Xeon® Platinum 8375C 的m6id.metal 型号,分别采用一个网口做双向流测试,总带宽是50Gbps,观察TREX仪表盘统计分析性能数据。
图1 环境部署
【注意】
在AWS中,对实例之间的包转发有一些要求:
链路层:testpmd 转发模式为mac,源物理地址和目的物理地址必须是正确的,不然不能被对端网口收到,ENA驱动目前不支持混杂模式。
网络层:由于支持的IP是在一个私有网络中,源IP和目的IP必须在一个正确的范围内。对于TREX发包,源IP和目的IP需要配置为正确的地址和网段(根据实际情况)。
系统信息
AWS的M6id.metal 实例系统信息如下。
表1 m6id.metal系统信息
测试流程
1. 登陆到DUT实例,下载DPDK代码并且编译
2. 登陆到Tester实例,下载TREX代码
3. 绑定两端的网卡ENA驱动到igb_uio或vfio-pci模式
4. 在DUT实例启动testpmd命令
1vCPU-1Q: dpdk-testpmd -l 0,1 -a 0000:31:00.0 -- -i --forward-mode=mac --txd=1024 --rxd=2048 --txq=1 --rxq=1 --eth-peer=0, XX:XX:XX:XX:XX:XX --nb-cores=1 --rss-udp
2vCPU-2Q: dpdk-testpmd -l 0,1,2 -a 0000:31:00.0 -- -i --forward-mode=mac --txd=1024 --rxd=2048 --txq=2 --rxq=2 --eth-peer=0, XX:XX:XX:XX:XX:XX --nb-cores=2 --rss-udp
4vCPU-4Q: dpdk-testpmd -l 0,1,2,3,4 -a 0000:31:00.0 -- -i --forward-mode=mac --txd=1024 --rxd=2048 --txq=4 --rxq=4 --eth-peer=0, XX:XX:XX:XX:XX:XX --nb-cores=4 --rss-udp
8vCPU-8Q: dpdk-testpmd -l 0,1,2,3,4,5,6,7,8 -a 0000:31:00.0 -- -i --forward-mode=mac --txd=1024 --rxd=2048 --txq=8 --rxq=8 --eth-peer=0, XX:XX:XX:XX:XX:XX --nb-cores=8 --rss-udp
【注意】
参数中-l 指定了核信息,预留0核给应用程序做控制面使用,其他核分配给数据流做转发。
--eth-peer=0,XX:XX:XX:XX:XX:XX, 设置的是对端网口的XX:XX:XX:XX:XX:XX 物理地址。
5. Tester实例端采用TREX进行发包,注意上述的链路层和网络层的配置要求,可以创建多条流来测试负载均衡RSS。
6. TREX采用如下命令来发数据流,启用TREX控制台来查看包的收发情况。
start -p 0 -m 100% -f stl/profile.py -t size=64,vm=cached
结果分析
由于云环境与实验室的裸机环境不一样,波动性比较大,选择AWS的时区,执行时段,邻居节点的使用情况等都会影响数据的稳定性,为了结论的可靠性,我们针对每组案例进行了10组采样,然后计算平均值来分析数据。
如表2所示,测试中分别针对64,Cisco IMIX(354),500,1518,9000字节的1vCPU-1Q, 2vCPU-2Q,4vCPU-4Q,8vCPU-8Q的单核和多核测试组合进行10次采样,计算平均值得到如下表格。
表2 性能数据
在DPDK NIC的性能报告里,Intel E810网卡在裸机Xeon® Platinum 8380服务器上,当报文包长大于128字节时,DPDK性能便可以达到网卡瓶颈。但是如表2所示,在相同系列Intel处理器的AWS m6id.metal 实例中,当包长为1518字节时,DPDK性能才接近网卡瓶颈,而且2vCPU-2Q,4vCPU-4Q,8vCPU-8Q的性能数据几乎相等,图2中显示的这几组曲线是重叠的,增加vCPU数量对性能没有提升,性能被AWS实例的网卡限制在 4.16 Mpps左右(数据仅作参考,不同实例类型和版本可能有所不同)。
图2 零丢包性能曲线
以上基于AWS云中m6id.metal 型号(Intel® Xeon® Platinum 8375C处理器)的DPDK testpmd零丢包性能测试是DPDK中最基本的测试,此项测试数据第一次被添加到DPDK 22.07 NIC 性能报告里且已发布,详情请参阅DPDK官网(http://fast.dpdk.org/doc/perf/DPDK_22_07_Intel_NIC_performance_report.pdf)。后期我们也将针对不同的业务和云平台展开,添加并发布更多的云端数据,敬请期待~ ~
转载须知
DPDK与SPDK开源社区
公众号文章转载声明
推荐阅读
DPDK Release 22.11
Release notes for VPP 22.10
剖析SPDK读写NVMe盘过程--从hello_world开始
TADK v22.09 Release
点点“赞”和“在看”,给我充点儿电吧~