【嵌牛导读】DPDK是INTEL公司开发的一款高性能的网络驱动组件,旨在为数据面应用程序提供一个简单方便的,完整的,快速的数据包处理解决方案,主要技术有用户态、轮询取代中断、零拷贝、网卡RSS、访存DirectIO等
【嵌牛鼻子】计算机网络,高性能网络,DPDK
【嵌牛提问】读完本文,对DPDK技术的helloworld程序有所认识了吗?
【嵌牛正文】
主线程运行入口是main函数,调用了rte_eal_init入口函数,以启动基础运行环境
argc和argv参数传递给rte_eal_init函数,返回值是解析的参数个数
对于DPDK库的使用者而言,初始化 *** 作已经被EAL封装起来,其初始化主要动作包括:
DPDK面向多核设计,程序会试图独占运行在逻辑核(lcore)上
RTE_LCORE_FOREACH_WORKER(lcore_id)遍历所有EAL指定可以使用的lcore
遍历时,在每个lcore上通过rte_eal_remote_launch(lcore_hello, NULL, lcore_id)启动被指定的线程:
通过rte_lcore_id函数读取自己的逻辑核编号,并打印出来
DPDK 需要一个构建系统用于编译等 *** 作。 本节介绍 DPDK 框架中使用的约束和机制。
这个框架有两个使用场景:
以下提供了如何构建DPDK二进制文件。
安装之后,将创建一个构建目录结构。 每个构件目录包含文件、库和应用程序。
构建目录特定于配置的体系结构、执行环境、工具链。 可以存在几个构建目录共享源码,但是配置不一样的情况。
例如,要使用配置模板 config/defconfig_x86_64-linuxapp 创建一个名为 my_sdk_build_dir 的构建目录,我们使用如下命令:
这会创建一个新的 new my_sdk_build_dir 目录,之后,我们可以使用如下的命令进行编译:
相当于:
目录 my_sdk_build_dir 的内容是:
请参阅 Development Kit Root Makefile Help 获取更详细的信息。
由于DPDK本质上是一个开发工具包,所以最终用户的第一个目标就是使用这个SDK创建新的应用程序。 要编译应用程序,用户必须设置 RTE_SDK 和 RTE_TARGET 环境变量。
对于一个新的应用程序,用户必须创建新的 Makefile 并包含指定的 .mk 文件,如 ${RTE_SDK}/mk/rte.vars.mk 和 ${RTE_SDK}/mk/rte.app.mk。 这部分内容描述请参考 Building Your Own Application .
根据 Makefile 所选定的目标(架构、机器、执行环境、工具链)或环境变量,应用程序和库将使用适当的h头文件进行编译,并和适当的a库链接。 这些文件位于 ${RTE_SDK}/arch-machine-execenv-toolchain,由 ${RTE_BIN_SDK} 内部引用。
为了编译应用程序,用户只需要调用make命令。编译结果将置于 /path/to/my_app/build 目录。
示例应用程序在example目录中提供。
在DPDK中,Makefiles始终遵循相同的方案:
根据Makefile最后包含的 .mk 文件,Makefile将具有不同的角色。 注意到,并不能在同一个Makefile文件中同时编译库和应用程序。 因此,用户必须创建两个独立的Makefile文件,最好是置于两个不同的目录中。
无论如何,rte.vars.mk 文件必须包含用户Makefile。
这些 Makefiles 生成一个二进制应用程序。
创建一个 .a 库。
app/dpdk-pmdinfogen
dpdk-pmdinfogen 扫描各种总所周知的符号名称对象文件。这些目标文件由各种宏定义,用于导出关于pmd文件的硬件支持和使用的重要信息。 例如宏定义:
创建以下的符号:
将被 dpdk-pmdinfogen 扫描。使用这个虚拟系,可以从目标文件中导出其他相关位信息,并用于产生硬件支持描述, 然后 dpdk-pmdinfogen 按照以下格式编码成 json 格式的字符串:
然后可以通过外部工具搜索这些字符串,以确定给定库或应用程序的硬件支持。
一些变量可以用来配置构建系统的行为。在文件 Development Kit Root Makefile Help 及 External Application/Library Makefile Help 中有描述。
这避免了根据编译器(icc或gcc)使用不同的情况。而且,这个变量可以从命令行覆盖,这允许绕过标志用于测试目的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)