2015-11-28 65 views
4

RDMA是繞過應用程序和操作系統內核之間無用數據副本的有效方法。 Mmap是處理大文件的有效方式,就好像它只是一個字節數組。RDMA在mmaped區域上運行時會發生什麼?

我正在使用MPI over Infiniband,它支持進程之間的RDMA網絡操作。每個MPI進程都有一個非常大的文件與其他人共享。

每個MPI進程是否可以在每個大文件上創建mmap區域並與其他人共享?我希望允許每個進程讀取任何進程的任何文件,就像通過RDMA(MPI的單向通信)讀取其內存一樣。

據我所知,當應用程序調用RDMA操作時,它直接將'虛擬內存地址'傳遞給NIC。 NIC將處理從虛擬內存地址到其物理內存地址的轉換。如果RDMA驅動程序在向NIC發出請求之前固定了感興趣的頁面,我認爲它會起作用。有沒有人有任何經驗? :d

感謝

回答

4

是的,你可以使用RDMA映射mmap()的內存區域註冊。請參閱該文檔爲ibv_reg_mrhttp://www.rdmamojo.com/2012/09/07/ibv_reg_mr/),它說:

在調用進程的虛擬空間中的每個內存地址可以被註冊,包括但不限於:

  • 本地內存(無論是變量或陣列)
  • 全局存儲器(可變或陣列)
  • 動態分配的存儲器(使用malloc()或MMAP())
+0

感謝您的好答案:D我希望英特爾的MPI庫在Linux和Windows中都使用這個概念。 (似乎有必要固定興趣頁面,以便RDMA可以安全地閱讀頁面。) – syko

相關問題