RDMA性能测试工具集preftest_README
文章目录
- 1 概述
- 2 安装
- 3 测试方法说明
- 4 测试说明
- 5 运行测试
- 所有测试的通用选项
- 延迟测试选项
- 带宽测试选项
- ib_send_lat(发送延迟测试)和 ib_send_bw(发送带宽测试)的选项
- ib_atomic_lat(原子延迟测试)和 ib_atomic_bw(原子带宽测试)的选项
- 原始以太网发送带宽测试的选项
测试工具: https://github.com/linux-rdma/perftest
1 概述
preftest(Performance Test)是一组基于uverbs编写的测试工具集,旨在用作性能微基准。这些测试可以用作硬件或软件调优以及功能测试。
uverbs是RDMA(Remote Direct Memory Access)的一种编程接口,它提供了底层、高效的编程接口,可以控制RDMA网络适配器中的硬件资源、创建和管理RDMA操作队列等功能,同时verbs接口也提供了一些原子操作、随机访问、远程直接内存访问等工具,从而实现了高效的、无锁的、直接内存访问 。
该测试工具集包含了带宽和延迟基准测试,例如:
- Send----
ib_send_bw和ib_send_lat - RDMA Read----
ib_read_bw和ib_read_lat - RDMA Write----
ib_write_bw和ib_write_lat - RDMA Atomic----
ib_atomic_bw和ib_atomic_lat - Native Ethernet (when working with MOFED2)----
raw_ethernet_bw和raw_ethernet_lat
2 安装
在克隆完仓库后,perftest的目录就会出现在你当前的目录下。
克隆仓库举例:
git clone <URL>
git clone https://github.com/linux-rdma/perftest.git
在执行完克隆后,执行以下命令:
-
cd perftest/ -
./autogen.sh -
./configure如果想在特定的目录中安装,可以使用–prefix=,例如:./configure --prefix=
-
make -
make install
3 测试方法说明
基准测试使用CPU周期计数器获取时间戳,而无需上下文切换。然而,某些CPU架构(例如,英特尔80486或更早的PPC)并不具备这种功能。
延迟基准测试测量往返时间,但报告一半作为单向延迟。这意味着结果可能不适用于非对称配置。
在所有单向带宽基准测试中,客户端测量带宽。在双向带宽基准测试中,每个端测量它发起的流量的带宽,并在测量周期结束时,服务器将结果报告给客户端,客户端将它们组合在一起。
延迟测试报告最小、中位数和最大延迟结果。与平均延迟测量相比,中位数延迟通常对高延迟变化更不敏感。通常,由于预热效应,测量的第一个值是最大值。
长采样周期对测量精度影响非常有限。默认值为1000次迭代,这已经相当不错了。请注意,程序会保留与迭代次数成比例的内存占用的数据结构。设置非常高的迭代次数可能会对被测设备的性能产生负面影响,而这些影响与实际测试无关。如果必须使用高迭代次数,建议使用-N标志(No Peak)。
带宽基准测试可以运行多次迭代,也可以固定持续时间运行。使用-D标志指示测试运行指定的秒数。–run_infinitely标志指示程序一直运行,直到用户中断,并每5秒打印一次测量到的带宽。
延迟基准测试中的“-H”选项可以输出结果的直方图。请参考xgraph、ygraph、r-base(http://www.r-project.org/)、PSPP或其他统计分析程序。
重要提示:当在Infiniband链路上运行基准测试时,必须在开始基准测试之前在交换机或链路中的节点之一上运行子网管理器。
测试的架构包括:i686、x86_64和ia64。
4 测试说明
基准测试生成操作的合成流,这对于硬件和软件基准测试和分析非常有用。基准测试不是为模拟任何实际的应用流量而设计的。实际的应用流量可能受到许多参数的影响,因此仅基于这些基准测试的结果可能无法预测。
- ib_send_lat:使用发送事务进行延迟测试
- ib_send_bw:使用发送事务进行带宽测试
- ib_write_lat:使用RDMA写事务进行延迟测试
- ib_write_bw:使用RDMA写事务进行带宽测试
- ib_read_lat:使用RDMA读事务进行延迟测试
- ib_read_bw:使用RDMA读事务进行带宽测试
- ib_atomic_lat:使用原子事务进行延迟测试
- ib_atomic_bw:使用原子事务进行带宽测试
原始以太网接口基准测试:
- raw_ethernet_send_lat:在原始以太网接口上进行延迟测试
- raw_ethernet_send_bw:在原始以太网接口上进行带宽测试
5 运行测试
前提条件:
- 内核版本为2.6
- (内核模块)与libibverbs匹配
- (内核模块)与librdmacm匹配
- (内核模块)与libibumad匹配
- (内核模块)与libmath (lm)匹配
- (Linux内核模块)与pciutils (lpci)匹配。
服务器:使用 ./<test name> <options> 命令启动服务器,其中 <test name> 是测试的名称,<options> 是一些选项参数。
客户端:使用 ./<test name> <options> <server IP address> 命令启动客户端,其中 <test name> 是测试的名称,<options> 是一些选项参数,<server IP address> 是服务器的IP地址。
注意事项:
-
<server address>可以是IPv4或IPv6地址。如果配置了IPoIB,可以使用 IPoIB 地址。IPoIB(Internet Protocol over InfiniBand),指利用物理IB网络(包括服务器上的IB卡、IB连接线、IB交换机等)通过IP协议进行连接,并进行数据传输。
它提供了基于RDMA之上的IP网络模拟层,允许应用无修改的运行在InfiniBand网络上。但是,IPoIB性能比RDMA通信方式性能要低,大多数应用都会采用RDMA方式获取高带宽低延时的收益,少数的关键应用会采用IPoIB方式通信。
-
--help选项可以列出可用的选项。
重要提示:必须将相同的选项传递给服务器和客户端。
所有测试的通用选项
-h, --help:显示帮助信息。-p, --port=<port>:在端口 上监听或连接到端口(默认为 18515)。-R, --rdma_cm:使用 rdma_cm 连接 QPs 并在这些 QPs 上运行测试。-z, --com_rdma_cm:与 rdma_cm 模块通信以交换数据 - 使用常规 QPs。-m, --mtu=<mtu>:QP MTU 大小(默认为从 ibv_devinfo 获取的活动 MTU)。-c, --connection=<type>:连接类型 RC/UC/UD/XRC/DC/SRD(默认为 RC)。-d, --ib-dev=<dev>:使用 IB 设备 (默认为找到的第一个设备)。-i, --ib-port=<port>:使用 IB 设备的网络端口 (默认为 1)。-s, --size=<size>:要交换的消息大小(默认为 1)。-a, --all:从 2 运行到 2^23。-n, --iters=<iters>:交换次数(至少为 100,默认为 1000)。-x, --gid-index=<index>:测试使用来自命令的 GID 和 GID 索引。-V, --version:显示版本号。-e, --events:在 CQ 事件上休眠(默认为轮询)。-F, --CPU-freq:即使 cpufreq_ondemand 模块失败也不会失败。-I, --inline_size=<size>:以内联模式发送的最大消息大小。-u, --qp-timeout=<timeout>:QP 超时 = (4 uSec)*(2^timeout)(默认为 14)。-S, --sl=<sl>:服务级别(默认为 0)。-r, --rx-depth=<dep>:接收队列深度(默认为 600)。
延迟测试选项
-C, --report-cycles:以 CPU 周期为单位报告时间。-H, --report-histogram:打印所有结果(默认:仅摘要结果)。-U, --report-unsorted:打印未排序的结果(默认已排序)。
带宽测试选项
-b, --bidirectional:测量双向带宽(默认为单向)。-N, --no peak-bw:取消峰值带宽计算(默认包括峰值带宽)。-Q, --cq-mod:在 完成后生成 Cqe。-t, --tx-depth=<dep>:发送队列的大小(默认为 128)。-O, --dualport:在双端口模式下运行测试(2 QPs)。两个端口都必须处于活动状态(默认关闭)。-D, --duration=<sec>:以秒为单位运行测试的持续时间。-f, --margin=<sec>:在持续时间内测量结果,结果必须在边缘范围内(默认为 2)。-l, --post_list=<list size>:发送 WQEs 的列表大小为 (而不是单个帖子)。
--recv_post_list=<list size>:接收 WQEs 的列表大小为 (而不是单个帖子)。-q, --qp=<num of qp's>:进程中运行的 QP 数量(默认为 1)。
--run_infinitely:在用户中断之前一直运行测试,每 5 秒打印一次结果。
ib_send_lat(发送延迟测试)和 ib_send_bw(发送带宽测试)的选项
-r, --rx-depth=<dep>:接收队列的大小(默认为 BW 测试中的 512)。-g, --mcg=<num_of_qps>:向附加了 <num_of_qps> 个 QPs 的多播组发送消息。-M, --MGID=<multicast_gid>:在多播中,使用 <multicast_gid> 作为组 MGID。
ib_atomic_lat(原子延迟测试)和 ib_atomic_bw(原子带宽测试)的选项
-A, --atomic_type=<type>:原子操作的类型,可选值为 {CMP_AND_SWAP,FETCH_AND_ADD}。-o, --outs=<num>:未完成的读/原子请求的数量,也在 READ 测试中使用。
原始以太网发送带宽测试的选项
-B, --source_mac:源 MAC 地址,格式为 XX:XX:XX:XX:XX:XX(默认使用 GID 的 MAC 地址)。-E, --dest_mac:目标 MAC 地址,格式为 XX:XX:XX:XX:XX:XX,必须输入。-J, --server_ip:服务器 IP 地址,格式为 X.X.X.X(用于发送带有 IP 头的包)。-j, --client_ip:客户端 IP 地址,格式为 X.X.X.X(用于发送带有 IP 头的包)。-K, --server_port:服务器 UDP 端口号(用于发送带有 UDP 头的包)。-k, --client_port:客户端 UDP 端口号(用于发送带有 UDP 头的包)。-Z, --server:选择当前计算机的服务器端(–server/–client 必须被选中)。-P, --client:选择当前计算机的客户端端(–server/–client 必须被选中)。
相关文章:
RDMA性能测试工具集preftest_README
文章目录 1 概述2 安装3 测试方法说明4 测试说明5 运行测试所有测试的通用选项延迟测试选项带宽测试选项ib_send_lat(发送延迟测试)和 ib_send_bw(发送带宽测试)的选项ib_atomic_lat(原子延迟测试)和 ib_at…...
墨天轮专访星环科技刘熙:“向量热”背后的冷思考,Hippo如何打造“先发”优势?
导读: 深耕技术研发数十载,坚持自主可控发展路。星环科技一路砥砺前行、坚持创新为先,建设了全面的产品矩阵,并于2022年作为首个独立基础软件产品公司成功上市。星环科技在今年的向星力•未来技术大会上发布了分布式向量数据库Tra…...
逆向-beginners之非递归
/* * 非递归 */ void f() { } void main() { f(); } #if 0 /* * intel */ 0000000000001129 <f>: 1129: f3 0f 1e fa endbr64 112d: 55 push %rbp 112e: 48 89 e5 mov %rsp,%…...
Spring for Apache Kafka概述和简单入门
一、概述 Spring for Apache Kafka 的高级概述以及底层概念和可运行的示例代码。 二、准备工作 注意:进行工作开始之前至少要有一个 Apache Kafka 环境 2.1、依赖 使用 Spring Boot<dependency><groupId>org.springframework.kafka</groupId><artifact…...
基于SSM+Vue的医院医患管理系统
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用Vue技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…...
再次理解Android账号管理体系
目录 ✅ 0. 需求 📂 1. 前言 🔱 2. 使用 2.1 账户体系前提 2.2 创建账户服务 2.3 操作账户-增删改查 💠 3. 源码流程 ✅ 0. 需求 试想,自己去实现一个账号管理体系,该如何做呢? ——————————…...
如何在Blender中压缩/减小GLTF模型的大小
GLTF 如何在Blender中压缩/减小GLTF模型的大小 Blender是一款功能强大的开源软件,旨在创建3D图形,动画和视觉效果。它支持多种文件格式的导入和导出,包括GLB,GLTF,DAE,OBJ,ABC,USD…...
IntelliJ IDEA使用_Plugin插件推荐
官网插件库:https://plugins.jetbrains.com/search 代码规范检测:Alibaba Java Coding Guidelines码云:Giteemybatis插件:MyBatisX多颜色括号:Rainbow Brackets操作快捷键提示:Key Promoter X力扣ÿ…...
Ajax fetch navigator.sendBeacon 三个的区别
Ajax、fetch 和 navigator.sendBeacon 是用于发送网络请求的不同方法。 Ajax: Ajax 是一种传统的用于发送异步请求的技术。它使用 XMLHttpRequest 对象来发送数据和接收响应。通过创建 XMLHttpRequest 对象,你可以通过调用其 open() 方法指定请求的类型和 URL&#…...
map-reduce执行过程
Map阶段 Map 阶段是 MapReduce 框架中的一个重要阶段,它负责将输入数据转换为中间数据。Map 阶段由一个或多个 Map 任务组成,每个 Map 任务负责处理输入数据的一个子集。 执行步骤 Map 阶段的过程可以分为以下几个大步骤: 输入数据分配&a…...
技术人员怎样提升对业务的理解
技术服务于业务。 一个技术人员想要走得更远,不能仅局限于技术,需要对自己所从事的业务领域有不断深入和全面的理解。 所谓业务领域,就是大家平常自我介绍,不会仅简单说我是搞C的,我是搞JAVA的,而是游戏后台…...
【分布式】分布式事务:2PC
分布式事务的问题可以分为两部分: 并发控制 concurrency control原子提交 atomic commit 分布式事务问题的产生场景:一份数据被分片存在多台服务器上,那么每次事务处理都涉及到了多台机器。 可序列化(并发控制)&…...
回归与聚类算法系列④:岭回归
目录 1. 背景 2. 数学模型 3. 特点 4. 应用领域 5. 岭回归与其他正则化方法的比较 6、API 7、代码 8、总结 🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数…...
idea配置git(gitee)并提交(commit)推送(push)
Intellij Idea VCS | 版本控制 - 知乎 IDEA项目上传到gitee仓库_idea上传代码到gitee_robin19712的博客-CSDN博客 git程序下载国内镜像地址: https://registry.npmmirror.com/binary.html?pathgit-for-windows/v2.42.0.windows.2/ 解压后放到固定路径:…...
(19)Task异步:任务创建,返回值,异常捕捉,任务取消,临时变量
一、Task任务的创建 1、用四种方式创建,界面button,info各一。 程序代码 private void BtnStart_Click(object sender, EventArgs e){Task t new Task(() >{DisplayMsg($"[{Environment.CurrentManagedThreadId}]new Task.---1");});t.Start()…...
设备树的理解与运用
设备树: 本质是一个文件,包含很多节点,每个节点里边是对设备属性的描述(包括GPIO,时钟,中断等等),其中节点(node)和属性(property)就是设备树最重…...
【AIGC】提示词 Prompt 分享
提示词工程是什么? Prompt engineering(提示词工程)是指在使用语言模型进行生成性任务时,设计和调整输入提示(prompts)以改善模型生成结果的过程。它是一种优化技术,旨在引导模型产生更加准确、…...
【Axure视频教程】取整函数
今天教大家在Axure里如何使用三种不同的取整函数,包括向上取整、向下取整和四舍五入取整。具体效果可以参考下方视频。该教程从0开始制作,手把手教学,无论是新手小白还是有一定基础的同学,都可以学习的哦。 【视频教程——试看版…...
MySQL清空表
当我们需要清空一个表中的所有行时,除了使用 DELETE * FROM table 还可以使用 TRUNCATE TABLE 语句。 如果想要清空一个表, TRUNCATE TABLE 语句比 DELETE语句更加有效。 TRUNCATE TABLE 语法 TRUNCATE TABLE 的语法很简单,如下:…...
使用IDEA创建Vue3通过Vite实现工程化
1、创建Vite项目的分步说明 IntelliJ IDEA与Vite构建工具集成,改善了前端开发体验。Vite 由一个开发服务器和一个构建命令组成。构建服务器通过本机 ES 模块提供源文件。生成命令将代码与汇总捆绑在一起,汇总预配置为输出高度优化的静态资产以供生产。In…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)
UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果,并让boo…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
