`
steeven
  • 浏览: 313015 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

从DPDK的snake test看性能影响因素

    博客分类:
  • DPDK
阅读更多
snake test一般把数据包在各个端口之间来回转,形成比较大的满负荷。

testpmd是dpdk用来验证两个直连网卡的性能,双方对打流量。如果没有硬件(你怎么什么都没有啊?)我们一样可以玩。 Linux下的tap就是成对出现的粒子,不,虚拟网卡,创建以后,什么bridge都不要,他们就是天然的好基友。。。

# ip link add ep1 type veth peer name ep2
# ifconfig ep1 up; ifconfig ep2 up
看看ifconfig, ip link是不是出现了?

testpmd安装运行参见: http://dpdk.org/doc/quick-start
testpmd运行多个实例需要加--no-shconf
hugepage多次运行以后貌似没有释放,不用它性能下降不多, --no-huge

# ./testpmd --no-huge -c7 -n3 --vdev="eth_pcap0,iface=ep1" --vdev=eth_pcap1,iface=ep2 -- -i --nb-cores=2 --nb-ports=2 --total-num-mbufs=2048
testpmd> start tx_first
testpmd> show port stats all
testpmd> show port stats all //两次
  Rx-pps:       418634
  Tx-pps:       436095


我们再创建一对taps测试,同时跑两组:
# ip link add ep3 type veth peer name ep4
# ifconfig ep3 up; ifconfig ep4 up
# ./testpmd1 --no-huge --no-shconf -c70  --vdev="eth_pcap2,iface=ep3" --vdev=eth_pcap3,iface=ep4 -- -i --nb-cores=2 --nb-ports=2 --total-num-mbufs=2048

两个同时跑性能差不多,因为-c参数把程序分散到不同core上,top命令按“1”可以看到

那么两个对串联性能会怎样?本来数据在 EP1<->EP2, EP3<->EP4, 现在改成EP2<->EP3, EP4<->EP1.

# ./testpmd --no-huge --no-shconf -c70  --vdev="eth_pcap1,iface=ep2" --vdev=eth_pcap2,iface=ep3 -- -i --nb-cores=2 --nb-ports=2 --total-num-mbufs=2048
testpmd> show port stats all
这时候你将看到pps都是0! 因为一边报文发出去tap对端没连上。 现在我们在另外一个窗口把ep4-ep1联通:
# ./testpmd --no-huge -c7 -n3 --vdev="eth_pcap0,iface=ep1" --vdev=eth_pcap3,iface=ep4 -- -i --nb-cores=2 --nb-ports=2 --total-num-mbufs=2048
testpmd> start tx_first
testpmd> show port stats all
testpmd> show port stats all
  Rx-pps:       433939
  Tx-pps:       423428

跑起来了,回去第一个窗口show一样有流量,至此snake流量打通。

问题来了,为什么两个串联性能变化不大?!
# lscpu
NUMA node0 CPU(s):     0,2,4,6,8,10,12,14,16,18,20,22
NUMA node1 CPU(s):     1,3,5,7,9,11,13,15,17,19,21,23
从top看testpmd的core在1-2, 5-6上跑的,跨越NUMA这个内存效率。。。
好吧,-c参数改成15, 这是 bitmap,实际使用core 4 2 0,ep1-ep2测试结果提升50%:
  Rx-pps:       612871
  Tx-pps:       597219
恢复snake test, cpu分别是15, 2A, 测试性能如下,貌似慢了不少:
  Rx-pps:       339290
  Tx-pps:       336334
cpu如果用15,1500,结果:
  Rx-pps:       540867
  Tx-pps:       496891
性能比跨越numa好了很多,但是比单个tap对还是下降了1/6, 那么再看看3个taps的snake结果,第三组cpu 150000还是同一numa,居然变化不大:
  Rx-pps:       511881
  Tx-pps:       503456

假设cpu不够用了,第三个testpmd程序也跑在cpu 1500上面, 结果非常可悲:
  Rx-pps:         1334
  Tx-pps:         1334


以上测试说明:
1. 尽量不要跨越numa传递数据
2. 绑定cpu击鼓传花处理数据总吞吐量决定要最慢的一个应用
3. cpu不能复用,切换调度严重影响性能

========================
创建一个bridge br0, 把ep1, ep3, ep5加进去,用testpmd测试ep2-ep4, 这是标准网桥,看看性能下降多少:
#brctl add br0
#brctl add ep1; brctl add ep3
# ./testpmd --no-huge --no-shconf -c15  --vdev="eth_pcap1,iface=ep2" --vdev=eth_pcap3,iface=ep4 -- -i --nb-cores=2 --nb-ports=2 --total-num-mbufs=2048

  Rx-pps:       136157
  Tx-pps:       128207
600kpps降到130k左右,1/4不到。。。有空用ovs试试。
分享到:
评论
1 楼 steeven 2016-10-11  
--no-shconf 一个实例运行多次
--no-huge 如果没有配置。。。
--port-topology=chained,在两个以上端口中逐个转发成环

除了pcap, dpdk还能使用Ring基于内存的虚拟端口测试:4 core 4 rings
./testpmd --no-huge -c 0x2aa -n 4 --vdev=eth_ring0 --vdev=eth_ring1  --vdev=eth_ring2 --vdev=eth_ring3 -- -i --total-num-mbufs=2048  --port-topology=chained --nb-cores=4
  Rx-pps:    121887976
  Tx-pps:    121887976

  Rx-pps:    281685659 //--no-huge, R720
  Tx-pps:    281685659
也就是说不考虑网络PCI cost, 基于内存队列的虚拟端口每个core可以处理200Gbps以上的流量。。。

相关推荐

    用TestPMD测试DPDK性能和功能.pdf

    DPDK性能和功能测试 数据平面开发工具包(DPDK)是Intel公司推出的一个开源项目,旨在提高网络处理能力和降低网络延迟。TestPMD是一个使用DPDK软件包分发的参考应用程序,主要目的是在网络接口的以太网端口之间转发...

    DPDK概述和性能优化总结

    DPDK概述和性能优化总结

    dpdk学习资料-经典

    这部分内容介绍了内存池库在内存分配过程中考虑到的对齐约束,以及这些约束如何影响性能。 **6.4 本地缓存** 本地缓存是提高内存池访问效率的有效手段,DPDK支持将常用数据项缓存在本地,减少频繁的内存访问。这...

    DPDK中的memcpy性能优化及思考.pdf

    DPDK中的memcpy性能优化及思考.pdf

    中国电信DPDK技术白皮书.pdf

    2. DPDK性能影响因素,涉及硬件结构、操作系统版本和内核的影响、OVS性能问题、内存管理、CPU核间无锁通信以及目标CPU类型设置。这揭示了影响DPDK性能的几个关键方面,并提供了改善性能时需要考虑的因素。 3. DPDK...

    Intel DPDK 培训

    Intel Data Plane Development Kit (Intel DPDK) 是一套开源的高性能数据包处理软件库集合,专为基于Intel架构的平台设计,旨在优化网络应用的性能。DPDK通过绕过操作系统内核的数据路径,实现了在用户空间对网络...

    dpdk静态库编译lib-dpdk.lib

    DPDK (Data Plane Development Kit) 是一套开源的高性能网络处理框架,主要针对网络包处理进行优化,广泛应用于数据中心、网络设备以及网络安全等领域。在C++编程中,有时我们需要将DPDK库集成到项目中,此时就需要...

    cpp-shuke基于DPDK开发的高性能DNS授权服务器

    本文将深入探讨“cpp-shuke”项目,这是一个利用DPDK(Data Plane Development Kit)技术构建的高性能DNS授权服务器。DPDK是一种开源框架,旨在加速网络应用的数据包处理,特别适用于对延迟敏感和高吞吐量的需求。 ...

    cpp-FStack一个基于DPDK的开源和高性能网络框架

    **F-Stack:基于DPDK的高性能网络框架** F-Stack是一个开源的网络框架,它充分利用了DPDK(Data Plane Development Kit)库的优势,旨在提供高效、低延迟的数据处理能力,特别适合于处理大规模网络流量的场景。DPDK...

    dpdk-tools-17.11.pdf

    在DPDK的使用中,还通常会提及到性能测试,例如dpdk-test-crypto-perf(加密性能测试工具)和dpdk-test-eventdev(事件设备测试工具),这些工具用于测试DPDK应用程序在特定硬件上的性能。 DPDK的应用程序和工具在...

    dpdk源码,高性能的网络驱动

    DPDK是一个基于C语言编写的库和驱动集合,旨在提高数据平面应用程序的工作效率和数据处理性能‌12。 DPDK的主要特点 ‌轮询模式‌:通过轮询模式避免中断上下文切换的开销,提高处理效率。 ‌用户态驱动‌:绕过...

    DPDK GRO GSO的转发性能提升实例.pdf

    DPDK GRO GSO 的转发性能提升实例 本文主要介绍了 DPDK 中的 GRO(Generic Receive Offload)和 GSO(Generic Segmentation Offload)技术对网络应用性能的提升。GRO 和 GSO 分别是 software-based 的接收及分片 ...

    DPDK绑定和解绑网卡脚本

    "DPDK绑定和解绑网卡脚本"是DPDK部署过程中的关键步骤,因为DPDK需要将物理网卡从操作系统驱动中分离出来,以便独占使用这些网卡资源。绑定过程就是将网卡从默认的内核驱动下移除,转而使用DPDK提供的用户空间驱动;...

    2021年最新整理【DPDK工程师手册】.pdf

    DPDK 工程师手册 本资源为 DPDK 工程师手册,提供...本资源提供了 DPDK 工程师手册,涵盖了 DPDK 的架构、编程指南、性能优化、网络开发、Linux 服务器开发、C/C++ 编程等方面的知识,是 DPDK 工程师必备的参考文献。

    Intel X710/82599万兆网卡DPDK测试方法.doc

    【Intel X710/82599万兆网卡DPDK测试方法】文档主要介绍了如何使用DPDK(Data Plane Development Kit)测试Intel X710和82599系列万兆网卡的数据传输性能。DPDK是一个开源软件框架,旨在提高网络应用的数据包处理...

    dpdk大会2017 ppt

    **DPDK大会2017 PPT:SDN与高性能网络技术** DPDK(Data Plane Development Kit)是一种开源软件框架,旨在加速网络数据包处理,提高网络性能,尤其是在虚拟化环境中。2017年的DPDK大会聚焦了SDN(Software-Defined...

    从计算机架构师的角度看DPDK性能.pdf

    因此,从计算机架构师的角度来看,DPDK的高性能数据平面处理能力是基于其突破了传统网络堆栈的局限,优化了从物理网卡到应用程序的数据传输路径。这些优化包括在用户空间进行关键的网络处理,使用零拷贝技术,采用大...

Global site tag (gtag.js) - Google Analytics