2016-05-16 82 views
0

我使用「巨大頁面(1MB大小)」和使用mmap分配內存。分配4 GB內存後,mmap返回失敗。使用巨大頁面分配的內存是否有限制?

mmap(NULL, memsize, PROT_READ | PROT_WRITE,MAP_PRIVATE | MAP_ANONYMOUS |MAP_POPULATE | MAP_HUGETLB, -1, 0); 

這裏memsize個= 1GB

我打電話上面的循環語句。 Upto 4迭代很好。在第5次迭代中,mmap失敗。

mmap(NULL, memsize, PROT_READ | PROT_WRITE,MAP_PRIVATE | MAP_ANONYMOUS |MAP_POPULATE , -1, 0); 

上面的語句(沒有巨大的頁面)完美地適用於任何數量的迭代。我是否缺少任何有關巨大頁面的信息? 我也嘗試過「MAP_NORESERVE」標誌,如mmap fail after 4GB中所述。

任何形式的信息將不勝感激。謝謝。

+0

'mmap returns fail' - 這沒有用 – KevinDTimm

+0

你的系統有多少可用?你可以使用'cat/proc/meminfo |列出它grep HugePages'。補充閱讀:https://www.kernel.org/doc/Documentation/vm/hugetlbpage.txt –

+0

@KevinDTimm:我檢查了返回值(MAP_FAILED),然後只有我結束了mmap失敗。 – ANTHONY

回答

1

更改根據要分配的內存量在文件

/proc/sys/vm/nr_hugepages 

分配「號巨大的頁面」。 早些時候說:

>cat /proc/meminfo | grep HugePages 
HugePages_Total = 2500 

4GB =>它已經消耗2048 *的2Mb =的4Gb

2048大內存頁。

需要更多的GB內存(1GB/2MB = 512)512個更大的頁面。但2500 - 2048 = 452只剩下。但你需要512.這就是爲什麼mmap失敗的問題。如果您將上述文件(/ proc/sys/vm/nr_hugepages)內容編輯爲2560,則允許5GB。根據您需要的內存量更改它。感謝@ KlasLindbäck。我回來了the link,小研究暴露了工作