https://doc.dpdk.org/guides/linux_gsg/linux_eal_parameters.html
本文档包含所有 EAL 参数的列表。这些参数可以由在 Linux 上运行的任何 DPDK 应用程序使用。
1、常用 EAL 参数
以下 EAL 参数对于 DPDK 支持的所有平台都是通用的。
1、Lcore相关选项
1、-c
设置要在其上运行的内核的十六进制位掩码。
2、-l
要在其上运行的核心列表。参数格式为 [-c2][,c3[-c4],…],其中 c1、c2 等是介于 0 和 128 之间的核心索引。
3、–lcores
将内核集映射到物理 CPU 集。
参数格式为:
<lcores[@cpus]>[<,lcores[@cpus]>...]
核心和 CPU 列表按组内 ( 和 ) 分组。- 字符用作范围分隔符,而 用作单个数字分隔符。对于单个元素组,可以省略分组 ()。如果 cpu 和 lcore 具有相同的值,则可以省略 @。
注意:在给定的实例中,只能使用一个核心选项 --lcores、-l 或 -c。
4、–main-lcore
用作主 ID 的核心 ID。
5、-s
要用作服务核心的内核的十六进制位掩码。
2、设备相关选项
1、-b, --block <[domain:]bus:devid.func>
跳过探测 PCI 设备以防止 EAL 使用它。允许多个 -b 选项。
注意:阻止列表不能与允许列表 -a 选项一起使用。
2、-a, --allow <[domain:]bus:devid.func>
将 PCI 设备添加到要探测的设备列表中。
注意:允许列表不能与阻止列表 -b 选项一起使用。
3、–vdev
使用以下格式添加虚拟设备:
<driver><id>[,key=val, ...]
例如:
--vdev 'net_pcap0,rx_pcap=input.pcap,tx_pcap=output.pcap'
4、-d
加载外部驱动程序。参数可以是单个共享对象文件,也可以是包含多个驱动程序共享对象的目录。允许多个 -d 选项。
5、–no-pci
禁用 PCI 总线。
3、与多处理相关的选项
1、–proc-type <primary|secondary|auto>
设置当前进程的类型。
2、–base-virtaddr
尝试为主 DPDK 进程的所有内存映射使用不同的起始地址。如果辅助进程由于地址映射中的冲突而无法启动,这会很有帮助。
4、内存相关选项
1、-n
设置要使用的内存通道数。
2、-r
设置内存列数(默认自动检测)。
3、-m
启动时要预分配的内存量。
4、–in-memory
不要创建任何共享数据结构并完全在内存中运行。暗示 --no-shconf 和(如果适用) --huge-unlink。
5、–iova-mode <pa|va>
强制 IOVA 模式为特定值。
6、–huge-worker-stack[=size]
从巨大的页面内存中分配工作线程堆栈内存。堆栈大小默认为系统 pthread 堆栈大小,除非指定了可选大小(以 KB 为单位)。
5、调试选项
1、–no-shconf
未创建共享文件(意味着没有辅助进程支持)。
2、–no-huge
使用匿名内存而不是大页面(意味着没有辅助进程支持)。
3、–log-level type:val
指定特定组件的日志级别。例如:
--log-level lib.eal:debug
可以多次指定。
4、–trace=
根据正则表达式跟踪名称启用跟踪。默认情况下,跟踪处于禁用状态。用户必须指定此选项才能启用跟踪。例如:
仅适用于 EAL 的全局跟踪配置:
--trace=eal
所有组件的全局跟踪配置:
--trace=.*
可以多次指定,最多指定 32 次。
5、–trace-dir=
指定跟踪输出的跟踪目录。例如:
配置 /tmp/ 作为跟踪输出目录:
--trace-dir=/tmp
默认情况下,将在主目录中创建跟踪输出,并且只能指定一次参数。
6、–trace-bufsz=
为每个线程的跟踪输出指定分配内存的最大大小。有效单位可以是 B 或 K 或 M 分别表示字节、KB 和 MBytes。例如:
将 2MB 配置为跟踪输出文件的最大大小:
-trace-bufsz=2M
默认情况下,跟踪输出文件的大小为 1MB,并且只能指定一次参数。
7、–trace-mode=<o[verwrite] | d[iscard] >
指定跟踪输出文件的更新模式。当文件大小达到其最大限制时,可以包装或丢弃文件的更新。例如:
放弃跟踪输出文件的更新:
--trace-mode=d or --trace-mode=discard
默认模式为覆盖,参数只能指定一次。
6、其他选项
1、-h, --help
显示列出所有 EAL 参数的帮助消息。
2、-v
在启动时显示版本信息。
3、–mbuf-pool-ops-name
供 mbuf 使用的池操作名称。
4、–telemetry
启用遥测(默认启用)。
5、–no-telemetry
禁用遥测。
6、–force-max-simd-bitwidth=
指定要处理的最大 SIMD 位宽大小。这限制了采用的矢量路径(如果有),因为采用的任何路径都必须使用低于最大位宽限制的位宽。例如,要允许所有 SIMD 位宽达到 AVX-512(包括 AVX-512):
--force-max-simd-bitwidth=512
以下示例显示如何将位宽限制为 64 位以禁用所有矢量代码:
--force-max-simd-bitwidth=64
要禁用最大 SIMD 位宽限制,请执行以下操作:
--force-max-simd-bitwidth=0
2、特定于 Linux 的 EAL 参数
除了常见的 EAL 参数外,还有特定于 Linux 的 EAL 参数。
1、设备相关选项
1、–create-uio-dev
为绑定到内核驱动程序的设备创建 /dev/uioX 文件igb_uio(通常由igb_uio驱动程序本身完成)。
2、–vmware-tsc-map
使用 VMware TSC 映射而不是本机 RDTSC。
3、–no-hpet
请勿使用 HPET 计时器。
4、–vfio-intr <legacy|msi|msix>
对绑定到 VFIO 内核驱动程序的设备使用指定的中断模式。
5、–vfio-vf-token
对绑定到 VFIO 内核驱动程序的设备使用指定的 VF 令牌。
2、与多处理相关的选项
1、–file-prefix
对 DPDK 进程使用不同的共享数据文件前缀。此选项允许在不同的前缀下运行多个独立的 DPDK 主/辅助进程。
3、内存相关选项
1、–legacy-mem
使用传统的 DPDK 内存分配模式。
2、–socket-mem
为每个socket预分配指定的内存量。该参数是以逗号分隔的值列表。例如:
--socket-mem 1024,2048
这将在socket 0 上分配 1 GB 内存,在socket 1 上分配 2048 MB 内存。
3、–socket-limit
对内存使用设置每个socket的上限(仅限非传统内存模式)。0 将禁用特定套接字的限制。
4、–single-file-segments
在 hugetlbfs 中创建更少的文件(仅限非传统模式)。
5、–huge-dir
使用指定的 hugetlbfs 目录而不是自动检测的目录。这可以是 hugetlbfs 挂载点中的子目录。
6、–huge-unlink[=existing|always|never]
没有 --huge-unlink 选项或 --huge-unlink=existing 是默认值:现有的 hugepage 文件被删除并重新创建,以确保内核清除内存并防止任何数据泄漏。
使用 --huge-unlink(无值)或 --huge-unlink=always,在映射它们之前也会删除 hugepage 文件,以便应用程序不会在 hugetlbfs 中留下任何文件。此模式意味着没有多进程支持。
当指定 --huge-unlink=never 时,现有的 hugepage 文件永远不会被删除,而是重新映射,允许 hugepage 重用。这样可以节省初始化时清除内存的时间,从而加快重新启动速度,但以后可能会减慢清零分配的速度。重复使用的 Hugepages 可能包含以前使用它们的进程的数据,这可能是一个安全问题。在此模式下创建的 Hugepage 文件也不会在释放从它们映射的所有 Hugepages 文件时被删除,这允许在重新启动后重用这些文件。
7、–match-allocations
将巨大的页面完全按照最初分配的方式释放回系统。
4、其他选项
1、–syslog
设置系统日志功能。有效的系统日志工具包括:
auth
cron
daemon
ftp
kern
lpr
mail
news
syslog
user
uucp
local0
local1
local2
local3
local4
local5
local6
local7