问题标签 [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.

0 投票
1 回答
733 浏览

networking - DPDK MLX5 驱动程序 - QP 创建失败

我正在使用 Mellanox ConnectX-5 100G 开发 DPDK 程序。

我的程序启动了 N 个 worker(每个内核一个),每个 worker 处理自己的专用 TX 和 RX 队列,因此我需要设置 N TX 和 N RX 队列。

我正在使用 flow director 和 rte_flow API 将入口流量发送到不同的队列。

对于每个 RX 队列,我创建一个 mbuf 池:

对于 N<=4,一切正常,但 N=8, rte_eth_dev_start返回: Unknown error -12

以及以下日志消息:

我试过了:

  • 增加 Hugepages 的数量(最多 64x1G)
  • 以不同方式更改池大小
  • DPDK 18.05 和 18.11
  • 将 TX/RX 描述符的数量从 32768 更改为 16384

但没有成功。

你可以在这里查看我的 port_init 函数(对于 DPDK 18.11)。

谢谢你的帮助!

0 投票
2 回答
1448 浏览

wireshark - Wireshark 不捕获 dpdk 接口数据包

我正在尝试从 dpdk 接口捕获数据包。使用pdump+testpmd,可以抓到数据包。但是,如果将 Wireshark 与 testpmd 一起使用,则上述操作会失败。

任何建议高度赞赏。谢谢

在 Ubuntu v 18+、DPDK v 19+ 上工作 Wireshark v 3+

0 投票
1 回答
656 浏览

x86 - IB读、IB写、OB读、OB写是什么意思。它们作为英特尔® PCM 的输出,同时监控 PCIe 带宽

我正在尝试使用英特尔® 性能计数器监视器 (PCM) 工具测量 NIC 设备的 PCIe 带宽。但是,我无法理解它的输出。

为了测量 PCIe 带宽,我执行了二进制 pcm-iio。此二进制文件有助于测量每个 PCIe 设备的监视器 PCIe 带宽。执行二进制文件后,我得到以下输出。

我想了解IB读,IB写,OB读和OB写的含义。

0 投票
1 回答
3236 浏览

infiniband - OFED、MLNX OFED 和收件箱驱动有什么区别

我正在设置 Infiniband 网络,但我并没有完全了解不同软件堆栈之间的区别。

它们是如何相互关联的,为什么我应该更喜欢其中之一?

0 投票
2 回答
508 浏览

infiniband - 设置要放在 RDMA 中队列对的发送队列中的最大未完成工作请求

我正在尝试创建一个 QueuePair ,我必须通过设置 的字段并将其提供给 create 函数ibv_create_qp()来描述队列对的大小。struct ibv_qp_cap我的问题是与max_send_wr可以发布到该特定队列对的发送队列的未完成工作请求的最大数量相对应的字段。

根据各种 Web 资源 [1,2],您应该将此特定字段设置在 [0 ... dev_cap.max_qp_wr] 范围内的某个位置,并设置为max_qp_wr支持的任何发送或接收队列上未完成的工作请求的最大数量RDMA 设备(您可以通过使用 查询您的设备来获取信息ibv_devinfo -v)。在尝试创建 QueuePair 时,当我将字段设置为可能的最大值(max_qp_wr,我的设备为 32K)时,ibv_create_qp()函数失败并出现ENOMEM错误。通过反复试验,我发现如果我将其降低到 8K,它就可以正常工作。

因此,我很想知道是否有一种确定性的方法来计算max_send_wrRDMA 设备的值,而无需进行反复试验?此外,根据一些 [1],对于特定的 RDMA 设备,发送或接收队列可能还有其他考虑因素,以防止使用最大值创建 QP。这些 RDMA 设备特定的考虑因素是什么,它们如何影响最大值的计算?

[1] https://www.rdmamojo.com/2012/12/21/ibv_create_qp/

[2] https://linux-rdma.vger.kernel.narkive.com/rkR0gUjT/rdma-create-qp-and-max-send-wr

0 投票
2 回答
714 浏览

c++ - Mellanox 上的 DPDK IPv4 流过滤

我有一个 DPDK 应用程序,它使用 Boost asio 加入多播组,并通过特定 UDP 端口号的 VLAN 接收多播 IPv4 UDP 数据包(其他 UDP 端口也用于其他流量)。我试图在 DPDK 应用程序中的该端口仅接收那些多播 UDP 数据包,并将它们放入 RX 队列,并让所有其他入口网络流量像 DPDK 应用程序没有运行一样(转到内核)。因此,我正在使用流隔离模式 (rte_flow_isolate())。我的应用程序的流过滤部分基于 DPDK 提供的 flow_filtering 示例,并添加了对 rte_flow_isolate() 的调用和 VLAN 过滤器。我使用的过滤器如下:

使用这些过滤器,我无法接收任何数据包,如果我只删除 UDP 过滤器也是如此。但是,如果我同时删除 IPV4 和 UDP 过滤器(保留 ETH 和 VLAN 过滤器),我可以接收我需要的所有数据包,以及我不想要的其他数据包(并且希望被发送到内核)。

这是我需要从 Wireshark 捕获中接收的数据包条目。目前我的理论是,由于在 IPv4 标头中设置了保留位(邪恶位),因此数据包未被识别为 IPv4。这可能是一个延伸:

我正在运行的硬件有一个 Mellanox ConnectX-5 卡,因此,DPDK 使用的是 MLX5 驱动程序,它不支持 RTE_FLOW_ITEM_TYPE_RAW 以及 RTE Flow API 中的许多其他项目。我在 DPDK 19.11 上,我使用的 OFED 版本是 RHEL 7.6 (x86_64) 的 4.6

我在这里做错了什么,为什么添加 RTE_FLOW_ITEM_TYPE_IPV4 过滤器(没有 ip 地址、规范和掩码都为 0)导致我的应用程序不接收任何数据包,即使它们是 IPv4 数据包?DPDK 的 MLX5 驱动程序有没有办法解决这个问题?

0 投票
2 回答
189 浏览

nic - 响应重传 RDMA 读取的 MSN(消息序列号)

在对从 Mellanox CX-4(请求发起者)到另一个 RNIC 的 64K 消息大小运行 ib_read_bw 测试时,正在从 Mellanox 重新传输第 5 次 RDMA-READ 之后的 50KB 数据(前 12KB 已成功确认),之后它不断地重新传输剩余 50KB 数据的相同请求,尽管目标 RNIC 正在响应。

观察到目标 RNIC 在第一个 RDMA READ 响应中以 11 而不是 5 int 的 MSN 响应,用于重新传输(对于 50KB)读取请求。

infiniband 规范说,对于重复的请求,RNIC 不应该增加 MSN,这是否意味着,RNIC 应该用它拥有的任何 MSN 进行响应(它可能已经响应了所有收到的传入请求并且 MSN 为 16,然后重新传输被看到)或者它是否应该以正确的 MSN 响应重新传输的 RDMA READ。

0 投票
0 回答
19 浏览

networking - 我可以在具有两个 100GbE 端口的网卡上处理多少传入流量?

我可以在具有两个 100GbE 端口 (Mellanox X5) 的网卡上处理多少传入流量?是 100Gbs 还是 200Gbs 传入流量?

0 投票
1 回答
265 浏览

rdma - 什么是 Windows 的 libibverbs/librdmacm 的替代品?

我们的应用程序在 Linux 上运行,并使用 RMDA(Infiniband)接口在两个模块之间进行通信。现在我们喜欢在 Windows 上支持我们的应用程序,因此寻找 IB Verbs 替代品。

我们尝试安装 Mellanox 驱动程序,但我们无法找到头文件和库来让我们的代码在 Windows 上编译。也找不到简单的infiniband/verbs.h 。

我们还发现windows上的RDMA是通过windows NDK支持的,但是好像水平很低。我们正在寻找一些中间层 API 集来将我们现有的基于 Linux 的代码移植到 Windows。

如果有人可以向我们展示我们应该遵循的路径,我们将不胜感激。

亲切的问候

0 投票
1 回答
502 浏览

c - MLNX_OFED 的 RoCE 连接问题(基于融合以太网的 RDMA)

我正在尝试让 RoCe(基于聚合以太网的 RDMA)在两个工作站上工作。我已经在两台配备 Mellanox ConnectX-5 EN 100GbE 适配器并通过相应电缆直接相互连接的计算机上安装了 MLNX_OFED。根据我所阅读的内容,我需要在其中一个工作站上运行子网管理器才能在它们之间使用 RoCe。

尝试运行命令opensm时,它说找不到本地端口。我可以 ping 两台计算机,并且可以正常工作。我还可以使用命令udaddy来测试 RDMA,它也可以工作。但是尝试运行本指南中提供的 RDMA_RC_EXAMPLE https://www.mellanox.com/related-docs/prod_software/RDMA_Aware_Programming_user_manual.pdf尝试创建队列对时失败,更具体地说,当它尝试将状态更改为 RTR 时(准备接收)。

还有一些消息来源说你需要一个 RDMA 服务,这在我的电脑上不存在。并且 MLNX_OFED 的安装在 /etc/yum.conf 中排除了 ibutils-libs*,我不知道它是否相关,但我注意到了。

我在其中一台机器上运行 CentOS 7.7,在另一台机器上运行 CentOS 7.8。

我有点疑惑到底出了什么问题。

更新 这是运行代码时中断的函数。

这个源RoCE Debug flow Linux

RoCE 要求净有效载荷的 MTU 至少为 1024 字节。

我猜这会影响代码中的这一行:

attr.path_mtu = IBV_MTU_256;

当更改为IBV_MTU_1024时,它会编译但会出现相同的错误。