攻城狮自述丨OK1043A-C DPDK环境体验
飞凌嵌入式今年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中包含了二层转发的测试例程吧。
二层转发网络拓扑如下图所示:
使用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
参数 |
说明 |
-c |
Core mask 0xf 使用4核 |
-n |
内存通道数 |
-p |
Port mask 0xc 二进制1100使用port3 port2 |
-q |
每个核的队列数量默认为1 |
--no-mac-updating |
转换后不替换MAC |
配置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的负载一直居高不下,因为它一直在应用层轮询,查看是否有数据包需要处理。
---- END ----
长按识别二维码加关注 飞凌嵌入式 专注于智能设备核心平台研发与制造
|
■ 关注“飞凌嵌入式”公众号,不定期分享行业干货及产品一线资料。 ■ 直接微信回复产品平台,如“LS1043A”,即可快速获取对应产品信息。 ■ 想要了解飞凌更多信息,欢迎与我们联系: 销售工程师:400-699-6866 国际业务部:0312-3102650-854 技术服务部:0312-3119192 方案定制类:17713286015 (杜工),18633238067(王工)
■ 实时技术支持: AM 9:00—11:30,PM 13:30—17:00(周一至周五) |
相关产品 >
-
FET1046A-C核心板
4核1.8GHz,原生8网口灵活扩展|LS1046A 系列ARM工控核心板基于 NXP公司的LS1046A高性能64位ARM四核处理器。LS1046A处理器将四个64位ARM Cortex-A72内核与数据包处理加速和高速外设相集成,CoreMark跑分高达45000,LS1046A强大的网络处理能力和丰富的高速接口,适用于工业路由、边缘计算网关、IP-PBX等产品,以及边缘计算、 能源物联网、智慧城市、工业自动化、视频监控等应用领域。
了解详情 -
OK1046A-C2开发板
4核1.8GHz,原生8网口,支持万兆网络|
飞凌嵌入式LS1046a ARM工控主板系列LS1046开发板 基于 NXP LS1046A 四核Cortex A72 CPU,强大的万兆网络处理能力和丰富的高速接口,CoreMark跑分高达45000。飞凌不仅仅提供了LS1046A开发板套件,还提供了调试心得、LS1046A硬件数据手册,并根据应用情况发布了 LS1046A 5G CPE 工业网关方案、边缘计算网关方案,降低了客户二次开发的难度。更多关于LS1046A的解决方案,产品详情,您可以登入飞凌嵌入式官网了解。
了解详情 -
FET1043A-C核心板
LS1043A处理器是恩智浦推出的一款面向嵌入式网络的四核64位ARM处理器。LS1023A (双核)和LS1043A (四核)支持无风扇设计,超过10 Gbps的性能。LS1043A和LS1023A能够面向无线LAN和以太网供电系统方案提供额外的功耗节省。支持引脚兼容设计,可扩展至LS1046A (四核A72处理器)或LS1088A (十核A53处理器)。
飞凌LS1043系列核心板,基于NXP公司的LS1043A四核处理器设计,主频1.6GHz,ARM Cortex-A53架构。原生支持1个10Gbps和6个1000Mbps。支持PCIe 2.0、SATA3.0、USB3.0、UART、IIC等功能接口 了解详情 -
OK1043A-C开发板
LS1043A开发板基于四核64位Arm Cortex-A53 LS1043A的处理器专为嵌入式网络应用而设计,主频1.6GHz,板载资源丰富,原生支持7 个Ethernet。 飞凌OK1043A-C开发板上市已有一段时间,大家对LS1043A有了初步体验,飞凌也优化了很多资料,帮助客户使用LS1043应用解决方案套件,包括LS1043软件手册、LS1043硬件手册、LS1043引脚定义等,客户可以通过这些LS1043的资料快速完成产品原型设计开发工作。
了解详情