Разница между vm.dirty_ratio и vm.dirty_background_ratio?

В настоящее время я экспериментирую с параметрами ядра, найденными в /proc/sys/vm, особенно dirty_ratio и dirty_background_ratio.

Ядро doc имеет следующие объяснения для обоих:

dirty_background_ratio

Содержит в процентах от общей доступной памяти, содержащей свободные страницы и исправляемые страницы, количество страниц, на которых фоном ядро потоки flusher начнут записывать грязные данные.

и

dirty_ratio

Содержит в процентах от общей доступной памяти, содержащей свободные страницы и возвращаемые страницы, количество страниц, на которых выполняется процесс, который генерация записи диска сама начнет записывать грязные данные.

В моей Linux-системе dirty_background_ratio равно 10 и dirty_ratio равно 20. Я понимаю, что разница в том, кто пишет эти грязные данные. Поэтому, если моя используемая память достигает 10%, ядро ​​начинает писать, а 20% никогда не должно быть достигнуто.

Теперь мой вопрос: имеет ли значение dirty_background_ratio и dirty_ratio большее значение или это просто вопрос "что такое меньшее значение и кто его имеет?"

Ответ 1

Имеет ли значение dirty_background_ratio и dirty_ratio большее значение, или это просто вопрос "что такое меньшее значение и кто его имеет?"

В более простых словах:

vm.dirty_background_ratio - это процентная доля системной памяти, которая при загрязнении системы может начать запись данных на диски.

vm.dirty_ratio - это процентная доля системной памяти, которая при загрязнении процесса записи делает блокировку и запись грязных страниц на диски.

Эта настройка зависит от того, что работает ваша система, если вы запускаете большую базу данных, ее рекомендуют сохранять эти значения на низком уровне, чтобы избежать сбоев в ящике ввода-вывода и при увеличении загрузки системы.

ex:

vm.dirty_background_ratio=10
vm.dirty_ratio=15

В этом примере, когда грязные страницы превышают vm.dirty_background_ratio=10, запускается ввод-вывод, то есть они начинают сбрасываться/записываться на диск. Когда общее количество грязных страниц превышает vm.dirty_ratio=15, все записи блокируются, пока некоторые из грязных страниц не будут записаны на диск. Вы можете представить vm.dirty_ratio=15 как верхний предел.

Ответ 2

Я был заинтригован этим самым вопросом и так немного экспериментировал с моим Debian 7.10 работает под управлением Linux 3.2.0-4-amd64, используя sysbench 0.4.12, изменяя:

  • /Труды/SYS/VM/dirty_ratio
  • /proc/sys/vm/dirty_background_ratio

Эти настройки являются способом задержки записи на диск. Они полезны, если у вас есть приложения, которые пишут нечасто или в небольших кусках (например, веб-браузер). Если в системе есть только одно приложение, которое просто генерирует данные со скоростью, большей, чем максимальная, поддерживаемая диском, то никакие настройки не имеют значения. Запись займет столько времени, сколько потребуется.

Dirty Ratio (DR) приводит к процессу, который заставлял количество грязных страниц пересекать пороговое значение для блокировки. Dirty Background Ratio (DBR) управляет записью грязных страниц в фоновом режиме. Таким образом, если у вас низкий DBR, более высокий DR и все ваши процессы записываются небольшими фрагментами, которые не будут полностью пересекаться с поддерживаемой скоростью записи на диске (например, 50 МБ/с), тогда вы найдете систему, которая очень отзывчива. Это впечатляет, если учесть, что запись в ОЗУ обычно в 100 раз быстрее (5 ГБ/с)! Это значение DBR.

Параметры конфигурации полезны, когда вас беспокоят приложения, которые пишут нечасто. Вы не хотите, чтобы процесс записывал байт или читал несколько килобайт для остановки в течение 20 секунд, потому что слишком много грязных данных. Это важность того, чтобы не иметь слишком высокого DR. Он также обеспечивает доступность некоторой памяти для кэширования недавно использованных данных.