Параметры ядра и пейджинг
physmem: общее количество страниц в оперативной памяти.
lotsfree: сканер страниц начинает работать, когда количество свободной оперативной памяти становится меньше lotsfree.
Значение по умолчанию - physmem/64, но оно может быть изменено в /etc/system. Сканер страниц по умолчанию запускается в режиме пейджинга. Частота сканирования (scan rate, столбик sr в выводе vmstat) устанавливается равной параметру slowscan , который по умолчанию равен fastscan/10.
minfree: пока объем свободной памяти находится между lotsfree и minfree, частота сканирования страниц растет линейно от slowscan к fastscan по мере уменьшения размера свободной памяти (рис. 20.1). Значение minfree по умолчанию - desfree/2, значение fastscan по умолчанию - physmem/4. Если свободной памяти становится меньше, чем desfree (что по умолчанию равно lotsfree/2), сканер страниц начинает запускаться с частотой 100 раз в секунду. За каждый свой запуск сканер страниц проверяет desscan страниц. Этот параметр изменяется динамически вместе с частотой сканирования.
maxpgio: этот параметр (в зависимости от конкретной аппаратуры он имеет значение 40 или 60) по умолчанию ограничивает частоту ввода-вывода на устройство пейджинга. Для современных дисков с частотой вращения больше 7200 оборотов в минуту можно установить значение maxpgio в сто раз больше количества жестких дисков, задействованных в свопинге.
throttlefree: когда свободной оперативной памяти становится меньше, чем определено в throttlefree (по умолчанию этот параметр равен minfree), запросы процессов на выделение им новых страниц памяти переводятся в состояние ожидания до тех пор, пока не появятся свободные страницы.
cachefree: имеет значение для систем Solaris 7 (или систем 2.5.1 и 2.6 с установленными самыми свежими обновлениями); если в этих системах параметр priority_paging установлен равным 1 (т.е. priority paging включен), то пока свободной памяти больше, чем lotsfree, освобождаются только страницы файлового кэша в памяти, а страницы процессов не затрагиваются.
Значение по умолчанию - удвоенное lotsfree. Системы Solaris более поздних версий, начиная с 8-й, имеют другой алгоритм освобождения оперативной памяти, и в них НЕ следует включать priority paging и устанавливать значение cachefree.
В системах Solaris до версии 7 включительно сканер страниц работает так: для выбранных сканером страниц обнуляется флаг "используемости" страницы, выбор страниц происходит со скоростью, которую можно посмотреть с помощью vmstat или sar -g (scan rate). После обработки handspreadpages страниц сканер проверяет, установлен ли флаг "используемости". Фактически, сканер состоит из двух процессов, один из которых идет по памяти и очищает флаги встреченных страниц, а второй следует за ним на некотором расстоянии и проверяет,не было ли новых обращений к этой странице (не установился ли снова этот флаг). Если флаг не установлен (обращений к странице за то время, пока сканер отмечал handspreadpages страниц, не произошло), то страница отправляется в своп. Параметр handspreadpages по умолчанию равен physmem/4.
Рис. 17.1. Зависимость частоты запуска сканера страниц от объема свободной памяти
В системах Solaris 8 и более новых алгоритм освобождения памяти иной (он называется cyclical page cache). Он рассчитан на то, что при нехватке памяти выгружаются прежде всего страницы файлового кэша, и только затем - страницы процессов. Этот алгоритм разработан для тех же целей, что и priority paging в Solaris 7. Новый алгоритм использует два списка свободных страниц. Один - для помещения в него освобождающихся страниц файлового кэша, другой - для помещения прочих освобождающихся страниц (разделяемой памяти, процессов и т.п.). При таком подходе файловый кэш ни с кем не соперничает за место в памяти.
В результате этих изменений в системах Solaris, начиная с версии 8, vmstat сообщает иные цифры, чем в той же ситуации в более старых системах, а именно:
Для получения отдельного отчета по пейджингу страниц приложений (executables), данных (anonymous) и файловой системы используйте команду
vmstat -p