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