攻城狮自述丨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的负载一直居高不下,因为它一直在应用层轮询,查看是否有数据包需要处理。

原文链接:https://www.forlinx.com/article_view_267.html

原文地址:https://blog.51cto.com/14771158/2485452

时间: 2024-08-29 20:26:45

攻城狮自述丨OK1043A-C DPDK环境体验的相关文章

攻城狮解析丨开发板电源架构解析之OK4418-C(下)

上一期对 <OKMX6UL-C开发板底 板电源架构> 进行了分析,相信对用户是有一定的帮助的.这一期准备对同样有点复杂的OKxx18_C的电源架构做一个详细的梳理. 我们要知道飞凌S5P4418/688系列 FETxx18核 心板 支持以下三种供电方式: ? ADP供电,通过J1(电源插座)供入底板,经过U11(FDS4435)直接供给核心板PMIC. ? USB供电,由OTG接口直接供给核心板PMIC. ? VBAT供电,由锂电池供给核心板PMIC. ▲核心板PMIC(NXE2000)锂电池

攻城狮解析丨时钟使用之注册和获取(一)

我们在编写或修改驱动时,经常会遇到时钟相关的问题,不知道从什么地方下手.在本文中,以i.MX6的3.0.35版本的内核举例时钟如何获取和使用. 我们常见的获取时钟的方法? 通过名称获取例如:获取时钟clko clko = clk_get(NULL, "clko_clk"); ? 通过设备获取例如在音频接口ssi的驱动中获时钟, ssi->clk = clk_get(&pdev->dev, NULL); //设备的名字是 "imx-ssi" 我们可

攻城狮分享丨i.MX6X的uboot自动适配logo的配置方案

有很多客户对于调试屏幕有很多困扰,经常在自己调试屏幕的时候,出现各种各样的问题.为了帮助大家更好更快的调试屏幕,飞凌研发工程师又 在 i.MX6X的uboot 阶段添加了一项新的功能,让屏幕logo适配更方便更快捷 ,我们一起来看看这一项新的功能吧. 该功能目前适配内核系统为Linux3.0.35版本的i.MX6X平台,操作起来是很简单的,我们只需要把屏幕的分辨率以及刷新频率设置一下,大部分的屏幕就都可以自己适配了,方便又省心. 下面我们就来看看如何操作吧! IMX6X开发板 上电后 3秒钟之内

【云栖大会】程序猿、攻城狮的大聚会 他们眼中的云栖大会是啥样

2016年云栖大会进行得如火如荼,"烧脑"."前沿"."高端"."技术"."一票难求"--这些关键词把这场"干货"分享大会衬托得神秘满满,有一群人却沉浸其中,自得其乐. 他们的名字叫--程序猿.攻城狮. 从最初的站长大会,到阿里云开发者大会,再到云栖大会:从200名草根站长到4万名业内外参与者:从单一峰会发展至超过100场论坛的"巨无霸"大会:从纯谈技术到融合音乐节.

攻城狮在路上(叁)Linux(三十)--- 光盘写入工具

一.基本步骤: 1.用mkisofs命令将所需备份的数据构建成镜像文件. 2.用cdrecord命令将镜像文件刻录至光盘或者DVD中. 二.mkisofs:新建镜像文件 mkisofs [-0 镜像文件] [-rv] [-m file] 待备份文件... [-V vol] graft -point isodir=Systemdir... 参数说明: -o:后面指定镜像文件 -r:通过RockRidge产生支持UNIX/Linux的文件数据,可以记录较多信息. -v:显示构建过程 -m file:

攻城狮在路上(叁)Linux(二十九)--- 完整备份工具:dump以及restore

一.dump命令: 该命令既可以针对整个文件系统进行备份,也可以仅针对目录来备份.还可以指定不同的备份等级(-0~-9共10个等级). dump -W:列出在/etc/fstab中具有dump设置的分区是否备份过. 命令格式: dump [-Suvj] [-level] [-f 备份文件] 待备份数据 参数说明: -S:仅列出后面的待备份数据所需要的磁盘空间大小. -u:将这次dump的时间记录到/etc/dumpdates文件中. -v:将dump的文件过程显示出来. -j:加入bzip2的支

攻城狮在路上(叁)Linux(二十五)--- linux内存交换空间(swap)的构建

swap的功能是应付物理内存不足的状况,用硬盘来暂时放置内存中的信息. 对于一般主机,物理内存都差不多够用,所以也就不会用到swap,但是对于服务器而言,当遇到大量网络请求时或许就会用到. 当swap被使用的时候,主机的硬盘灯就会闪烁不停. 本篇介绍两种方式:1.设置一个swap分区   2.创建一个虚拟内存的文件. 一.使用物理分区构建swap: 1.首先是分区: A.fdisk /dev/sda; <== 根据后续提示创建一个分区. B.修改分区的ID,因为fdisk默认将分区的ID作为文件

攻城狮在路上(叁)Linux(二十六)--- linux文件系统的特殊查看与操作

一.boot sector 与 super block的关系: 1.boot sector用于存放引导装载程序,占用1024个字节. 2.super block的大小也为1024字节. 3.若block大小为1k,则boot sector和super block各占一个block. 4.若block大于1K(2K/4K)时,则两者都位于第一个block中. 二.磁盘空间的浪费问题:暂不考虑. 三.利用GUN的parted命令进行分区行为: 因为fdisk不支持高于2TB的分区. 命令格式: pa

攻城狮在路上(叁)Linux(二十四)--- linux设置开机挂载及镜像文件挂载

虽然可以手动进行文件系统的挂载,但是每次都手动挂载就会很麻烦,开机挂载的目的就是实现文件系统的自动挂载. 一.开机挂载:/etc/fstab及/etc/mtab 主要是通过修改/etc/fstab文件的配置来实现. fstab是开机时的设置,实际文件系统的挂载是记录到/etc/mtab和/proc/mounts这两个文件中. 1.系统挂载的限制: A.根目录/必须挂载,而且一定是最先挂载的,要先于其他mount point. B.其他挂载点必须为已新建的目录,可以任意指定. C.所有挂载点在同一