DPDK:LS1043A DPDK环境体验

3 篇文章 0 订阅
本文探讨了飞凌嵌入式FET1043A-C核心板在高网络性能需求下,传统Linux内核面临的中断处理、内存拷贝、上下文切换、局部性失效和内存管理等问题。DPDK作为一种解决方案,通过将网络配置到用户态,减少了内核瓶颈。通过实例展示了如何配置DPDK进行二层转发测试,证明了DPDK在数据包转发上的高效性能。
摘要由CSDN通过智能技术生成

        飞凌嵌入式今年6月推出的——FET1043A-C核心板,采用NXP公司的QorIQ® LS1043A处理器设计,拥有四颗ARMv8-A架构的Cortex-A53核,主频1.6G,低功耗,高能效。四通道高达10GB的SerDes包含多种灵活配置,在飞凌设计的配套底板中最大程度上发挥了QorIQ®LS1043A 处理器网络性能,采用一个万兆,六个千兆的设计,配合处理器内部的DPAA1加速引擎,再加上2GB大容量DDR4内存简直就是网络性能怪兽。

        

硬件如此的优秀,那么传统的Linux内核还是否与其门当户对?答案是否定的。

原因有以下几个方面:

❶ 中断处理。当网络中大量数据包到来时,会产生频繁的硬件中断请求,这些硬件中断可以打断之前较低优先级的软中断或者系统调用的执行过程,如果这种打断频繁的话,将会产生较高的性能开销。

❷ 内存拷贝。正常情况下,一个网络数据包从网卡到应用程序需要经过如下的过程:数据从网卡通过DMA等方式传到内核开辟的缓冲区,然后从内核空间拷贝到用户态空间,在Linux内核协议栈中,这个耗时操作甚至占到了数据包整个处理流程的57.1%。

❸ 上下文切换。频繁到达的硬件中断和软中断都可能随时抢占系统调用的运行,这会产生大量的上下文切换开销。另外,在基于多线程的服务器设计框架中,线程间的调度也会产生频繁的上下文切换开销,同样,锁竞争的耗能也是一个非常严重的问题。

❹ 局部性失效。如今主流的处理器都是多个核心的,这意味着一个数据包的处理可能跨多个CPU 核心,比如一个数据包可能中断在cpu0,内核态处理在cpu1,用户态处理在cpu2,这样跨多个核心,容易造成CPU 缓存失效,造成局部性失效。如果是NUMA 架构,更会造成跨NUMA 访问内存,性能受到很大影响。

❺ 内存管理。传统服务器内存页为4K,为了提高内存的访问速度,避免cache miss,可以增加cache 中映射表的条目,但这又会影响CPU 的检索效率。

综合以上问题,可以看出内核本身就是一个非常大的瓶颈所在。那很明显解决方案就是想办法绕过内核。经很多前辈先驱的研究,DPDK在众多方案脱颖而出。
        

“纸上得来终觉浅,绝知此事要躬行”,下面我们通过一个实例来体验下DPDK。

首先,使用DPDK环境,需要修改设备树,将网络配置到用户态。需要使用到的设备树文件:

OK10xx-linux-fs/flexbuild/build/linux/linux/arm64/fsl-ls1043a-rdb-usdpaa.dtb

将fsl-ls1043a-rdb-usdpaa.dtb拷贝到开发板根目录,使用如下命令替换设备树:
 

mv/run/media/mmcblk0p2/fsl-ls1043a-rdb-sdk.dtb/run/media/mmcblk0p2/fsl-ls1043a-rdb-sdk.dtb.bak

cp/fsl-ls1043a-rdb-usdpaa.dtb /run/media/mmcblk0p2/boot

ln-s /run/media/mmcblk0p2/boot/fsl-ls1043a-rdb-usdpaa.dtb/run/media/mmcblk0p2/boot/fsl-ls1043a-rdb-sdk.dtb

reboot

替换成功后启动开发板输入:ifconfigfm1-mac1

如果提示Devicenot found 就是已经替换成功。

测试DPDK完成后恢复默认配置方法:

cp/run/media/mmcblk0p2/fsl-ls1043a-rdb-sdk.dtb.bak/run/media/mmcblk0p2/fsl-ls1043a-rdb-sdk.dtb

reboot

将网络配置到用户态之后,那么我们该如何使用它们呢?TCP/UDP咋用?不要急在DPDK中使用TCP或者UDP的话还需要移植一个协议栈到DPDK中。入门阶段我们还是先来体验一把DPDK中包含了二层转发的测试例程吧。

二层转发网络拓扑如下图所示:

wps8.jpg

 

使用OK1043A-C平台的Port2和Port3(对应fm1-mac3和fm1-mac4),对LinuxHost 和 OK1012A-C之间的数据进行转发。LinuxHost 和 OK1012A-C您可以替换成其他的网络设备。

配置OK1043A-C:
 


l2fwd-c 0xf -n 1 -- -p 0xc -q 1 --no-mac-updating

在这里插入图片描述

配置OK1012A-C:

ifconfigeth0 192.168.1.200

tcpdump-i eth0 -vv -n -e

 配置Linux Host:

ifconfigeth0 192.168.1.120

sudomodprobe pktgen.ko

echo"add_deviceeth0"> /proc/net/pktgen/kpktgend_0

echo"dst_mac6e:56:7d:85:ce:4d"> /proc/net/pktgen/eth0

echo"dst192.168.1.200">/proc/net/pktgen/eth0

echo"pkt_size64"> /proc/net/pktgen/eth0

echo"count1000000"> /proc/net/pktgen/eth0

echo"start"> /proc/net/pktgen/pgctrl

我们让LinuxHost主机发送100万个64字节大小的包出去,测试OK1043A-CDPDK对这些数据包的转发能力。

 

通过查看OK1043A-C的串口打印信息,我们发现DPDK已经将所有收到的数据包完完全全的转发了出去。同时细心的你会发现采用DPDK进行数据转发时,CPU的负载一直居高不下,因为它一直在应用层轮询,查看是否有数据包需要处理。
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值