Добрый день.
Запускаю много-много вм ) Вываливаюсь в своп не смотря на то что cached мог бы и подвинуться. sync && echo 1 > /proc/sys/vm/drop_caches помогает и после этого запускаю еще одну виртуалку, без вываливания в своп. своп кстати выставлен в ноли vm.swappiness=0 но судя по vmstat в своп пишет все равно. Можно записать в крон дропать кеши, но это какой то педальный способ.
Почитал всякое о параметрах /proc/sys/vm
Думал-думал, сложилась следующая картина
в условиях нехватки свободной памяти происходит сканирование памяти на предмет dirty страничек частота сканирования задается через параметр dirty_writeback_centisecs после нахождения dirty pages ядро сравнивает их «возраст» с параметром dirty_expire_centisecs если возраст страницы больше или равно - записать их на диск
размер dirty страниц максимальный размер страничек порожденных одним процессом (лимит, после которого они в обязательном порядке будут записаны) устанавливается через dirty_ratio в процентах от общего размера памяти
dirty_background_ratio Минимальное число памяти (в процентах), где позволено хранить гразные данные вместо записи на диск. Этот параметр должен быть намного меньше чем dirty_ratio что бы позволить записывать куски грязных данных за один проход. по идее оно должно быть равно размеру (или четным) блока файловой системы во избежание фрагментации
по идее необходимо увеличить частоту сканирования (увеличится энергопотребление) и нагрузка на винт понизить dirty_expire_centisecs (больше страниц попадает под запись)
понизить dirty_ratio понизить dirty_background_ratio (но не меньше dirty_ratio) и не меньше чем размер блока на фс
покрутил параметры и так и этак - стали активно чистится buffers
не понимаю что такое cached и как управлять какое колво памяти выделять под них.
swapoff -a в своп больше не пишет ) стало легче.
но хотелось бы быть уверенным, что я правильно понял и осознать про cached ...