mmap: отображение файлов в память
Коротко: С помощью mmap операционная система отображает файл в адресное пространство программы, так что его можно читать и записывать как массив в памяти.
Подробнее: Программа больше не вызывает read. При первом обращении к странице страничная ошибка запускает подгрузку с диска.
Подробности
- Вызов:
mmap(NULL, длина, PROT_READ, MAP_SHARED, fd, 0)возвращает указатель. В Python:mmap.mmap(...). - Преимущества: Нет копирования между памятью ядра и программы, удобный произвольный доступ, несколько процессов делят одни и те же страницы (разделяемая память).
- Анонимный mmap: Без файла, так распределители памяти (
mallocдля больших блоков) запрашивают память. - Ловушки: Обращение к усечённому файлу вызывает сигналы (SIGBUS). При множестве малых файлов или последовательном чтении обычное чтение часто не медленнее.
- Применение: Базы данных (LMDB, прежде MongoDB), исполняемые файлы и библиотеки сами загружаются через mmap, большие файлы моделей в ИИ.
- Страничный кэш: Данные лежат в страничном кэше ядра и вытесняются при нехватке памяти.
См. также: Copy-on-write