我一直在阅读有关 RoCE 的文章,它讨论了将一台服务器的内存之间的数据零拷贝直接传输到另一台服务器的应用程序内存。大多数文章需要特别指出的是,这是在没有 CPU 参与的情况下完成的。但我不明白这是如何实现的。数据是如何在不经过 CPU 处理的情况下从适配器传输到 RAM 的?它如何知道应用程序的数据在 RAM 中的位置?
答案1
我认为您误解了“无 CPU”。这并不意味着 CPU 完全不参与 - 它只是意味着 CPU 没有进行复制。它通过驱动程序设置复制操作,然后硬件进行实际处理。
您的链接非常明确地说明了这一点 - 只需阅读即可:
RDMA 通过允许网络适配器直接从线路传输数据来支持零拷贝网络
这是复制操作,不是设置。必须有人告诉网络适配器。
要知道,现代网络真正发挥这一优势的速度是每秒 100+ 千兆位 - 10 千兆字节+,通常是多条线路组合,而如今的高端是 400 千兆位。
这是很多的 - 对于 CPU 来说,要从 RAM 读取,循环遍历然后将其发送到适配器,而您只需告诉适配器要读取和发送哪个内存即可。
但再次强调,“不参与”不是“根本没有 CPU”,而是“CPU 没有复制数据”。它仍然进行所有控制。