2013-05-16 90 views
1

我試圖診斷ibv_reg_mr()在我使用的軟件中拋出的內存分配錯誤,我懷疑它與某些Mellanox Infiniband卡的已知問題有關,默認的最大內存可以註冊大約2GB(參見FAQ#18這裏http://www.open-mpi.org/faq/?category=openfabrics)。查找允許的最大值ibv_reg_mr

我希望能夠明確地確認是否屬實,以便我可以快速與系統管理員協商解決方案。不熟悉RDMA和Infiniband,有人可能會建議(a)一個簡單的程序,可以註冊任意數量的內存,以便我可以在最大允許值下觸發錯誤,或者(b)建議一種方式,讓我可能會決定Infiniband目前配置的方式,因爲我沒有root權限?

謝謝大家!

傑森

回答

3

你可以閱讀從sysfs了Mellanox公司的InfiniBand HCA驅動程序的參數和你不需要root訪問權限這樣做。模塊<modname>的參數可在/sys/module/<modname>/parameters/中找到。每個參數都以文本僞文件的形式公開,只需讀取文件的內容即可讀取其值。你甚至可以使用標準的Unix命令行工具來做到這一點。

對於mlx4_core模塊使用下面的公式來確定登記存儲器的最大量:

max_reg = (1 << log_num_mtt) * (1 << log_mtts_per_seg) * PAGE_SIZE 

對於ib_mthca模塊的公式爲:

max_reg = (num_mtt - fmr_reserved_mtts) * (1 << log_mtts_per_seg) * PAGE_SIZE 

其中:

  • num_mtt是內存轉換的最大數量每個HCA的表(MTT)細分;
  • log_num_mttnum_mtt的二進制對數;
  • fmr_reserved_mtts是爲FMR保留的MTT段的數量;
  • log_mtts_per_seg是每段的MTT條目數的二進制對數。
  • PAGE_SIZE是系統頁面大小,通常在大多數當前平臺上是4 KiB。

可以從sysfs的相應模塊目錄中讀取這些參數(PAGE_SIZE除外)中的每一個。

這兩個模塊都可能被加載。在這種情況下,請執行Open MPI所做的操作:首先查找mlx4_core,然後查找ib_mthca秒。

+0

Hristo,很好的答案。謝謝! –

+0

只需快速跟進一下:如果log_num_mtt設置爲0(對我而言),這是否表明設置爲_actually_零?這是否意味着它是默認設置? OFED 1.5.3的手冊說默認這個值是20。 –

+0

這意味着只有一個MTT(1的log2是0)。你檢查了兩個模塊的設置嗎?模塊參數也可以在/etc/modprobe.d/中配置。 –