DOCA Tools
DOCA工具是一组可执行文件/脚本,所有工具都和DOCA一起安装,作为doc -tools包的一部分,可以直接从终端访问,也可以在/opt/mellanox/DOCA/tools中找到。
DOCA Bench
CLI name: doca_bench
DOCA Bench是一个允许用户评估DOCA应用程序性能的工具,允许用户以合理的准确性评估DOCA应用程序的性能。它提供了一个灵活的体系结构,可以通过多核扩展来评估多个特性,从而提供详细的吞吐量和延迟分析。该工具可用于评估多个DOCA操作的性能,深入了解复杂DOCA操作的每个阶段,并了解缓冲区大小、scaling和GGA配置等项目如何影响吞吐量和时延。
支持的feature
DOCA Bench是为所有BlueField加速器设计的统一测试工具。因此,它提供了以下主要feature:
l BF上执行,利用本地ARM core和GGA;
l host(x86)上执行,利用x86 core或通过PCIe利用BlueField上的GGA;
l 支持以下DPU feature:
n DOCA AES GCM
n DOCA Comch
n DOCA Compress
n DOCA DMA
n DOCA EC
n DOCA Eth
n DOCA RDMA
n DOCA SHA
l 多核/多线程支持;
l 基于时间、任务数量等调度;
l 能使用GGA构造复杂的pipeline;
l 各种数据源(随机数据、文件数据、文件组等);
l 远程内存操作;
l 使用host x86平台上的数据作为GGA的输入;
l 输出到屏幕或CSV;
l 查询支持的软硬件特性;
l 参数可以指定起始值和结束值以及增量;
l 为每个GGA实例设置属性,从而精细控制GGA操作。
安装
在DOCA-for-Host和DOCA BlueField Arm包安装后,DOCA Bench位于/opt/mellanox/doca/tools目录下。
前提条件
DOCA 2.7.0和更高版本;
操作模式
DOCA Bench可以测量吞吐量(带宽)和时延。
吞吐量测试
在这种模式下,DOCA Bench测量给定pipeline的最大性能。在执行结束时,提供了一个简短的摘要以及更详细的统计数据:
时延测试
DOCA Bench测量从提交作业到接收响应之间所花费的时间。
DOCA Bench提供了两种不同类型的延迟测量:
l Bulk latency mode-并行提交一组作业以获得最大吞吐量,时延为第一个作业提交和最后一个作业完成之间的时间;
l Precision latency mode-同一时刻只有一个作业被提交和测量;
Bulk Latency
这种延迟模式有效地以全速运行pipeline,试图保持最大吞吐量,同时还记录提交作业的时延数据。为了记录时延,当在最大吞吐量下操作时,时延数据放以group或bucket为单位进行(而不是记录每个单独的作业延迟)。使用这种方法,用户可以避免每秒记录数百万个延迟数据造成大量内存和CPU开销(否则会显著降低性能)。
由于每个pipeline操作不同,因此具有不同的时延特征,因此用户可以提供时延度量的边界。DOCA Bench在内部创建了100个桶,用户可以指定每个桶的起始值和宽度或大小。
l 第一个桶包含所有执行速度快于起始周期的作业;
l 最后一个bucket包含花费超过允许的最大时间的作业计数;
命令行参数latency-bucket-range用于提供两个参数,分别表示第一个桶的起始时间段和每个桶的宽度。例如, latency-bucket-range 10us,100us将从测量响应时间<10μs的最低桶开始,然后是100μs宽的100个桶,最后一个桶的结果耗时超过10010μs。
由批量模式生成的报告以两种方式可视化呈现:
1. 提供了一个条形图来直观地显示latency-bucket-range选项指定范围内的分布;
2. 给出了每个桶的作业数量的细分;
Precision Latency
这种延迟模式一次只在一个作业上运行。以大大降低吞吐量为代价,这允许精确地记录最小延迟。如下所示,生成的统计信息是精确的,包括各种字段,如最小值、最大值、中位数和百分位数值。
运行
无论在x86 host还是BlueField Arm上执行DOCA Bench, DOCA Bench的行为都是相同的。所测量的性能取决于环境。目前只支持x86 host上执行。
pipeline
DOCA Bench是一种高度灵活的工具,能够配置操作的发生方式和顺序。为了实现这一点,DOCA Bench使用了一个操作pipeline,称为“step”。这些step可以是一个特定的功能(例如,以太网接收、SHA散列生成、数据压缩)。因此,一个step pipeline可以完成许多顺序操作。DOCA Bench可以测量这些pipeline的吞吐量或时延,无论运行在单个或多个core/线程上。目前,DOCA一次只支持运行一个pipeline。
Warm-up Period
为了确保正确的测量,pipeline必须“预热”(即,任何初始内存、缓存和硬件子系统必须在实际性能测量开始之前运行)。默认情况下,在开始测量之前,通过pipeline运行大约100个作业。
默认参数
DOCA Bench有大量的参数,但是为了简化执行,在开始性能测量时只需要提供几个参数。因此,各种参数都有默认值,这在大多数情况下应该是足够的。为了优化性能,用户应该密切关注任何可能影响管道运行的默认参数。当执行时,DOCA Bench报告所有参数和配置值的完整列表。
性能优化
为了获得最大的性能,对于任何给定的环境都需要进行一定的调优。虽然超出了本文档的范围,但建议用户:
l 避免使用CPU 0,因为大多数操作系统进程和中断请求(IRQ)处理程序都被安排在这个核心上执行;
l 在内核引导参数中启用CPU/IRQ隔离,以便将内核活动从执行性能测试的所有内核中删除;
l 在主机上,确保在寻址BlueField时不跨NUMA;
l 了解场景的内存分配需求,以避免过度分配或遇到内存不足的情况;
CPU core和线程的指定
DOCA Bench提供了指定core数量和每个core要创建的线程数量的功能,以最大限度地增加提交到给定pipeline的作业数量。
在选择CPU或线程的数量时,应注意以下事项:
l 跨NUMA区域(即,与BlueField连接的NUMA区域不同)的core上的线程性能交底,时延较高;
l core 0通常是操作系统最常用的,应该避免使用;
l 进程在多个CPU core之间切换,由于进程切换开销会导致性能下降或更高的延迟;
l 通过--core-mask,--core-list,--core-count参数指定CPU core,通过--threads-per-core参数指定线程。
输入数据的选择
DOCA Bench可以用以下数据作为输入:
l file:单个文件作为输入数据;
l file set:多个文件作为输入数据,file set本身是一个文件,文件内容是多个文件组成的list,每行代表一个文件,依次作为任务的输入数据,每个文件的内容将被读入单独的buffer。
l 随机数据:在压缩类操作中可能性能较低,因为文件中有很多重复数据,而随机数据相反。
Capabilities Print Tool
CLI name: doca_caps
该工具用于打印可访问的device和它们的representor device,以及它们的capabilities,可访问的lib。要求DOCA 2.6.0及其以上版本。
此工具可以在host或Arm端执行。该工具支持以下功能:
l DOCA设备列表-打印每个可用DOCA设备的PCIe设备及其capabilities;
l DOCA representtor设备列表-对于每个DOCA设备,打印每个可用DOCA representtor设备的PCIe设备及其capabilities;
l DOCA lib列表——打印当前操作系统支持的可用DOCA lib,以及它们在特定操作系统上的可用性;
l DOCA lib功能——对于每个DOCA设备,打印它在每个DOCA lib中支持的功能;
运行
l 打印所有可用的DOCA设备和它们的capabilities:
输出如下:
l 打印所有可用的DOCA representor设备和它们的capabilities:
该命令只能在ARM端运行。
输出如下:
l 打印特定设备的能力,指定参数--pci-addr;
l 打印所有支持的lib及其可用状态:
输出如下:
l 打印特定lib可用状态,指定参--lib;
l 打印打印所有信息;
DOCA Comm Channel Admin Tool
Comm Channel Admin Tool用于打印DOCA Comch Channel连接的快照:
l 在BlueField Arm端,它包括DOCA Comch server及其当前连接信息;
l 在host端,它包括所有活动的client连接和它们所连接的server;
l 只报告client-to-server control channel,不包括快路径的producer/consumer channel;
只支持linux,DOCA版本至少是2.7.0。
运行
Comm Channel Admin Tool可以在host或Arm cpu上执行。默认情况下,该工具扫描所有可用的PCIe插槽以检测支持的DOCA设备并报告任何可用的Comch信息。运行命令如下: