DPDK官方文档翻译:Running Sample Applications

https://doc.dpdk.org/guides/linux_gsg/build_sample_apps.html

本章介绍如何在 DPDK 环境中编译和运行应用程序。它还提供指向示例应用程序的存储位置的指针。

1、编译示例应用程序

有关编译示例应用程序的详细信息,请参阅使用已安装的 DPDK 构建应用程序。编译示例链接:https://doc.dpdk.org/guides/linux_gsg/build_dpdk.html#building-app-using-installed-dpdk。

2、运行示例应用程序

警告:在运行应用程序之前,请确保:

1、大页面设置完成。

2、加载正在使用的任何内核驱动程序。

3、如果需要,应用程序使用的端口应绑定到相应的内核驱动程序。

该应用程序与 DPDK 目标环境的环境抽象层 (EAL) 库链接,该库提供了一些通用于每个 DPDK 应用程序的选项。

以下是可以提供给 EAL 的选项列表:

./rte-app [-c COREMASK | -l CORELIST] [-n NUM] [-b <domain:bus:devid.func>] \
          [--socket-mem=MB,...] [-d LIB.so|DIR] [-m MB] [-r NUM] [-v] [--file-prefix] \
          [--proc-type <primary|secondary|auto>]

EAL 选项如下:

1、-c COREMASK 或 -l CORELIST:要运行的内核十六进制位掩码。请注意,核心编号可以在平台之间更改,应事先确定。核心列表是一组核心数字,而不是位图核心掩码。

2、-n NUM:每个处理器socket的内存通道数

3、-b domain:bus:devid.func:端口黑名单。阻止 EAL 使用指定的 PCI 设备(允许多个 -b 选项)。

4、–use-device:仅使用指定的以太网设备。使用逗号分隔的 [domain:]bus:devid.func 值。不能与 -b 选项一起使用。

5、–socket-mem:要从特定套接字上的大页面分配内存。在动态内存模式下,此内存也将固定(即在应用程序关闭之前不会释放回系统)。

6、–socket-limit:限制每个socket上可用于分配的最大内存。不支持传统内存模式。

7、-d:添加要加载的驱动程序或驱动程序目录。应用程序应使用此选项加载构建为共享库的 PMD。

8、-m MB:从大页面分配的内存,无论处理器socket如何。建议使用 --socket-mem 代替此选项。

9、-r NUM:内存等级数。

10、-v:在启动时显示版本信息。

11、–huge-dir:挂载 hugetlbfs 的目录。

12、–mbuf-pool-ops-name:供 mbuf 使用的池操作名称。

13、–file-prefix:用于大页面文件名的前缀文本。

14、–proc-type:流程实例的类型。

15、–vmware-tsc-map:使用 VMware TSC 映射而不是本机 RDTSC。

16、–base-virtaddr:指定基本虚拟地址。

17、–vfio-intr:指定 VFIO 要使用的中断类型(如果未使用 VFIO,则不起作用)。

18、–legacy-mem:在传统内存模式下运行 DPDK(在运行时禁用内存保留/取消保留,但提供更多 IOVA 连续内存)。

19、–single-file-segments:将内存段存储在较少的文件中(仅限动态内存模式 - 不影响传统内存模式)。

-c 或 -l 和选项是必需的;其他是可选的。

将 DPDK 应用程序二进制文件复制到目标,然后按如下方式运行应用程序(假设平台每个处理器socket有四个内存通道,并且存在内核 0-3 并用于运行应用程序):

./dpdk-helloworld -l 0-3 -n 4

注意:–proc-type 和 --file-prefix 前缀 EAL 选项用于运行多个 DPDK 进程。有关更多详细信息,请参阅 DPDK 示例应用程序用户指南和 DPDK 程序员指南中的“多进程示例应用程序”一章。

1、应用程序的逻辑内核使用

核心掩码 (-c 0x0f) 或核心列表 (-l 0-3) 参数对于 DPDK 应用程序始终是必需的。掩码的每个位对应于 Linux 报告的等效逻辑内核编号。首选核心列表选项是定义要使用的核心的更简洁的方法。由于这些逻辑内核编号及其与特定 NUMA socket上特定内核的映射可能因平台而异,因此建议在选择要在每种情况下使用的核心掩码/核心列表时考虑每个平台的核心布局。

在 DPDK 应用程序初始化 EAL 层时,将显示要使用的逻辑内核及其socket位置。还可以通过检查 /proc/cpuinfo 文件(例如,通过运行 cat /proc/cpuinfo)来确定系统上所有内核的此信息。为每个处理器列出的物理 id 属性指示它所属的 CPU socket。当使用其他处理器了解逻辑内核到套接字的映射时,这可能很有用。

注意:

可以使用 lstopo Linux 实用程序获得逻辑核心布局的更多图形视图。在 Fedora 上,可以使用以下命令安装和运行:

sudo yum install hwloc
lstopo

此命令生成一个非常短的文本输出:

lstopo-no-graphics --merge

警告:逻辑内核布局可以在不同的电路板布局之间更改,在选择应用内核掩码/内核列表之前应进行检查。

2、应用程序使用的巨大页面内存

运行应用程序时,建议使用与分配给 Hugepages 的内存量相同的内存量。这是由 DPDK 应用程序在启动时自动完成的,如果在运行时没有将 -m 或 --socket-mem 参数传递给它。

如果通过显式传递 -m 或 --socket-mem 值来请求更多内存,则应用程序将失败。但是,如果用户请求的内存少于保留的 hugepage-memory 量,则应用程序本身也可能失败,尤其是在使用 -m 选项时。原因如下。假设系统在socket 0 中保留了 1024 个 2 MB 页面,在socket 1 中保留了 1024 个页面。如果用户请求 128 MB 内存,则 64 页可能与约束不匹配:

1、巨大的页面内存仅由socket 1 中的内核提供给应用程序。在这种情况下,如果应用程序尝试创建对象(如套接字 0 中的环或内存池),则会失败。为避免此问题,建议使用 --socket-mem 选项而不是 -m 选项。

2、这些页面可以位于物理内存中的任何位置,尽管 DPDK EAL 将尝试在连续块中分配内存,但这些页面可能不是连续的。在这种情况下,应用程序无法分配大内存池。

socket-mem 选项可用于为特定socket请求特定数量的内存。这是通过提供 --socket-mem 标志,后跟每个socket上请求的内存量来实现的,例如,提供 --socket-mem=0,512 以尝试仅为socket 1 保留 512 MB。同样,在四socket系统上,要在socket 0 和 2 上分配 1 GB 内存,可以使用参数 --socket-mem=1024,0,1024。不会在任何未显式引用的 CPU socket上保留内存,例如,本例中的socket 3。如果 DPDK 无法在每个socket上分配足够的内存,则 EAL 初始化将失败。

3、其他示例应用程序

其他示例应用程序包含在 DPDK 示例目录中。这些示例应用程序的构建和运行方式可能类似于本手册前面各节中所述的方式。此外,请参阅 DPDK 示例应用程序用户指南,了解应用程序说明、编译和执行的具体说明以及代码的一些说明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值