Использование памяти при загрузке файлов через mmap () - PullRequest
1 голос
/ 06 августа 2009

Хотелось бы знать, что, если существует взаимосвязь между максимальным объемом памяти, который можно использовать для сопоставления файла через mmap (), и размером ОЗУ в Linux-боксе. Я попытался отобразить в памяти некоторые файлы и обнаружил, что больше не могу отобразить файлы, когда использование «Сопоставленный» приближается к «MemTotal» (просмотр через cat /proc/meminfo).

Из / proc / meminfo на 64-битной Linux-системе:

MemTotal: 32909628 кБ

MemFree: 221744 кБ

Буферы: 1800 кБ

Отображено: 31642928 кБ

CommitLimit: 38012616 КБ

Committed_AS: 42641120 кБ

VmallocTotal: 536870911 кБ

VmallocUsed: 299920 кБ

VmallocChunk: 536568999 кБ

Итак, я прав, предполагая, что использование "Mapped" никогда не превысит "MemTotal". Я путаюсь с мнением о том, что память всегда виртуальная, когда мы отображаем файл.

Спасибо!

Ответы [ 2 ]

1 голос
/ 06 августа 2009

Нет, если только вы не записали себя в память memlock (), скорее всего, вы достигли предела адресного пространства, отображаемого в ОС. Тот факт, что он аккуратно выходит на 32 ГБ, так же, как и ваша RAM, скорее всего совпадение.

Редактировать : На самом деле, если вы используете MAP_PRIVATE, то, возможно, вы действительно выходите за пределы памяти (MAP_PRIVATE учитывается как частное выделение, поэтому для его покрытия требуется физическая память или подкачка). если агрессивный overcommit не включен). Попробуйте использовать MAP_SHARED, если вы еще этого не сделали.

0 голосов
/ 26 июня 2013

Вы можете отобразить большие файлы в блоках, которые помещаются в память (см. Параметры len и off в mmap).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...