Как работает кэш файловой системы Linux
Ядро резервирует определенный объем системной памяти для кэширования обращений к диску файловой системы, чтобы повысить общую производительность. Кеш в Linux называется Кэш страницы. Размер кеша страниц настраивается, при этом по умолчанию разрешено кэширование большого количества дисковых блоков. Максимальный размер кеша и правила удаления данных из кеша регулируются параметрами ядра. Подход кеширования linux называется кешем обратной записи. Это означает, что если данные записываются на диск, они записываются в память в кэш и помечаются как грязные в кеше, пока не будут синхронизированы с диском. Ядро поддерживает внутренние структуры данных, чтобы оптимизировать, какие данные удалять из кеша, когда в кеше требуется больше места.
Во время системных вызовов чтения Linux ядро проверяет, хранятся ли запрошенные данные в блоках данных в кеше, что будет успешным попаданием в кеш, и данные будут возвращены из кеша без выполнения каких-либо операций ввода-вывода в дисковую систему. В случае промаха кеша данные будут извлечены из системы ввода-вывода, и кеш будет обновлен на основе политик кэширования, поскольку эти же данные, вероятно, будут запрошены снова.
При достижении определенных пороговых значений использования памяти фоновые задачи начнут записывать грязные данные на диск, чтобы убедиться, что он очищает кеш памяти. Они могут повлиять на производительность приложений, интенсивно использующих память и ЦП, и требуют настройки администраторами и / или разработчиками.
Использование команды Free для просмотра использования кеша
Мы можем использовать команду free из командной строки, чтобы проанализировать системную память и объем памяти, выделенной для кеширования. См. Команду ниже:
# бесплатно -m
Что мы видим из бесплатно команда выше состоит в том, что есть 7.5 ГБ ОЗУ в этой системе. Из них используется только 209 МБ и 6.5 МБ бесплатно. 667 МБ используется в буферном кеше. Теперь давайте попробуем увеличить это число, запустив команду для создания файла размером 1 гигабайт и прочитав файл. Приведенная ниже команда сгенерирует примерно 100 МБ случайных данных, а затем добавит 10 копий файла в одну large_file.
# dd if = / dev / random of = / root / data_file count = 1400000# для i in 'seq 1 10'; do echo $ i; cat файл_данных >> большой_файл; Выполнено
Теперь мы обязательно прочитаем этот 1-гигабайтный файл, а затем снова проверим бесплатную команду:
# cat large_file> / dev / null# бесплатно -m
Мы видим, что использование буферного кеша увеличилось с 667 до 1735 мегабайт, что примерно на 1 гигабайт увеличилось в использовании буферного кеша.
Команда Proc Sys VM Drop Caches
Ядро linux предоставляет интерфейс для удаления кеша, давайте попробуем эти команды и посмотрим, как они влияют на бесплатную настройку.
# эхо 1> / proc / sys / vm / drop_caches# бесплатно -m
Выше мы видим, что большая часть выделения буферного кеша была освобождена с помощью этой команды.
Экспериментальная проверка работы Drop Cache
Можем ли мы сделать проверку производительности использования кеша для чтения файла? Давайте прочитаем файл и запишем его обратно в / dev / null, чтобы проверить, сколько времени требуется для чтения файла с диска. Мы приурочим его к время команда. Мы выполняем эту команду сразу после очистки кеша с помощью приведенных выше команд.
Прошло 8.4 секунды на чтение файла. Давайте прочитаем это еще раз, что файл должен находиться в кеше файловой системы, и посмотрим, сколько времени это займет сейчас.
Бум! Потребовалось только .2 секунды по сравнению с 8.4 секунды на чтение, когда файл не был кэширован. Чтобы проверить, давайте повторим это еще раз, сначала очистив кеш, а затем прочитав файл 2 раза.
Он работал отлично, как ожидалось. 8.5 секунд для некэшированного чтения и .2 секунды для чтения из кеша.
Заключение
Кэш страниц автоматически включается в системах Linux и прозрачно ускоряет ввод-вывод, сохраняя в кеше недавно использованные данные. Если вы хотите вручную очистить кеш, это можно легко сделать, отправив команду echo в файловую систему / proc, указав ядру удалить кеш и освободить память, используемую для кеша. Инструкции по запуску команды были показаны выше в этой статье, а также показана экспериментальная проверка поведения кеша до и после очистки.