С извинениями @samold, "swappiness" не имеет к этому никакого отношения. Перестановка просто влияет на то, как ядро обменивается заменой грязных анонимных страниц по сравнению с удалением страниц кэша страниц при нехватке памяти.
Вам нужно поиграть с настройками Linux VM, управляющими задачей pdflush . Для начала я бы предложил:
sysctl -w vm.dirty_writeback_centisecs=360000
По умолчанию vm.dirty_writeback_centisecs
равно 3000, что означает, что ядро будет считать любую грязную страницу старше 30 секунд «слишком старой» и попытаться сбросить ее на диск. Проворачивая его до 1 часа, вы сможете вообще избежать сброса грязных страниц на диск, по крайней мере, во время короткого теста. За исключением ...
sysctl -w vm.dirty_background_ratio=80
По умолчанию vm.dirty_background_ratio
равно 10, как и в 10 процентах. Это означает, что когда более 10 процентов физической памяти занято грязными страницами, ядро будет думать, что ему нужно заняться записью чего-либо на диск, даже если оно моложе dirty_writeback_centisecs
. Поверните его до 80 или 90, и ядро должно быть готово вынести большую часть оперативной памяти, занятую грязными страницами. (Я бы не стал устанавливать этот слишком высокий, хотя, потому что держу пари, что никто никогда этого не сделает, и это может вызвать странное поведение.) Кроме ...
sysctl -w vm.dirty_ratio=90
По умолчанию vm.dirty_ratio
равен 40, что означает, что, если 40% ОЗУ составляют грязные страницы, процессы, пытающиеся создать больше грязных страниц, будут блокировать до тех пор, пока что-то не будет выселено. Всегда делайте это больше dirty_background_ratio
. Хм, подумай об этом, поставь этот перед этим, просто чтобы убедиться, что этот всегда больше.
Вот и все для моих первоначальных предложений. Возможно, ваше ядро в любом случае начнет удалять страницы; Виртуальная машина Linux - загадочный зверь, и кажется, что она настраивается в каждом выпуске. Надеюсь, это послужит отправной точкой.
См. Documentation / sysctl / vm.txt в исходных кодах ядра для полного списка настроек VM. (Желательно обращаться к документации по версии ядра, которую вы на самом деле используете.)
Наконец, используйте интерфейс / proc / PID / pagemap , чтобы увидеть, какие страницы действительно грязные в любое время.