问题标签 [mellanox]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
infiniband - SA 查询 Infiniband 中的问题
从ib_sa传递给函数ib_sa_path_rec_get的参数上下文是什么?
linux - 在 CentOS 6.6 中加载模块时出现“无效模块格式”错误
我有 2 台双服务器,具有相同的硬件(Infiniband 和 Nvidia Tesla)和相同的操作系统(CentOS6.6、内核和驱动程序)。
在 host1 上一切正常,而在 host2 上我无法再运行此服务,因为我收到此错误:
和 dmesg 说:
请注意,host2 已经运行了 2 个月,直到在夏季节后重新启动它。:-(这个错误的原因是什么?主要软件组件没有改变(内核,Nvidia驱动程序,Mellanox驱动程序)并且硬件没问题。我也尝试重复安装过程,但我在模块加载时卡住了观点:
我发现这篇关于两个内核模块导出相同符号的帖子,但为什么在 host2 上第二个模块会干扰 nv_peer_mem,而在 host1 上却没有?这是 nm 命令的输出,两台主机完全相同。
提前感谢您的帮助。圣。
infiniband - RDMA 快速内存注册 (FMR)
我正在开发一个广泛使用 RDMA 的系统(在 Mellanox 硬件上),并且希望能够更有效/更快地注册内存区域。
我查看了快速内存注册,我有几个问题:
FMR 会消失吗?从这里 [1] 看来它可能很快就会被删除/替换。
是否有任何使用此功能的用户空间代码?在线讨论这个问题的线程很少,而且主要是在内核模块的上下文中。
任何有用的指针将不胜感激。
infiniband - 使用动词 Memory Windows (ibv_alloc_mw) 时出错
我正在尝试使用内存窗口,并且在调用ibv_alloc_mw(具有两种类型的 MW)时得到EPERM (errno=1 )。
我有 mellanox ConnectX-3 卡和以下 OFED:
看来我的卡应该支持这个功能:
在 Mellanox OFED 中运行rping时出现相同的错误:
Mellanox 甚至支持 ibv_alloc_mw 吗?
编辑:
我可以访问 ConnectX-4 卡并遇到同样的错误。我还可以看到,每当我尝试使用内存窗口选项运行rping时,都会记录一个错误:
infiniband - 什么是 ibv_exp_post_send 和 ibv_exp_post_task 上下文中的生产者索引 (PI)?
我正在尝试使用RDMA Aware Programming User Manual附录 D 中描述的跨通道通信支持。不幸的是,我对某些函数参数的含义有些困惑。
我的问题
ibv_exp_post_send()
和函数分别采用工作请求结构的ibv_exp_post_task()
链表和工作请求结构的集合*。该结构中的 cq_count 和 wqe_count 是什么意思?
第一个工作请求/完成是否总是编号为 1,随后的工作请求/完成是线性增加的?还是有时会重置,例如在 ibv_exp_post_task() 调用之间或在处理某些请求后减少?ibv_exp_post_send 或 ibv_exp_post_task 之间的数字是否一致?
*从技术上讲,一个指向任务链表的指针,每个任务都包含一个工作请求的链表。
hpc - INFINIBAND 如何从 POSIX 套接字 API 获取消息?
我试图弄清楚 RDMA - INFINIBAND 如何仅使用传统的 POSIX API 来理解和发送消息。
我查看了与 INFNIBAND 相关的所有文件和论文,但未能回答我的问题。
是否有可能知道 INFINIBAND 如何理解并从 POSIX 获取消息?因为我尝试过直接使用动词接口或使用 libvma 库来拦截来自套接字 API 的数据并使用动词接口。
显然,与仅使用带有 INFINIBAND 的 POSIX 套接字 API 相比,这两种方法都具有更高的性能。
我的怀疑是当用户空间应用程序使用套接字 API 发送数据时,该进程进入内核空间以使用 POSIX TCP 堆栈,然后以某种方式 RDMA 从中获取数据,但我真的很想知道具体如何。
熟悉 RDMA 的人可以回答我的问题吗?谢谢
infiniband - 使用 Inifiniband 将远程内存映射到主机的地址空间
我最近开始使用 Infiniband 卡,具体来说是两个 Mellanox Technologies MT27700 系列 [ConnectX-4]。最终,我想使用基于 VPI Verbs API/RDMA CM API 的接口扩展现有框架。
关于我已经对 RDMA 编程进行的研究:我首先阅读了Mellanox 的 RDMA Aware Networks Programming User Manual。其次,我阅读了一篇关于 VPI Verbs/RDMA Verbs 功能的相当全面的博客。最后,我阅读了 Tarick Bedeir 发表的三篇关于 RDMA 编程的论文:[1]、[2]、[3]。
为了了解什么最适合我的需求,我创建了一个测试平台来测量延迟、CPU 使用率和吞吐量等。我测试了不同的操作(见下表 1)、不同的发送标志(例如IBV_SEND_INLINE
)以及检索工作完成的不同方式(忙轮询与等待完成通道中的事件)。我的测试台的部分灵感来自这项 RDMA 编程性能研究的结果。
目前,我仍在寻找所有可能性。
我注意到的一件事是,每次我想分别用oribv_post_send
写入远程内存或从远程内存中读取时,我都必须调用它。所以,我的问题是是否可以将远程内存地址映射到主机的虚拟地址空间。IBV_WR_RDMA_WRITE
IBV_WR_RDMA_READ
当然,VPI 组件的所有初始化、内存注册ibv_reg_mr
以及远程密钥和地址的交换都必须完成。Infiniband 是否提供任何使这成为可能的东西?
谢谢!
rdma - 动词 API 中的 RDMA 分散/聚集
RDMA Scatter/Gather是一种整合数据传输的好方法。例如,动词 API 允许使用 SINGLE RDMA 写入操作将多个位置的数据写入远程缓冲区;或者,可以使用 SINGLE RDMA 读取操作将远程缓冲区中的数据读取到多个位置。
但是,我无法启动写入远程端多个位置的 RDMA 操作(或从远程端多个位置读取)。此功能对我们很有吸引力,因为它有效地将宽 RDMA 通道用于多个小写入。我还检查了 Intel qsm API 和 Cray gni API。似乎没有人支持这样的功能——我们称之为“作家控制的远程散射”。不支持这是否有深层原因?
infiniband - 启用 RDMA 的 NIC 会进行字节序转换吗?
是否可以让 RDMA 适配器(例如 Mellanox NIC)在数据传输期间进行字节序转换?具体来说,我们正在执行从大端到小端系统的 RDMA 传输,反之亦然。一旦数据到达目标,我们就需要执行 bswap32() 或 bswap64() 来进行字节序转换,这将占用处理器周期。我想知道我们是否可以从 NIC 获得免费的 bswap。
c - 如何使用 ibverbs 接收以太网帧?
我想编写一个简单的测试程序来使用 ibverbs API 接收以太网帧。
下面的代码编译并运行,但从不接收任何数据包。我在 Ubuntu 18 上使用 Mellanox ConnectX-3 硬件。
问题:
如果在运行此 RX 程序时,我从另一台机器 ping Inifiniband 接口,那么 ping 会收到响应。我不希望这是因为 RX 程序应该抓取 ping 请求,并且 Linux IP 堆栈不应该看到它们,因此不应该响应。应该发生什么?
我的代码有什么明显的问题吗?
我需要指导规则吗?如果我删除 ibv_create_flow() 的调用,我应该只接收接口看到的所有数据包吗?