2016-05-16 11 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 = 1ギガバイト

私は、ループ内のステートメントの上に呼び出しています。 4回までの反復はうまくいきます。 5回目の反復でmmapが失敗しました。

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

上記の文(hugepagesなし)は、任意の反復回数で完全に機能します。私はhugepagesに関連する情報がありませんか? mmap fail after 4GBのように "MAP_NORESERVE"フラグも試しました。

どのような情報でも大歓迎です。ありがとうございました。

+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 

4ギガバイト=>それはすでに消費さ2048 * 2Mバイト= 4GBの

2048巨大なページがあります。

もう1GBのメモリが必要です(1GB/2MB = 512)512枚以上の巨大なページ。しかし、2500 - 2048 = 452しか残っていません。しかし、512が必要です。なぜmmapが失敗したのかという問題です。上記のファイル(/ proc/sys/vm/nr_hugepages)の内容を2560に編集すると、5GBが許されます。必要なメモリ容量に応じて変更してください。 @ KlasLindbäckに感謝します。私は戻ってthe linkを参照して、小規模な研究は作業を公開しました

関連する問題