DPDK 快速上手(linux)
本文档主要来自 linux_gsg-18.02.pdf 的翻译, 翻译肯定有不妥之处, 请批评指正, 我会随后修改, 不胜感激.
1. 介绍
本文档包含有关 DPDK(Data Plane Development Kit 的缩写)软件的安装和配置的说明, 目的就是让用户快速用起来. 本文档描述怎样在 linux 应用环境下编译和运行一个 DPDK 应用程序, 而不过多深入细节.
1.1 文档路线图
以下是针对所有 DPDK 文档建议的阅读顺序:
发布说明(Release Notes):
提供具体的发布信息, 包括支持特性, 限制, 问题改进, 问题报告等等. 也提供以 FAQ 形式的常见问题的回答.
快速上手指南(Getting Started Guide), 即本文档:
描述在不同的操作系统上如何安装和配置 DPDK 软件; 帮助用户快速用起来.
编程者指南(programmer's guide):
描述:
软件架构和怎么用它(通过例子), 特别是在 linux 应用环境下.
DPDK 的内容, 系统构建 (包括用在 DPDK 根目录 Makefile 中的命令, 用来构建开发工具包和应用程序) 以及移植应用程序的准则.
软件中使用的优化以及新开发应考虑的优化.
还提供术语表.
API 参考(API Reference):
提供有关 DPDK 函数, 数据结构和其它编程结构的详细信息.
示例应用程序用户指南(sample applications user guides):
介绍一组示例应用程序. 每章描述了一个示例应用程序, 该应用程序展示了特定的功能并提供了关于如何编译, 运行和使用示例应用程序的说明.
2. 系统要求
本章介绍编译 DPDK 所需的软件包.
注意:
如果 DPDK 用在 Intel? 通信芯片组 89xx 系列的平台, 请参阅 "Intel? 通信芯片组 89xx 系列软件 Linux 版上手指南".
2.1 x86 上 BIOS 设置的先决条件
对于大多数平台, 不需要特殊的 BIOS 设置即可使用基本的 DPDK 功能. 但是, 对于额外的 HPET 定时器 (译者注: High Precision Event Timer 高精度定时器) 和电源管理功能以及小包的高性能, 可能需要更改 BIOS 设置. 有关所需更改的更多信息, 请参阅 "启用附加功能" 部分.
注意:
如果启用 UEFI(译者注: Unified Extensible Firmware Interface 统一的可扩展固件接口)安全引导, 则 Linux 内核可能会禁止在系统上使用 UIO. 因此, 由 DPDK 使用的设备应绑定到 vfio-pci 内核模块, 而不是 igb_uio 或 uio_pci_generic. 有关更多详细信息, 请参阅 "从内核模块绑定和解除绑定网络端口" 部分.
2.2 编译 DPDK 所需
所需的工具和库:
注意:
各种系统所需的安装命令和安装软件包可能会有所不同. 有关 Linux 发行版和测试版本的详细信息, 请参阅 DPDK 发布说明(Release Notes).
- GNU
- make
- coreutils
cmp,sed,grep,arch, 等等.
gcc
推荐所有平台使用 4.9 或更高版本. 在某些发行版中, 默认情况下会启用某些特定的编译器标志和链接器标志, 并影响性能(例如,-fstack-protector). 请参阅您的发行版文档以及 gcc -dumpspecs.
libc 头文件
通常打包为 gcc-multilib(glibc-devel.i686/libc6-dev-i386; glibc-devel.x86_64/libc6-dev 用于 Intel 架构上的 64 位编译; glibc-devel.ppc64 用于 IBM Power 架构上的 64 位编译)
构建内核模块所需的 Linux 内核头文件或源代码(kernel-devel.x86_64; kernel-devel.ppc64)
在 64 位系统上进行 32 位编译所需的其它软件包:
针对 Intel i686/x86_64 的 glibc.i686,libgcc.i686,libstdc++.i686 和 glibc-devel.i686;
针对 IBM ppc_64 的 glibc.ppc64,libgcc.ppc64,libstdc++.ppc64 和 glibc-devel.ppc64;
注意:
x86_x32 ABI 目前仅支持在高于 13.10 的 Ubuntu 或最近的 Debian 发行版的发行包. 唯一支持的编译器是 gcc 4.9+.
libnuma-devel
用于处理 NUMA(非一致内存访问)的库.
Python 2.7 + 或 3.2 + 版本
可以使用 DPDK 包中包含的各种帮助程序脚本.
可选的工具:
Intel?C++ 编译器(icc).
对于其安装, 可能需要额外的库. 请参阅 icc 编译器安装文档目录中的安装指南.
IBM? 高级工具链, 针对 Powerlinux.
这是一套开源开发工具和实时运行库, 它允许用户在 Linux 上获得 IBM 最新 POWER 硬件功能的领先优势. 要安装它, 请参阅 IBM 官方安装文档.
libpcap 头文件和库(libpcap-devel)
用于编译并使用基于 libpcap 的轮询模式驱动程序. 该驱动程序默认是禁用的, 可以通过在编译时配置文件中设置 CONFIG_RTE_LIBRTE_PMD_PCAP=y 来启用.
libarchive 头文件和库
是使用 tar 获取资源的一些单元测试所必需的.
2.3 运行 DPDK 应用程序所需
要运行 DPDK 应用程序, 目标机器上可能需要做一些定制化.
2.3.1 系统软件
所需:
内核版本>= 3.2
所需的内核版本基于当开发 DPDK 版本时在 kernel.org 上提供的最老的长期稳定内核. 正在使用的内核版本可以使用以下命令进行检查: uname -r
glibc> = 2.7(用于与 cpuset 相关的特性)
该版本可以使用 ldd --version 命令进行检查.
内核配置
在 Fedora OS 和其它常见发行版 (如 Ubuntu 或 Red Hat Enterprise Linux) 中, 供应商提供的内核配置可用于运行大多数 DPDK 应用程序.
对于其它内核版本, 应该为 DPDK 启用的选项包括:
hugetlbfs
PROC_PAGE_MONITOR 支持
如果需要 HPET 支持, 则还应启用 HPET 和 HPET_MMAP 配置选项. 有关更多详细信息, 请参阅 "高精度事件定时器 (HPET) 功能" 部分.
2.3.2 在 Linux 环境中使用巨页(Hugepages)
用于数据包缓冲区的大内存池分配需要 Hugepage 支持(必须在正在运行的内核中启用 HUGETLBFS 选项, 如前一部分所示). 通过使用 Hugepage 分配, 需要更少的页面而使性能得以提高, 因此减少了 TLB(即转换检测缓冲区, 高速转换缓存), 这减少了将虚拟页面地址转换为物理页面地址所需的时间. 没有 Hugepage,TLB 发生高缺失率伴随着标准 4k 页面大小, 从而导致性能下降.
2.3.2.1 为 DPDK 的使用预留 Hugepages
应该在引导时或在系统引导后尽快完成 Hugepages 的分配, 以防止内存在物理内存中被碎片化. 要在引导时预留 Hugepages, 一个参数将在内核命令行上传递给 Linux 内核.
对于 2 MB 页面, 只需将 hugepages 选项传递给内核即可. 例如, 要预留 2 MB 的 1024 页, 使用:
hugepages=1024
其它 hugepage 尺寸, 例如 1G 页面大小必须明确指定, 也可以可选择的设置为系统的默认 hugepage 大小. 例如, 在四个 1G 页面的形式预留 4G 的 hugepage 内存, 下面的选项应该传递给内核:
default_hugepagesz=1G hugepagesz=1G hugepages=4
注意:
CPU 支持的 hugepage 大小可以通过 Intel 架构上的 CPU 标志确定. 如果存在 pse, 则支持 2M 的 hugepages; 如果存在 pdpe1gb, 则支持 1G 的 hugepages. 在 IBM Power 架构上, 支持的 hugepage 大小为 16MB 和 16GB.
注意:
对于 64 位应用程序, 如果平台支持它, 则建议使用 1GB 的 hugepages.
对于双 socket NUMA 系统, 在引导时预留的 hugepages 的数目通常在两个 socket 之间平均分配(假设两个 socket 上都有足够的内存).
有关这些和其它内核选项的更多详细信息, 请参阅 Linux 源代码树中的 Documentation/kernel-parameters.txt 文件.
##### 替代方案:
对于 2MB 页面, 系统启动后还可以选择分配 hugepages. 这是通过 echo /sys/devices / 目录中的 nr_hugepages 文件所需的 hugepages 数目来完成的. 对于单节点系统, 使用的命令如下(假定需要 1024 页):
echo 1024> /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
在 NUMA 机器上, 应该在单独的节点上明确分配页面:
- echo 1024> /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
- echo 1024> /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
注意:
对于 1G 页面, 系统启动后无法预留 hugepage 内存.
在 IBM POWER 系统上, 应将 nr_overcommit_hugepages 设置为与 nr_hugepages 相同的值. 例如, 如果所需的页数是 128, 则使用以下命令:
- echo 128> /sys/kernel/mm/hugepages/hugepages-16384kB/nr_hugepages
- echo 128> /sys/kernel/mm/hugepages/hugepages-16384kB/nr_overcommit_hugepages
2.3.3 在 DPDK 中使用 Hugepages
一旦预留了 hugepage 内存, 为了使内存可用于 DPDK, 请执行以下步骤:
mkdir /mnt/huge
mount -t hugetlbfs nodev /mnt/huge
通过将以下行添加到 / etc/fstab 文件, 可以在重新启动后使挂载点永久保存:
nodev /mnt/huge hugetlbfs defaults 0 0
对于 1GB 页面, 页面大小必须指定为挂载 (mount) 选项:
nodev /mnt/huge_1GB hugetlbfs pagesize=1GB 0 0
3. 从源码编译 DPDK 目标(target)
注意:
此过程的一部分也可以使用本文档的 "快速上手安装脚本" 部分中介绍的安装脚本来完成.
3.1 安装 DPDK 和浏览源码
首先, 解压缩并切入解压缩后的 DPDK 源码目录:
- tar xJf dpdk-<version>.tar.xz
- cd dpdk-<version>
DPDK 由几个目录组成:
lib:DPDK 库的源代码
drivers:DPDK 轮询模式驱动程序的源代码
app:DPDK 应用程序的源代码(自动测试)
examples:DPDK 应用程序示例的源代码
config,buildtools,mk: 与框架相关的 makefile, 脚本和配置
3.2 安装 DPDK 目标环境
DPDK 目标的格式: ARCH-MACHINE-EXECENV-TOOLCHAIN
这里:
ARCH 可以是: i686,x86_64,ppc_64,arm64
MACHINE 可以是: native,power8,armv8a
EXECENV 可以是: linuxapp,bsdapp
TOOLCHAIN 可以是: gcc,icc
要安装的目标取决于安装在主机上的 32 位和 / 或 64 位软件包和编译器. 可用的目标可以在 DPDK/config 目录中找到. 不应该使用 defconfig_前缀.
注意:
配置文件随 RTE_MACHINE 优化级别集 (optimization level set) 一起提供. 在配置文件中, RTE_MACHINE 配置值被设置为 native, 这意味着已编译的软件已针对其所构建的平台进行了调整. 有关此设置的更多信息及其可能值, 请参阅 "DPDK 程序员指南(Programmers Guide)".
使用 Intel?C++ 编译器 (icc) 时, 应分别调用以下命令之一, 以分别使用 64 位或 32 位. 请注意, shell 脚本更新 $PATH 变量, 因此不应在同一个会话中执行. 另外, 请核实编译器的安装目录, 因为路径可能会不同:
- source /opt/intel/bin/iccvars.sh intel64
- source /opt/intel/bin/iccvars.sh ia32
要安装和制作目标, 请在顶级 DPDK 目录中使用 make install T=<target> 命令.
例如, 要使用 icc 编译 64 位目标, 请运行:
make install T=x86_64-native-linuxapp-icc
要使用 gcc 编译 32 位版本, make 命令应该是:
make install T=i686-native-linuxapp-gcc
如果要在目标构建之前预处理它, 请使用 make config T=<target> 命令, 例如在编译之前需要进行配置更改:
make config T=x86_64-native-linuxapp-gcc
警告:
任何要使用的内核模块, 例如 igb_uio,kni, 必须使用与目标上运行的相同的内核下进行编译. 如果 DPDK 未在目标机器上构建, 则应使用 RTE_KERNELDIR 环境变量将编译指向要在目标机器上使用的内核版本的拷贝.
一旦目标环境被创建, 用户可以切到目标环境目录并继续进行代码更改和重新编译. 用户也可以通过编辑构建 (build) 目录中的. config 文件来修改编译时 DPDK 配置. (这是来自顶层 config 目录的 defconfig 文件的一个用来构建本地的拷贝).
- cd x86_64-native-linuxapp-gcc
- vi .config
- make
另外, make clean 命令可以用于删除任何已存在的编译文件, 以便后续的全面干净重新构建代码.
3.3 浏览已安装的 DPDK 环境目标
创建目标后, 它将包含所有库, 包括用于构建客户应用程序所需的 DPDK 环境的轮询模式驱动程序和头文件. 另外, test 和 testpmd 应用程序是在 build/app 目录下构建的, 可用于测试. kmod 目录也存在, 其中包含可能需要加载的内核模块.
4. Linux 驱动程序
为了正常工作, 不同的 PMD(译者注: 物理介质关联层接口)可能需要不同的内核驱动程序. 取决于正在使用的 PMD, 相应的内核驱动程序应该加载并绑定到网络端口.
4.1 UIO
一个用于设置设备的小的内核模块, 将设备内存映射到用户空间并注册中断. 在许多情况下, Linux 内核中包含的标准 uio_pci_generic 模块可以提供 uio 功能. 该模块可以使用以下命令加载:
sudo modprobe uio_pci_generic
注意:
uio_pci_generic 模块不支持虚拟功能 (virtual functions) 的创建.
作为 uio_pci_generic 的替代方案, DPDK 还包含 igb_uio 模块, 该模块可以在上面提到的 kmod 子目录中找到. 它可以如下所示加载:
- sudo modprobe uio
- sudo insmod kmod/igb_uio.ko
注意:
对于一些不支持传统中断的设备, 例如 虚拟功能 (VF) 设备, 可能需要使用 igb_uio 模块来代替 uio_pci_generic.
注意:
如果启用 UEFI 安全引导, 则 Linux 内核可能会禁止在系统上使用 UIO. 因此, 由 DPDK 使用的设备应绑定到 vfio-pci 内核模块, 而不是 igb_uio 或 uio_pci_generic. 有关更多详细信息, 请参阅下面的 "与内核模块绑定和解除绑定网络端口".
DPDK 1.7 以上版本提供了 VFIO 支持, 因此对于支持使用 VFIO 的平台, 使用 UIO 是可选的.
4.2 VFIO
依靠 IOMMU 保护, 与 UIO 相比, 它是更强大, 更安全的驱动程序. 要使用 VFIO, 必须加载 vfio-pci 模块:
sudo modprobe vfio-pci
请注意, 为了使用 VFIO, 您的内核必须支持它. VFIO 内核模块自 Linux 内核 3.6.0 版以来已包含在内核中, 通常是默认存在的, 但请查阅您的发行版文档以确保是这样的.
此外, 要使用 VFIO, 内核和 BIOS 必须支持并配置为使用 IO 虚拟化(如 Intel?VT-d).
注意:
vfio-pci 模块不支持虚拟功能 (virtual functions) 的创建.
为了在作为非特权用户运行 DPDK 应用程序时正确操作 VFIO, 还应该设置正确的权限. 这个可以通过使用 DPDK 设置脚本 (调用位于 usertools 目录下的脚本 dpdk-setup.sh) 来完成.
注意:
VFIO 可以在没有 IOMMU 的情况下使用. 虽然这与使用 UIO 一样不安全, 但它确实使用户能够在 IOMMU 不可用的情况下保持 VFIO 具有的设备访问和编程的程度.
4.3 分叉驱动程序(Bifurcated Driver )
使用分叉驱动程序的 PMD 与设备内核驱动程序共存. 在这种模式下, NIC 由内核控制, 而数据路径则由 PMD 直接在设备上执行.
这种模式具有以下优点:
内存管理和隔离是由内核完成的, 因此它是安全和强大的.
它使用户能够在相同的网络端口上运行 DPDK 应用程序时使用传统的 Linux 工具, 例如 ethtool 或 ifconfig.
它使 DPDK 应用程序只能过滤部分流量, 而其余部分将由内核驱动程序定向和处理.
关于分叉驱动程序的更多信息可以在 "Mellanox Bifurcated DPDK PMD" 中找到.
4.4 与内核模块绑定和解除绑定网络端口
注意:
使用分叉驱动程序的 PMD 不应从其内核驱动程序中解除绑定. 本部分适用于使用 UIO 或 VFIO 驱动程序的 PMD.
从版本 1.4 开始, DPDK 应用程序不再自动解除所有支持的网络端口与正在使用的内核驱动程序的绑定. 相反, 如果正在使用的 PMD 使用 UIO 或 VFIO 驱动程序, 那么 DPDK 应用程序要使用的所有端口都必须在应用程序运行之前绑定到 uio_pci_generic,igb_uio 或 vfio-pci 模块. 对于此类 PMD,Linux* 控制下的任何网络端口都将被忽略, 并且不能被应用程序使用.
要将端口绑定到 uio_pci_generic,igb_uio 或 vfio-pci 模块以使用 DPDK, 然后将端口返回到 Linux* 控制, 则在 usertools 子目录中提供了名为 dpdk-devbind.py 的应用程序脚本. 此应用可用于提供系统上网络端口当前状态的视图, 以及从不同内核模块 (包括 uio 和 vfio 模块) 绑定和取消绑定这些端口. 以下是脚本如何使用的一些示例. 脚本及其参数的完整描述可以通过使用 --help 或 --usage 选项调用脚本来获得. 请注意, 在运行 dpdk-devbind.py 脚本之前, 应将要使用的 uio 或 vfio 内核模块加载到内核中.
警告:
由于 VFIO 的工作方式, VFIO 可以使用哪些设备有一定的限制. 主要归结为 IOMMU 组的工作方式. 任何虚拟功能设备都可以与 VFIO 一起使用, 但物理设备也将需要绑定到 VFIO 的所有端口, 或者其中一些虚拟功能设备绑定到 VFIO, 而其他虚拟功能设备则不需要任何绑定.
如果您的设备位于 PCI-to-PCI 桥之后, 则该桥将成为您的设备所在的 IOMMU 组的一部分. 因此, 桥驱动程序也应该从桥 PCI 设备解除绑定, 以便 VFIO 与在桥后面的设备一起工作.
警告:
虽然任何用户都可以运行 dpdk-devbind.py 脚本来查看网络端口的状态, 但绑定或解除绑定网络端口需要 root 权限.
要查看系统中所有网络端口的状态, 请执行以下操作:
./usertools/dpdk-devbind.py --status
Network devices using DPDK-compatible driver
- ============================================
- 0000:82:00.0 '82599EB 10-GbE NIC' drv=uio_pci_generic unused=ixgbe
- 0000:82:00.1 '82599EB 10-GbE NIC' drv=uio_pci_generic unused=ixgbe
- Network devices using kernel driver
- ===================================
- 0000:04:00.0 'I350 1-GbE NIC' if=em0 drv=igb unused=uio_pci_generic *Active*
- 0000:04:00.1 'I350 1-GbE NIC' if=eth1 drv=igb unused=uio_pci_generic
- 0000:04:00.2 'I350 1-GbE NIC' if=eth2 drv=igb unused=uio_pci_generic
- 0000:04:00.3 'I350 1-GbE NIC' if=eth3 drv=igb unused=uio_pci_generic
- Other network devices
- =====================
- <none>
要将设备 eth1,"04:00.1" 绑定到 uio_pci_generic 驱动程序:
./usertools/dpdk-devbind.py --bind=uio_pci_generic 04:00.1
或者可选地,
./usertools/dpdk-devbind.py --bind=uio_pci_generic eth1
要将设备 82:00.0 恢复到其原来的内核绑定:
./usertools/dpdk-devbind.py --bind=ixgbe 82:00.0
5. 编译和运行示例应用程序
本章介绍如何在 DPDK 环境中编译和运行应用程序. 它还提供了一个指向示例应用程序存储位置的指针.
注意:
此过程的一部分也可以使用本文档中 "快速上手安装脚本" 部分所述的安装脚本来完成.
5.1 编译一个示例应用程序
一旦创建了 DPDK 目标环境目录(例如 x86_64-native-linuxapp-gcc), 它将包含构建应用程序所需的所有库和头文件.
- cd examples/helloworld/
- export RTE_SDK=$HOME/DPDK
- export RTE_TARGET=x86_64-native-linuxapp-gcc
- make
- CC main.o
- LD helloworld
- INSTALL-APP helloworld
- INSTALL-MAP helloworld.map
- ls build/app
- helloworld helloworld.map
- export RTE_SDK=/home/user/DPDK
- cp -r $(RTE_SDK)/examples/helloworld my_rte_app
- cd my_rte_app/
- export RTE_TARGET=x86_64-native-linuxapp-gcc
- make
- CC main.o
- LD helloworld
- INSTALL-APP helloworld
- INSTALL-MAP helloworld.map
- [--socket-mem=MB,...] [-d LIB.so|DIR] [-m MB] [-r NUM] [-v] [--file-prefix] \
- [--proc-type <primary|secondary|auto>]
- ----------------------------------
- #### 5.2.1 应用程序的逻辑核使用(原文: Logical Core Use by Applications)
- sudo yum install hwloc
- ./lstopo
- ----------------------------------
- ----------------------------------
- #### 5.2.2 应用程序的巨页 (原文: Hugepage) 内存使用
- --------------------------------------------------
- --------------------------------------------------
- ## 6. 启用附加功能
- ### 6.1 高精度事件定时器 (HPET) 功能
- #### 6.1.1 BIOS 支持
- ----------------------------------
- #### 6.1.3 在 DPDK 中启用 HPET
- ----------------------------------
- ### 6.2 运行没有 Root 权限的 DPDK 应用程序
- ----------------------------------
- ----------------------------------
- ### 6.3 电源管理和省电功能
- Advanced
- -> Processor Configuration
- Advanced
- -> Processor Configuration
- -> Processor Configuration
- -> Processor C6
- ### 6.4 使用 Linux 核隔离 (原文: Linux Core Isolation) 来减少上下文切换
- isolcpus=2,4,6
- ### 6.5 加载 DPDK KNI 内核模块
- ----------------------------------
- ### 6.6 使用 Linux IOMMU Pass-Through(译者注: 透传)通过 Intel? VT-d 运行 DPDK
- - IOMMU_SUPPORT
- - IOMMU_API
- - INTEL_IOMMU
- --------------------------------------------------
- --------------------------------------------------
- ## 7. 快速上手安装脚本
- ----------------------------------
- source usertools/dpdk-setup.sh
- Step 1: Select the DPDK environment to build
- [1] i686-native-linuxapp-gcc
- [2] i686-native-linuxapp-icc
- [3] ppc_64-power8-linuxapp-gcc
- [4] x86_64-native-bsdapp-clang
- [5] x86_64-native-bsdapp-gcc
- [6] x86_64-native-linuxapp-clang
- [7] x86_64-native-linuxapp-gcc
- [8] x86_64-native-linuxapp-icc
- [11] Insert IGB UIO module
- [12] Insert VFIO module
- [13] Insert KNI module
- [19] Setup VFIO permissions
- Step 3: Run test application for linuxapp environment
- [20] Run test application ($RTE_TARGET/app/test)
- [21] Run testpmd application in interactive mode ($RTE_TARGET/app/testpmd)
- Step 4: Other tools
- Step 5: Uninstall and system cleanup
- [23] Uninstall all targets
- [25] Remove IGB UIO module
- [26] Remove VFIO module
- [27] Remove KNI module
- [28] Remove hugepage mappings
- [29] Exit Script
- -----------------------------
- Option:
- Option: 9
- ================== Installing x86_64-native-linuxapp-gcc
- Configuration done
- == Build lib
- ...
- Build complete
- ----------------------------------
- Option: 15
- enter '64' to reserve 64 * 2MB pages on each node
- Number of pages for node0: 1024
- Number of pages for node1: 1024
- Reserving hugepages
- Option: 20
- Enter hex bitmask of cores to execute test app on
- Example: to execute app on cores 0 to 7, enter 0xff
- bitmask: 0x01
- Launching app
- ...
- EAL: Master core 0 is ready (tid=1b2ad720)
- RTE>>
- ### 7.3 应用程序
- cd helloworld/
- make
- CC main.o
- LD helloworld
- INSTALL-APP helloworld
- INSTALL-MAP helloworld.map
- sudo ./build/app/helloworld -l 0-3 -n 3
- [sudo] password for rte:
- EAL: Master core 0 is ready (tid=de25b700)
- EAL: Core 1 is ready (tid=5b7fe700)
- EAL: Core 3 is ready (tid=5a7fc700)
- EAL: Core 2 is ready (tid=5affd700)
- hello from core 1
- hello from core 2
- hello from core 3
- hello from core 0
- --------------------------------------------------
- --------------------------------------------------
- ## 8. 如何使 Intel 平台上的 NIC 获得最佳性能
- Locator: DIMM_A1
- Bank Locator: NODE 1
- Locator: DIMM_A2
- Bank Locator: NODE 1
- Locator: DIMM_B1
- Bank Locator: NODE 1
- Locator: DIMM_B2
- Bank Locator: NODE 1
- ...
- Locator: DIMM_G1
- Bank Locator: NODE 2
- Locator: DIMM_G2
- Bank Locator: NODE 2
- Locator: DIMM_H1
- Bank Locator: NODE 2
- Locator: DIMM_H2
- Bank Locator: NODE 2
- Speed: Unknown
- ...
- Speed: 2133 MHz
- iommu=pt intel_iommu=on
- ### 8.2 运行 DPDK 之前的配置
- cd dpdk_folder
- make install T=x86_64-native-linuxapp-gcc -j
- umount
- awk '/hugetlbfs/ {print $2}' /proc/mounts
- cd dpdk_folder
- usertools/cpu_layout.py
- 82:00.0 Ethernet [0200]: Intel XL710 for 40GbE QSFP+ [8086:1583]
- 82:00.1 Ethernet [0200]: Intel XL710 for 40GbE QSFP+ [8086:1583]
- 85:00.0 Ethernet [0200]: Intel XL710 for 40GbE QSFP+ [8086:1583]
- 85:00.1 Ethernet [0200]: Intel XL710 for 40GbE QSFP+ [8086:1583]
- --------------------------------------------------
- --------------------------------------------------
来源: http://www.bubuko.com/infodetail-2574085.html