На моем ящике запущены два процесса => A и B.
Всякий раз, когда происходит интенсивная операция ввода-вывода на диск, вызванная записью больших файлов на диск процессом A, я вижу, что запись файлов в процессе B периодически останавливается. Я заметил, что в моем ядре Linux были следующие настройки виртуальной памяти.
vm.dirty_background_ratio = 5
vm.dirty_background_bytes = 0
vm.dirty_ratio = 20
vm.dirty_bytes = 0
vm.dirty_writeback_centisecs = 500
vm.dirty_expire_centisecs = 3000
В документации указано, что «dirty_background_ratio» - это процент памяти, занятой «грязными» страницами, перед тем как фоновые потоки очистки ядра перейдут в действие, чтобы сбросить байты на диск. Учитывая, что у меня 64 ГБ памяти, эта фоновая очистка должна начаться, когда размер кэша грязных страниц достигнет ~ 3,2 ГБ, и я вижу, что это действительно так, когда процесс A записывает на диск.
Однако, как только начинается фоновая очистка, запись в файл в процессе B начинает прерываться с перерывами на периоды примерно 10-20 секунд. Учитывая, что эта очистка диска происходит в фоновом режиме, почему запись из процесса B останавливается, учитывая, что все записи сначала идут в кеш страницы, а не напрямую на диск?