2013-11-17 5 views
1

Я не знаю, какие знания я пропустил для понимания mmap. Я просто не могу понять. Но позвольте мне задать свой вопрос таким образом:mmap несколько кусков файлов и объектов mmap-памяти (Python)

  • У меня есть, скажем, 3 куска файла, размеры которых равны s1, s2, s3.
  • s1, s2 и s3 все меньше, чем ограничение по размеру для Mmap (SLM), то есть s1 < SLM; s2 < SLM; s3 < ОДС.
  • Но s1, s2 и s3 должны быть больше, чем предел размера для mmap, т. Е. S1 + s2 + s3> SLM.
  • Я собираюсь отобразить 3 фрагмента файла и кешировать объекты mmap в словаре Python, один объект mmap для фрагмента файла.

Мои вопросы:

  • Может общее количество файлов размеров порций (s1 + s2 + s3) превышает предельный размер для ттар?
  • В этом случае, как mmap выделяет или использует память и виртуальную память?

Любой ответ будет применен.

+0

Можете ли вы сказать, откуда взялся «Предел размера для Mmap»? Например. какая страница руководства, на какой системе или на странице документации Windows, и т. д. –

+0

Я действительно не могу этого сказать. «Ограничение размера для Mmap» - это моя собственная формулировка. Кроме того, что существует какой-то предел, я не очень разбираюсь в mmap. Я использую Win32, «ограничение размера для mmap» на моем компьютере составляет около 1 ГБ, когда отображается один файл. – DingZh

ответ

1

Я не уверен, какой предел вы говорите, и это вполне может быть зависящим от системы. В Linux ограничение на количество отображаемых данных зависит от RLIMIT_AS и конфигурации ядра. В зависимости от макета памяти, вы можете mmap больше, чем вы можете malloc (распределение кучи, где находятся большинство объектов Python).

Пределы per-mmap могут быть зависимыми от системы или просто зависеть от того, какие непрерывные диапазоны все еще доступны в вашей виртуальной памяти. Взгляните на /proc/$$/maps в Linux или на инструмент отладки, такой как MHS на Windows, сообщит вам, как это выглядит. Основное ограничение заключается в том, что смещение, переданное в mmap, должно быть кратным mmap.ALLOCATIONGRANULARITY. Так как каждый mmap должен найти промежуток, чтобы вписаться в карту виртуальной памяти, несколько mmaps часто могут превышать общий размер одного возможного mmap. Могут быть установлены некоторые дополнительные ограничения, такие как автораспределенные адреса только в определенном диапазоне, а диапазоны ограничены использованием ядра.

Было бы также неудивительно найти ограничение на количество отображений в любое время; если вы делаете много сопоставлений, возможно, вам придется закрыть те, которые вам не нужны.

Gustavo Duarte опубликовал довольно хорошую статью с именем Anatomy of a Program in Memory, которая показывает, что обычно содержит виртуальная память, и некоторые примеры различных конфигураций ОС. Соотношения зависят от конфигурации системы (см., Например, переключатель/3GB), а в 64-битных системах может быть гораздо больше места.

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