Linux Файлы с отображением памяти резервируют много физической памяти

У меня есть проблема, которая была описана в нескольких потоках, касающихся отображения памяти и растущего потребления памяти под Linux.

Когда я открываю файл размером 1 ГБ в Linux или MacOS X и отображаю его в памяти с помощью

me.data_begin = mmap(NULL, capacity(me), prot, MAP_SHARED, me.file.handle, 0);

и последовательно читаю отображенная память, моя программа использует все больше и больше физической памяти, хотя я использовал posix_madvise (даже вызывал его несколько раз в процессе чтения):

posix_madvise(me.data_begin, capacity(me), MMAP_SEQUENTIAL);

безуспешно. : - (

Я пробовал:

  • разные флаги MMAP_RANDOM, MMAP_DONTNEED, MMAP_NORMAL безуспешно
  • posix_fadvise (me.file.handle, 0, capacity (me), POSIX_FADV_DONTNEED) до и после вызова mmap -> безуспешно

Он работает под Mac OS X !!! когда я комбинирую

posix_madvise(.. MMAP_SEQUENTIAL)

и

msync(me.data_begin, capacity(me), MS_INVALIDATE).

Резидентная память меньше 16M (я периодически вызывал msync после 16 миллионов шагов).

Но под Linux ничего не работает . У кого-нибудь есть идея или история успеха решения моей проблемы в Linux?

Ура, Дэвид

5
задан Dave 24 September 2010 в 16:45
поделиться