假设 Machine-1 通过 RDMA 访问 Machine-2 内存中的数据,此操作是否会在 Machine-1 和 Machine-2 上产生内存带宽开销?
如果使用普通网卡通过 TCP 进行数据传输,Machine-1 和 Machine-2 都会经历网卡的 DMA 操作和内核网络堆栈的数据处理,这两者都会产生内存带宽开销。
如果使用RDMA,是否可以绕过内核网络堆栈?难道还不能绕过读/写数据的动作吗?
它可以绕过内核网络堆栈吗?
在计算中,远程直接内存访问是从一台计算机的内存到另一台计算机的内存的直接内存访问,而不涉及任一计算机的操作系统。
所以,根据它的定义,它将绕过内核网络堆栈。
但是,我怀疑这个定义有误导性:这些操作不可能不涉及操作系统;该定义试图表达的是,操作系统仅参与设置传输,从那一刻起,传输将在操作系统不充当中介的情况下继续进行。否则,整个概念将是一个巨大的安全漏洞。
难道还无法绕过读/写数据的动作吗?
这取决于你所说的“读/写数据的动作”是什么。 DMA 代表直接内存访问。显然,它的工作就是“访问”内存。当我们“访问”内存时,我们不仅仅是为了检查它是否运行良好,而是为了读取或写入它。所以会涉及到阅读和写作。只是CPU不必这样做。
它会产生内存带宽开销吗[?]
同样,这取决于“内存带宽开销”的含义。至少,每个 RDMA 传输都需要设置;这是开销。当然,在任何 DMA 传输期间,内存条都需要每隔几个时钟周期处理 DMA 电路的内存读写请求,这意味着 CPU 的某些请求通常会延迟一个时钟周期左右。这意味着将会出现放缓。我不知道此开销占总可用内存带宽的百分比。它可能可以忽略不计,但也可能不可忽略。如果您的预算非常紧张,以至于您必须提出这个问题,那么就不要依赖任何人的答案;而是做你自己的基准测试。
两侧?
一侧发生的任何事情也必然会发生在另一侧。否则,其中一侧就会神奇地工作,而我们还没有发明这一点。