RDMA如何将远程内存映射到本地虚拟内存?

问题描述 投票:0回答:1

我是 RDMA 新手,刚刚开始研究 OPENSHMEM 和 UCP。我看到它们都允许将远程内存区域映射到本地虚拟内存空间并使用常规加载和写入来访问它。但在我的理解中,RDMA操作需要由程序员显式调用?

举个例子,在SHMEM的文档中,我们有以下内容

#include <shmem.h>
#include <stdio.h>
int main(void) {
static int dest[4];
shmem_init();
int mype = shmem_my_pe();
if (mype == 0) { /* initialize PE 1’s dest array */
int *ptr = shmem_ptr(dest, 1);
if (ptr == NULL)
printf("can’t use pointer to directly access PE 1’s dest array\n");
else
for (int i = 0; i < 4; i++)
*ptr++ = i + 1;
}
shmem_barrier_all();
if (mype == 1)
printf("PE 1 dest: %d, %d, %d, %d\n", dest[0], dest[1], dest[2], dest[3]);
shmem_finalize();

在上面的例子中,

ptr
id 直接解引用并修改。我想知道这是如何实现的? RDMA 是否能够将内存区域映射到本地内存空间?该区域始终受到保护,无论何时访问,RDMA 操作都会被内核调用?

dma rdma ucp ucx
1个回答
-1
投票

据我所知,RDMA 本身并不将远程内存映射到本地地址空间,像 OpenSHMEM 这样的编程模型提供了抽象,使其看起来就像您正在访问本地内存一样。实际的实现涉及复杂的运行时系统,这些系统将这些看似本地的访问转换为适当的 RDMA 操作,通常每次访问都无需内核参与。

所以,是的,这种方法可以更轻松地编程,同时仍然利用 RDMA 硬件的性能优势。

© www.soinside.com 2019 - 2024. All rights reserved.