Открыть сервис

Буферный кэш

Буферный кэш (англ. buffer cache, page cache) — это область оперативной памяти, используемая операционной системой для временного хранения данных, считанных с диска или записываемых на диск. Основная цель буферного кэша — ускорение доступа к данным за счёт снижения количества операций ввода-вывода (I/O) с медленными запоминающими устройствами, такими как жёсткие диски (HDD) или твердотельные накопители (SSD). Буферный кэш является частью подсистемы управления памятью ядра операционной системы и реализован во всех современных ОС, включая Linux, Windows, macOS и BSD.

История

Концепция кэширования данных в оперативной памяти для ускорения доступа к диску возникла в ранних многозадачных операционных системах 1960-х годов. В системе Multics использовались механизмы кэширования страниц памяти, что стало предшественником современного буферного кэша. В UNIX-подобных системах, начиная с версий 1970-х годов, был реализован отдельный буферный кэш для блочных устройств (дисков), который позже эволюционировал в единый page cache (кэш страниц) в ядре Linux (начиная с версии 2.2, 1999 год). В Windows NT (1993 год) была внедрена система кэширования файлов, которая также использует оперативную память для хранения часто запрашиваемых данных.

Принцип работы

Буферный кэш работает на основе принципа локальности ссылок: программы чаще обращаются к недавно использованным данным или данным, расположенным рядом с ними. Когда процесс запрашивает чтение данных с диска, ядро сначала проверяет, есть ли эти данные в кэше. Если данные присутствуют (кэш-попадание, cache hit), они немедленно возвращаются из оперативной памяти, что занимает наносекунды или микросекунды. Если данных нет (кэш-промах, cache miss), ядро инициирует чтение с диска, помещает считанные данные в кэш и затем передаёт их процессу. Дисковые операции занимают миллисекунды, что делает кэш-попадания значительно более быстрыми.

При записи данных буферный кэш может работать в двух основных режимах:

Классификация

В зависимости от реализации и назначения выделяют несколько типов буферного кэша:

По уровню в иерархии памяти

По типу данных

По способу управления

Устройство и характеристики

Буферный кэш реализован как структура данных в ядре ОС, обычно в виде хеш-таблицы или дерева поиска (например, красно-чёрного дерева в Linux для page cache). Ключом является идентификатор блока на диске (номер устройства и номер блока). Каждый элемент кэша содержит копию данных и метаинформацию (флаг «грязный» — данные изменены, но не записаны на диск, счётчик ссылок и т.д.).

Основные характеристики:

Применение и значение

Буферный кэш критически важен для производительности практически всех компьютерных систем. Его использование позволяет:

В операционных системах для серверов и рабочих станций буферный кэш может занимать до 50–80% всей оперативной памяти, что является нормой. В Linux этот объём отображается в строке «buff/cache» утилиты free.

Примеры реализации

Linux

В Linux буферный кэш реализован как единый page cache, который кэширует как файловые данные, так и данные блочных устройств. Управляется через подсистему VFS (Virtual File System). Для мониторинга используются утилиты free, vmstat, top, htop, а также файлы в /proc/meminfo. Параметры кэша можно настраивать через файлы /proc/sys/vm/ (например, dirty_ratio, dirty_expire_centisecs).

Windows

В Windows используется файловый кэш (File System Cache), который является частью диспетчера памяти (Memory Manager). Он кэширует данные файлов, отображаемых в память, и управляется автоматически. Для мониторинга доступны счетчики производительности (Performance Monitor) и команда RAMMap из пакета Sysinternals.

macOS

В macOS (XNU) используется unified buffer cache, аналогичный Linux. Кэш управляется ядром и может быть просмотрен через утилиту vm_stat или Activity Monitor.

Критика и ограничения

Интересные факты

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →