问题标签 [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.
c# - 是否有任何机制可用于在基于 Windows CLR 的平台上使用 LDMA 或 RDMA?
我希望能够在基于 Windows CLR 的应用程序 (.NET) 上使用 LDMA 或 RDMA。我有使用 C++ 开发的低延迟应用程序,这些应用程序将使用 LDMA 或 RDMA 接收它们的数据。我希望我们的 CLR 应用程序使用相同的 API,并理解可能会影响性能。
Windows 有 Windows Direct,但我还没有看到任何允许 .NET 应用程序使用它的东西。我还没有看到真正的 Windows 的 SDP(套接字直接协议)实现。任何人都知道有什么方法可以做到这一点?
networking - 调用 rdma_disconnect() 后同步或异步返回的已发布 recv 缓冲区
调用 rdma_disconnect() 时,我是否会在 rdma_disconnect() 返回之前获得所有已发布的 recv 工作请求的完成队列事件,或者我应该期望它们在 rdma_disconnect() 返回之后进入?
java - 如何在 java 中使用 DMA 或 RDMA?
这里的“DMA”是指:直接内存访问,“RDMA”是:远程直接内存访问。
我使用 Java 创建了一个应用程序来传输股票数据,但我发现延迟比我预期的要大。听说有人开发同类型的应用程序使用“DMA/RDMA”,性能不错,不知道能不能在Java中使用“DMA/RDMA”?
如果没有,我应该使用什么语言,是否有任何好的库可以使用?
c - 以编程方式检索 infiniband 设备 IP 地址
我正在尝试以编程方式查找 Infiniband 接口的 inet 地址,该接口的名称不知道先验。
我在 Linux 上,我想避免解析ifconfig (8)
输出。我已经阅读了关于这个答案的第二条评论,它建议用来getifaddrs()
检索接口,但是我不能选择 Infiniband 一个。
非常感谢任何帮助。
infiniband - RDMA 内存共享
我有几台通过 Infiniband 网络连接的多核计算机。我想在共享内存池上进行一些低延迟计算,并使用远程原子操作。我知道 RDMA 是要走的路。在每个节点上,我都会注册一个内存区域(和保护域)以进行数据共享。
在线 RDMA 示例通常关注单线程服务器和单线程客户端之间的单个连接。现在我想在每个 Infiniband 节点上都有一个多线程进程。我对以下内容感到非常困惑......
对于总共有 n 个节点和 m 个线程的集群,我应该在每个节点上准备多少个队列对?更具体地说,同一个节点上的多个线程可以共享同一个队列对吗?
我应该在每个节点上准备多少个完成队列?我将有多个线程在每个节点上发出远程读/写/cas 操作。如果他们要共享一个共同的完成队列,完成事件将被混淆。如果线程有自己独立的完成队列,那么它们真的很多。
您是否建议我拥有任何现有的库而不是编写此软件?(嗯,或者我应该写一个并开源它?:-)
感谢您的善意建议。
mpi - 高效的单方面沟通
我正在寻找一个高效的单向通信库,可以用来有效地实现 RDMA。
目前,我查看了 MPI-2 实现,例如 MPICH2 和 MVAPICH2(使用 RDMA 的基于 InfiniBand 架构的 MPI-2 实现)。
MVAPICH2 有很多我正在寻找的功能,不幸的是,我无法使用它,因为我目前无法访问我所在大学的 InfiniBand 架构。
所以我真正想要的是,是否有任何其他库(不是必需的 MPI 实现变体)在减少通信进程之间的开销方面可以被认为是有效的(例如:避免在集合协议中握手,从而从目标进程中卸载开销)。
我也很感激任何可以帮助我做一些不同的事情而不是找到一个合适的库的建议。
谢谢。
c - tcp(内核)绕过是如何实现的?
假设我想避免 linux 内核在处理传入数据包时的开销,而是想直接从用户空间获取数据包。我用谷歌搜索了一下,似乎需要做的就是使用带有一些套接字选项的原始套接字。是这样吗?还是比这更复杂?如果是这样,我可以用谷歌搜索或参考什么来实现这样的东西?
tcp-ip - 使用 GA 库的进程间通信
(GA) 全局数组库(ARMCI 的实现)如何用于位于不同远程机器上的两个进程之间的通信。
这是否类似于 TCP 套接字编程,其中一个进程等待数据而另一个进程传输它?
我尝试查看ga_put()和ga_get()是用于进程间通信的两个操作的文档。到目前为止,我只能想出一个在使用共享内存架构的同一台机器上运行的程序(我使用ga_put()和ga_get()将数据放入全局数组并分别获取它)。
现在,我想使用这个程序在两个远程进程之间进行数据通信(基本上是单向通信)。显然,将我在单台机器上运行的程序放在远程端会奏效。它需要某种方式来告诉我们应该访问哪台机器并获取正确的数据。这里是我需要你帮助的地方。我怎样才能做到这一点?(它在 GA 上的 TCP/IP 监听、接受和连接等价物是什么?)
还是 GA 在下面也使用 TCP/IP 套接字的情况?
有人可以向我解释一下吗?两个远程进程通信的示例代码也是可观的。
谢谢,
cuda - GPUDirect RDMA 从 GPU 传输到远程主机
设想:
我有两台机器,一个客户端和一个服务器,用 Infiniband 连接。服务器机器有一个 NVIDIA Fermi GPU,但客户端机器没有 GPU。我有一个在 GPU 机器上运行的应用程序,它使用 GPU 进行一些计算。GPU 上的结果数据从不被服务器机器使用,而是直接发送到客户端机器而不进行任何处理。现在我正在做一个cudaMemcpy
将数据从 GPU 获取到服务器的系统内存,然后通过套接字将其发送到客户端。我正在使用SDP为这种通信启用RDMA。
问题:
在这种情况下,我是否可以利用 NVIDIA 的 GPUDirect 技术摆脱cudaMemcpy
呼叫?我相信我已经正确安装了 GPUDirect 驱动程序,但我不知道如何在不先将其复制到主机的情况下启动数据传输。
我的猜测是不可能将 SDP 与 GPUDirect 结合使用,但是是否有其他方法可以启动从服务器机器的 GPU 到客户端机器的 RDMA 数据传输?
奖励:如果 somone 有一种简单的方法来测试我是否正确安装了 GPUDirect 依赖项,那也会很有帮助!
linux - infiniband rdma 传输不良 bw
在我的应用程序中,我使用 infiniband 基础架构将数据流从服务器发送到另一个服务器。我习惯于通过 infiniband 轻松开发 ip,因为我更熟悉套接字编程。到目前为止,性能(最大 bw)对我来说已经足够好(我知道我没有获得可实现的最大带宽),现在我需要从那个 infiniband 连接中获得更多带宽。
ib_write_bw 声称我的最大可实现带宽约为 1500 MB/s(我没有获得 3000MB/s,因为我的卡安装在 PCI 2.0 8x 中)。
到目前为止,一切都很好。我使用 ibverbs 和 rdma 编码了我的通信通道,但我得到的带宽远远低于我能得到的带宽,我什至得到的带宽比使用套接字少一点,但至少我的应用程序不使用任何 CPU 能力:
ib_write_bw:1500 MB/s
套接字:700 MB/s <= 我系统的一个核心在此测试期间处于 100%
ibvers+rdma: 600 MB/s <= 在这个测试期间根本没有使用 CPU
似乎瓶颈就在这里:
此时等待完成的下一个代码是:
从我的 ibv_post_send 到 ibv_get_cq_event 返回事件的时间是 13.3 毫秒,当传输 8 MB 的块时达到大约 600 MB/s。
要指定更多(在伪代码中我在全局范围内执行的操作):
主动方:
被动侧:
有谁知道我做错了什么?或者我可以改进什么?我不受“这里没有发明”综合症的影响,所以我什至愿意扔掉我到目前为止所做的事情并采用其他东西。我只需要点对点的连续传输。