Memory

RDMA 如何在沒有 CPU 的情況下在兩台伺服器之間傳輸?

  • November 3, 2021

我一直在閱讀有關 RoCE 的內容,它談到了將一台伺服器中的記憶體之間的數據零拷貝直接傳輸到另一台伺服器中的應用程序的記憶體。大多數文章都指出這是在沒有 CPU 參與的情況下完成的。我不明白這是如何實現的。數據如何在不經過 CPU 處理的情況下從適配器傳到 RAM?它如何知道應用程序的數據在 RAM 中的位置?

我認為您誤解了“沒有 CPU”。這並不意味著 CPU 根本不參與 - 它只是意味著 CPU 沒有進行複制。它通過驅動程序進行複制操作的設置,然後硬體進行實際處理。

您的連結非常明確 - 只需閱讀它:

RDMA 通過使網路適配器能夠直接從線路傳輸數據來支持零拷貝網路

那是複制操作,而不是設置。必須有人告訴網路適配器。

了解真正發揮作用的現代網路是每秒 100+ gigabit - 10 gigabyte+ - ,通常是多條線路相結合,如今的高端是 400gigabit。

這是很多 - CPU 從 RAM 讀取,循環它然後將它發送到適配器,當你可以告訴適配器讀取和發送哪個記憶體時。

但同樣,“不參與”不是“根本沒有 CPU”,而是“CPU 沒有複製數據”。它仍然進行所有控制。

引用自:https://serverfault.com/questions/1082543