当前位置: 首页 > news >正文

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_bwib_send_lat
  • RDMA Read----ib_read_bwib_read_lat
  • RDMA Write----ib_write_bwib_write_lat
  • RDMA Atomic----ib_atomic_bwib_atomic_lat
  • Native Ethernet (when working with MOFED2)----raw_ethernet_bwraw_ethernet_lat

2 安装

在克隆完仓库后,perftest的目录就会出现在你当前的目录下。

克隆仓库举例:

git clone <URL>
git clone https://github.com/linux-rdma/perftest.git

在执行完克隆后,执行以下命令:

  1. cd perftest/

  2. ./autogen.sh

  3. ./configure

    如果想在特定的目录中安装,可以使用–prefix=,例如:./configure --prefix=

  4. make

  5. 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&#xff08;发送延迟测试&#xff09;和 ib_send_bw&#xff08;发送带宽测试&#xff09;的选项ib_atomic_lat&#xff08;原子延迟测试&#xff09;和 ib_at…...

墨天轮专访星环科技刘熙:“向量热”背后的冷思考,Hippo如何打造“先发”优势?

导读&#xff1a; 深耕技术研发数十载&#xff0c;坚持自主可控发展路。星环科技一路砥砺前行、坚持创新为先&#xff0c;建设了全面的产品矩阵&#xff0c;并于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的医院医患管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…...

再次理解Android账号管理体系

目录 ✅ 0. 需求 &#x1f4c2; 1. 前言 &#x1f531; 2. 使用 2.1 账户体系前提 2.2 创建账户服务 2.3 操作账户-增删改查 &#x1f4a0; 3. 源码流程 ✅ 0. 需求 试想&#xff0c;自己去实现一个账号管理体系&#xff0c;该如何做呢&#xff1f; ——————————…...

如何在Blender中压缩/减小GLTF模型的大小

GLTF 如何在Blender中压缩/减小GLTF模型的大小 Blender是一款功能强大的开源软件&#xff0c;旨在创建3D图形&#xff0c;动画和视觉效果。它支持多种文件格式的导入和导出&#xff0c;包括GLB&#xff0c;GLTF&#xff0c;DAE&#xff0c;OBJ&#xff0c;ABC&#xff0c;USD…...

IntelliJ IDEA使用_Plugin插件推荐

官网插件库&#xff1a;https://plugins.jetbrains.com/search 代码规范检测&#xff1a;Alibaba Java Coding Guidelines码云&#xff1a;Giteemybatis插件&#xff1a;MyBatisX多颜色括号&#xff1a;Rainbow Brackets操作快捷键提示&#xff1a;Key Promoter X力扣&#xff…...

Ajax fetch navigator.sendBeacon 三个的区别

Ajax、fetch 和 navigator.sendBeacon 是用于发送网络请求的不同方法。 Ajax: Ajax 是一种传统的用于发送异步请求的技术。它使用 XMLHttpRequest 对象来发送数据和接收响应。通过创建 XMLHttpRequest 对象&#xff0c;你可以通过调用其 open() 方法指定请求的类型和 URL&#…...

map-reduce执行过程

Map阶段 Map 阶段是 MapReduce 框架中的一个重要阶段&#xff0c;它负责将输入数据转换为中间数据。Map 阶段由一个或多个 Map 任务组成&#xff0c;每个 Map 任务负责处理输入数据的一个子集。 执行步骤 Map 阶段的过程可以分为以下几个大步骤&#xff1a; 输入数据分配&a…...

技术人员怎样提升对业务的理解

技术服务于业务。 一个技术人员想要走得更远&#xff0c;不能仅局限于技术&#xff0c;需要对自己所从事的业务领域有不断深入和全面的理解。 所谓业务领域&#xff0c;就是大家平常自我介绍&#xff0c;不会仅简单说我是搞C的&#xff0c;我是搞JAVA的&#xff0c;而是游戏后台…...

【分布式】分布式事务:2PC

分布式事务的问题可以分为两部分&#xff1a; 并发控制 concurrency control原子提交 atomic commit 分布式事务问题的产生场景&#xff1a;一份数据被分片存在多台服务器上&#xff0c;那么每次事务处理都涉及到了多台机器。 可序列化&#xff08;并发控制&#xff09;&…...

回归与聚类算法系列④:岭回归

目录 1. 背景 2. 数学模型 3. 特点 4. 应用领域 5. 岭回归与其他正则化方法的比较 6、API 7、代码 8、总结 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于Java领域学习&#xff0c;擅长web应用开发、数…...

idea配置git(gitee)并提交(commit)推送(push)

Intellij Idea VCS | 版本控制 - 知乎 IDEA项目上传到gitee仓库_idea上传代码到gitee_robin19712的博客-CSDN博客 git程序下载国内镜像地址&#xff1a; https://registry.npmmirror.com/binary.html?pathgit-for-windows/v2.42.0.windows.2/ 解压后放到固定路径&#xff1a…...

(19)Task异步:任务创建,返回值,异常捕捉,任务取消,临时变量

一、Task任务的创建 1、用四种方式创建&#xff0c;界面button,info各一。 程序代码 private void BtnStart_Click(object sender, EventArgs e){Task t new Task(() >{DisplayMsg($"[{Environment.CurrentManagedThreadId}]new Task.---1");});t.Start()…...

设备树的理解与运用

设备树&#xff1a; 本质是一个文件&#xff0c;包含很多节点&#xff0c;每个节点里边是对设备属性的描述&#xff08;包括GPIO&#xff0c;时钟&#xff0c;中断等等&#xff09;,其中节点&#xff08;node&#xff09;和属性&#xff08;property&#xff09;就是设备树最重…...

【AIGC】提示词 Prompt 分享

提示词工程是什么&#xff1f; Prompt engineering&#xff08;提示词工程&#xff09;是指在使用语言模型进行生成性任务时&#xff0c;设计和调整输入提示&#xff08;prompts&#xff09;以改善模型生成结果的过程。它是一种优化技术&#xff0c;旨在引导模型产生更加准确、…...

【Axure视频教程】取整函数

今天教大家在Axure里如何使用三种不同的取整函数&#xff0c;包括向上取整、向下取整和四舍五入取整。具体效果可以参考下方视频。该教程从0开始制作&#xff0c;手把手教学&#xff0c;无论是新手小白还是有一定基础的同学&#xff0c;都可以学习的哦。 【视频教程——试看版…...

MySQL清空表

当我们需要清空一个表中的所有行时&#xff0c;除了使用 DELETE * FROM table 还可以使用 TRUNCATE TABLE 语句。 如果想要清空一个表&#xff0c; TRUNCATE TABLE 语句比 DELETE语句更加有效。 TRUNCATE TABLE 语法 TRUNCATE TABLE 的语法很简单&#xff0c;如下&#xff1a…...

使用IDEA创建Vue3通过Vite实现工程化

1、创建Vite项目的分步说明 IntelliJ IDEA与Vite构建工具集成&#xff0c;改善了前端开发体验。Vite 由一个开发服务器和一个构建命令组成。构建服务器通过本机 ES 模块提供源文件。生成命令将代码与汇总捆绑在一起&#xff0c;汇总预配置为输出高度优化的静态资产以供生产。In…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...