2017-04-21 55 views
0

我們有需要分配大量共享內存的代碼,並且希望實施快速的早期檢查以確定是否有足夠的空閒空間繼續運行。我發現了許多不同的方式,可以爲您提供有關共享內存的信息,但似乎都存在問題。以下是我試過到目前爲止:如何確定可用(未使用)共享內存的數量?

ipcs -lm 

在我的工作站,它返回的18014398442373116千字節的最大共享內存總量,這是荒謬的(〜16個艾字節)。

ipcs -m 

如果我加起來所有列出的段,我得到大約128 MB。看起來很合理。

def /dev/shm 

這表明32G的總大小,其似乎是合理的(I具有的RAM 64G),但使用僅示出了9 MB不與「IPCS -m」齧合。

free OR /proc/meminfo 

在我的機器,這些顯示大約140 MB的共享內存使用的(更符合「IPCS -M」線),但似乎其他機器不排隊,並在這些機器上,「人的自由'指定共享值已過時,應予以忽略。

我覺得我失去了一些非常基本的東西。任何幫助將不勝感激。

編輯:爲了給予更多有關情況的信息,這段代碼在超級計算機上運行,​​我們的代碼應該是運行在計算節點上的唯一東西。由於沒有別的應該分配大量的內存,所以前期檢查似乎是合理的。我們通常遇到的情況是一個計算節點,其上的內存沒有完全從上一份工作中清除。我們可以尋找現有的細分市場,但是如果有足夠的空間,我們希望允許用戶即使節點不乾淨也能運行。

+0

RAM的數量無關緊要,共享內存是虛擬內存,而不是真實內存。 – Barmar

+0

我意識到沒有單獨的物理共享內存塊,但即使交換,我也沒有在我的機器上獲得16艾字節的任何東西。我對RAM的評論只是因爲我讀過/ dev/shm通常是物理RAM大小的一半。也許不相關,但我在這裏,因爲我不明白,所以我包括它的完整性。 – rpmcnally

回答

1

如果嘗試它並處理異常或失敗,如果它不成功?否則,你有冒險的競爭條件。

+0

感謝您的建議。我在問題中添加了一些信息,但在我們的例子中,除了我們的代碼外,沒有什麼東西應該分配共享內存塊,所以前期檢查似乎是合理的。如果沒有可靠的方法來檢測可用空間,我將不得不嘗試一下並檢查錯誤,但是我希望避免它,因爲我們的MPI環境有點複雜。 – rpmcnally