Функция продолжает запись до тех пор, пока не выполнятся два следующих условия.
• Указанное минимальное количество страниц записано на диск.
• Объем свободной памяти превышает соответствующее значение параметра dirty_background_ratio.
Выполнение этих условий гарантирует, что демон pdflushвыполнил свою работу по предотвращению нехватки памяти. Если эти условия не выполняются, то обратная запись может остановиться только тогда, когда демон pdflushзапишет на диск все несохраненные страницы и для него больше не будет работы.
Во-вторых, назначение демона pdflush— периодически переходить в состояние выполнения (независимо от состояния нехватки памяти) и записывать на диск очень давно измененные страницы памяти. Это гарантирует, что измененные страницы не будут находиться в памяти неопределенное время. При сбоях системы будут потеряны те страницы памяти, которые не были сохранены на диске, так как содержимое памяти после перегрузки не сохраняется. Следовательно, периодическая синхронизация страничного кэша с данными на диске является важным делом. При загрузке системы инициализируется таймер, периодически возвращающий к выполнению поток pdflush, который выполняет функцию wb_kupdate(). Эта функция выполняет обратную запись данных, которые были изменены более чем dirty_expire_centisecsсотых секунды тому назад. После этого таймер снова инициализируется, чтобы сработать через dirty_expire_centisecsсотых секунды. Таким образом потоки pdflushпериодически возвращаются к выполнению и записывают на диск все измененные страницы, данные в которых старше, чем указанный лимит.
Системный администратор может установить эти значения с помощью каталога /proc/sys/vmи утилиты sysctl. В табл. 15.1 приведен список всех соответствующих переменных.
Таблица 15.1. Параметры для настройки демона pdflush
| Переменная |
Описание |
dirty_background_ratio |
Объем свободной оперативной памяти, при котором демон pdflushначинает обратную запись незаписанных данных |
dirty_expire_centisecs |
Время, в сотых долях секунды, в течение которого незаписанные данные могут оставаться в памяти, перед тем как демон pdflushне запишет их на диск при следующем периоде обратной записи |
dirty_ratio |
Процент от общей оперативной памяти, соответствующий страницам памяти одного процесса, при котором начинается обратная запись незаписанных данных |
dirty_writeback_centisecs |
Насколько часто, в сотых долях секунды, процесс bdflushвозвращается к выполнению для обратной записи данных |
laptop_mode |
Переменная булевого типа, которая включает или выключает режим ноутбука (см. следующий раздел) |
Код потока pdflushнаходится в файлах mm/page-writeback.cи fs/fs-writeback.c.
Режим ноутбука
Режим ноутбука — это специальная политика обратной записи страниц с целью оптимизации использования батареи и продления срока ее работы. Это делается путем минимизации активности жестких дисков, чтобы они оставались в остановленном состоянии по возможности долго. Конфигурировать этот режим можно с помощью файла /proc/sys/vm/laptop_mode. По умолчанию в этом файле записано значение 0 и режим ноутбука выключен. Запись значения 1 в этот файл позволяет включить режим ноутбука.
В режиме ноутбука существует всего одно изменение в выполнении обратной записи страниц. В дополнение к обратной записи измененных страниц; памяти, когда они становятся достаточно старыми, демон pdflushтакже выполняет и все остальные операции дискового ввода-вывода, записывая все дисковые буферы на диск. Таким образом демон pdflushпользуется тем преимуществом, что диск уже запущен, а также он гарантирует, что в ближайшем будущем диск снова запущен не будет.
Такое поведение имеет смысл, когда параметры dirty_expire_centisecsи dirty_writeback_centisecsустановлены в большие значения, скажем 10 минут. При таких задержках обратной записи диск запускается не часто, а когда он все-таки запускается, то работа в режиме ноутбука гарантирует, что этот момент будет использован с максимальной эффективностью.
Во многих поставках ОС Linux режим ноутбука автоматически включается и выключается, при этом также могут изменяться и другие параметры демона pbflush, когда заряд батареи уменьшается. Такое поведение позволяет получать преимущества от режима ноутбука при работе от батареи и автоматически возвращаться к нормальному поведению, когда машина включается в электрическую сеть.
Читать дальше