一、udaddy介绍
udaddy
是一个命令行工具,用于测试和验证基于 InfiniBand 的网络性能。InfiniBand 是一种高性能的、低延迟的网络通信技术,通常用于超级计算机和数据中心的高速互联网络。`udaddy` 是由 OpenFabrics Alliance 提供的 OpenFabrics Enterprise Distribution (OFED) 的一部分。
udaddy
实际上是一个针对InfiniBand设备的用户态应用程序。"udaddy" 代表 "User-space Datagram Daddy",意在表明它是使用InfiniBand中的"datagram"传输服务来进行点对点通信测试的工具。基于 RDMA 的传输可以让网络应用直接访问远程主机的内存,而不需要通过操作系统的内核,这样可以实现非常高的吞吐量和低迟延。
应用 udaddy
的常见场景包括:
- 测试网络设置和配置
- RDMA 编程的示例和教学
- 性能基准测试和分析
- 故障排除和网络问题调试
`udaddy` 现在是 rdma-core
软件包的一部分。`rdma-core` 是开源的 RDMA (Remote Direct Memory Access) 核心用户空间库和驱动的集合,它取代了早期的 OpenFabrics Enterprise Distribution (OFED)。`rdma-core` 提供了用于管理和使用 InfiniBand, RoCE, iWARP 等 RDMA 技术的工具和库。
rdma-core
包括多种 RDMA 用户空间应用程序和测试工具,`udaddy` 是其中的一个工具,主要用于验证和测试 RDMA 通信。因此,如果你正在使用较新的 Linux 发行版,并关注 RDMA 编程或网络测试,可能需要安装 rdma-core
软件包来获取 udaddy
以及其他相关的 RDMA 工具和库。你可以通过包管理器安装 rdma-core
,例如使用 yum
或 apt
命令,具体取决于你使用的 Linux 发行版。
要启动一个基本的 udaddy
测试,首先需要确保系统有相关的硬件支持,并且InfiniBand网络已配置正确。然后,可以在服务器上运行 udaddy
以待连接,而在客户端上运行命令以实现连接和测试。`udaddy` 允许进行修改和自定义测试参数,以适应不同的测试场景和要求。
请注意:使用 udaddy
或任何网络测试工具时,必须确保网络的其他用户不会因为这些测试而受到影响。通常这些测试最好在控制环境中进行,例如在维护期间或在特定为测试配置的网络段上。
`udaddy` 是使用 RDMA Connection Manager (RDMA_CM) API 而不是直接使用 InfiniBand Verbs API。
InfiniBand Verbs 是底层的编程接口,允许应用直接与InfiniBand硬件进行交互。然而,RDMA_CM 提供了一个更高级别的抽象,简化了进行 RDMA 通信的连接建立和管理过程。通过使用 RDMA_CM API,程序不需要处理许多底层的细节,如交换必要的连接参数或直接与队列对(Queue Pair)进行交互。
udaddy
使用 RDMA_CM API 来建立连接,传输数据,并进行清理。通过这种方式,它可以测试和练习使用 RDMA_CM 的应用编程,并且使得底层的通信机制更加易于处理。这对于需要利用 RDMA 进行高速网络通信的应用开发者而言,是十分有用的。
找到GID[ 0]。
例如,
服务器:
- root@debian:~/infiniband/rdma-core-50mlnx1# build/bin/udaddy -f gid -b fe80:0000:0000:0000:e41d:2e03:0051:26d1
- udaddy: starting server
- test.rai->ai_src_addr->sa_family:27
- receiving data transfers
- sending replies
- data transfers complete
- test complete
- return status 0
客户端:
- root@debian:~/infiniband/rdma-core-50mlnx1# build/bin/udaddy -f gid -s fe80:0000:0000:0000:e41d:2e03:0051:26d1
- udaddy: starting client
- udaddy: connecting
- initiating data transfers
- receiving data transfers
- data transfers complete
- test complete
- return status 0