问题标签 [rdma]
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.
linux - 如果我想实现 RDMA NIC 驱动程序,从哪里开始 - 建议
非常感谢这里的精彩且非常有帮助的社区。需要帮助了解从哪里开始。我的任务是理解和编写 RDMA over Converged Ethernet 的设备驱动程序。
我的问题是我不知道从哪里开始。我可以访问供应商的 PRM 和示例源代码。
这是我第一次参与这样的任务。
在开始使用 RDMA 之前,我是否应该开始阅读和理解以下规范和示例源代码
- PCI
- PCI Express
- 网卡(以太网)
我尝试阅读 RDMA PRM,但似乎我无法清楚地理解。我在想也许是因为我不太了解 PCI(Express)、NIC,我很难过。
你有什么建议?请帮助我提出您的宝贵建议。真的很感谢大家!
cuda - 我可以通过 Infiniband 加载/存储访问从不同 PCIe 总线中的 GPU2-Core 到 GPU1-RAM 在 RDMA 中使用吗?
如此处所述:https ://developer.nvidia.com/gpudirect 我可以在同一 PCIe 总线上从 GPU0-Core 访问 GPU1-RAM:
- 加载/存储
cudaMemcpy()
它被命名为“NVIDIA GPUDirect v2 Peer-to-Peer (P2P) Communication between GPUs on the Same PCIe Bus (2011)”:
我可以通过 Infiniband 使用 RDMA 在不同的 PCIe 总线上从 GPU2-RAM 复制到 GPU1-RAM,它被命名为“GPUDirect™ Support for RDMA, Introduced with CUDA 5 (2012)”:
但是我可以在通过 Infiniband 连接的不同 PCIe 总线上的 RDMA 中使用:
- 加载/存储(从 GPU2-Core 访问 GPU-RAM)
cudaMemcpy()
(从 GPU2-RAM 复制到 GPU1-RAM)
还是只能cudaMemcpy()
在 RDMA 中使用?
c - 我可以在不使用 DMA 控制器的情况下通过 Infiniband 数据发送吗?
我可以在不使用 DMA 控制器的情况下通过 Infiniband 发送数据吗?我可以发送的最小包大小是多少?
也就是说,我可以在没有DMA-controller的情况下,通过简单的指针(即仅x86-asm:向Infiniband适配器的PCI-Express BARMOV...
发送数据)直接从当前CPU1-Core访问远程CPU2-RAM的内存吗?
一个例子,我可以从 CPU1 做这样的事情:
c - 在 Infiniband 中,PCIe-BAR、Infiniband 卡的内部缓冲区或远程计算机的 RAM 中的映射是什么?
众所周知,Infiniband 允许 RDMA - 直接访问远程计算机的内存。
众所周知,PCI-Express(端点)设备,包括 PCIe 卡 Infiniband,能够以两种方式进行通信:
- IO 端口(输入/输出) 已弃用
- MMIO(BAR - 内存映射 IO:mov)
但是 BAR (MMIO) 中究竟显示了什么?(使用 PCIe 卡 Infiniband 时):
- 它自己的内部缓冲存储卡 Infiniband?
- 远程计算机的 RAM 的一部分(目前正在使用 RDMA 复制数据的 RAM 部分)?
当我使用 Infiniband 时,PCIe-BAR、Infiniband 卡的内部缓冲区或远程计算机的 RAM 中的映射是什么?
gpu - GPUDirect 如何在共享设备上强制隔离
我一直在这里https://developer.nvidia.com/gpudirect阅读有关 GPUDirect 的信息,在此示例中,有一个网卡连接到 PCIe 以及两个 GPU 和一个 CPU。
如何在尝试访问网络设备的所有客户端之间实施隔离?他们都访问设备的同一个 PCI BAR 吗?
网络设备是否使用某种 SR-IOV 机制来强制隔离?
pci - Infiniband 动词涉及哪些 PCIe 操作?
这里有一些细节。
当一个进程调用ibv_post_send()
时,HCA 的 PCI 接口会发生什么?WQE 是否封装在 PCIe 门铃内并通过 Programmed IO 写入?还是在 HCA 读取的单独 DMA 中获取 WQE?
当一个进程调用时会发生什么ibv_poll_cq()
?HCA 如何将 CQE 推送到系统内存?或者,如果它是基于拉的,CPU 如何检测 HCA 中的新 CQE?
linux - linux rdma mellanox 澄清
我正在通过 linux/drivers/net/ethernet/mellanox/mlx4/qp.c
有几个问题。如果有人能澄清一下,我将不胜感激:
在函数 mlx4_qp_alloc_icm 中,
要分配 QP,有 2 条路径:
使用 ALLOC_RES 虚拟命令
使用 MAP_ICM
这些路径是根据 mlx4_is_func(dev) 的返回值获取的。这对于我认为是物理功能驱动程序/虚拟功能驱动程序的 MASTER 或 SLAVE 是正确的。因此,对于 SRIOV,它涵盖了所有情况。
作为 __mlx4_qp_alloc_icm 的一部分执行的 MAP_ICM 部分永远不会被调用?
我理解正确吗?因为根据我的理解,ICM 需要为所有 QP 分配。
请帮助我理解这一点。
编辑:
添加相关代码:
http://lxr.free-electrons.com/source/drivers/net/ethernet/mellanox/mlx4/icm.c#L226
非常感谢。
最好的问候,马克
multithreading - InfiniBand:传输速率取决于 MPI_Test* 频率
我正在编写一个多线程 OpenMPI 应用程序,使用来自多个线程的 MPI_Isend 和 MPI_Irecv 在 InfiniBand RDMA 的等级之间每秒交换数百条消息。
传输量为 400 - 800KByte,每个 rank 产生大约 9 Gbps 的输入和输出,完全在 FDR 的容量范围内。简单的 MPI 基准测试也显示出良好的性能。
通过在专用线程中使用 MPI_Testsome 轮询所有活动传输来检查传输是否完成。
我实现的传输速率取决于消息速率,但更重要的是还取决于 MPI_Testsome 的轮询频率。也就是说,如果我每 10 毫秒轮询一次,则请求完成的时间比我每 1 毫秒轮询一次的时间要晚。
我希望如果我每 10 毫秒而不是每 1 毫秒轮询一次,我最多会在 9 毫秒后收到完成请求的通知。我不希望传输本身会通过减少对 MPI_Testsome 的调用来延迟完成,从而降低总传输速率。我希望 MPI_Testsome 完全被动。
这里的任何人都知道为什么会发生这种行为?
c - 用于开发的“本地”RDMA
我正在尝试在此处构建和运行 RDMA 示例。但是因为我只是在探索,我没有任何能够管理 RDMA 的硬件。当我尝试运行示例代码时出现这样的错误。
是否有任何 RDMA 功能的“本地”实现可用于开发?我知道 RDMA 中的“R”表示远程,但我认为这可能存在用于测试/开发目的。
作为参考,我在安装了软件包的 Ubuntu 14.04 机器上进行了尝试libibverbs-dev
,librdmacm-dev
以便编译代码。