2011-12-26 4 views
2

Я хотел бы использовать mmap для отображения LARGE смежных областей памяти в мой процесс. Это просто большой предварительно выделенный буфер, большинство из которых вряд ли будут использоваться каждый. Я могу фактически создавать терабайты таких областей памяти, даже если это превышает мою физическую память + размер жесткого диска. Linux будет отображаться на страницах, когда я получаю доступ к адресам в моей отображаемой области. К сожалению, если я создаю дамп ядра после вызова mmap, но прежде чем касаться новой области памяти, основной дамп будет включать эту область LARGE. Зачем? Linux должен был бы перейти на новую страницу нулевой заполненной памяти, чтобы записать ее в основной файл.Почему linux-dump очищает страницы MAP_ANONYMOUS памяти до дампа ядра?

Зачем мне это нужно? Мой код был бы проще и эффективнее, если бы мой продюсер всегда мог добавлять данные в один непрерывный буфер, и мой потребитель мог прочитать данные за производителем и предположить, что все данные между его считывающей головкой и головкой записи производителя расходуются. Я планировал использовать madvise после того, как моя прочитанная глава переместила границу страницы, чтобы позволить ОС знать, что мне больше не нужно сохранять эти страницы памяти.

+0

Считаете ли вы использование 'MAP_NORESERVE' для первой большой карты? –

+0

MAP_NORESERVE помогает ослабить эвристические проверки, позволяющие mmap преуспеть там, где он может отсутствовать. К сожалению, это не мешает тому, чтобы основной дамп включал немодифицированные нулевые заполненные страницы в дампе ядра. –

ответ

2

Основной дамп будет включать в себя эту большую область памяти. Зачем?

Поскольку ядро ​​не оптимизировано для уменьшения размера файла ядра в этих условиях.

Возможно, что ядро ​​может просмотреть каждую страницу в данной области памяти и пропустить все страницы, которые не изменены. Я не уверен, что такой патч будет принят.

Вместо этого вы можете использовать Google user-level coredumper. Он обрезает конечные страницы с нулевым заполнением.

Смежные вопросы