Swappiness и vfs_cache_pressure - вечные игры (Arch Linux)

Теги

Когда дело доходит до настройки памяти (Swappiness и vfs_cache_pressure) в разных дистрибутивах, то первым делом надо смотреть на подсистему виртуальной памяти (VM, virtual memory).

Параметр vm.swappiness определяет насколько ядро использует свопинг (swap, подкачку) по сравнению с оперативной памятью. В исходном коде он также определен как «tendency to steal mapped memory» (склонность к краже отображаемой памяти). Высокое значение swappiness означает, что ядро будет более склонно к выгрузке отображенных страниц. Низкое значение swappiness означает обратное: ядро будет меньше выгружать страницы из памяти. Другими словами, чем выше значение vm.swappiness, тем больше система будет использовать swap.

Параметр vm.vfs_cache_pressure, этот параметр контролирует память, потребляемую ядром для кэширования объектов каталогов и индексных дескрипторов (dentry и inode). При значении по умолчанию в 100 ядро будет пытаться освобождать кэш dentry и inode по «справедливости» по отношению к pagecache и swapcache. Уменьшение vfs_cache_pressure приводит к тому, что ядро будет сохранять кэши dentry и inode. Когда значение равно «0», ядро никогда не будет очищать кэш dentry и inode из-за нехватки памяти (memory pressure), и это может легко привести к ошибке out-of-memory. Увеличение vfs_cache_pressure больше 100 приводит к тому, что ядро отдает приоритет выгрузке dentry и inode.

Посмотреть текущие значение по настройкам:

# cat /proc/sys/vm/swappiness

# cat /proc/sys/vm/vfs_cache_pressure 

Swappiness sysctl параметр представляющий частоту использования пространства подкачки. Swappiness может иметь значение от 0 до 100, значение по умолчанию = 60. Низкое значение заставляет ядро избегать подкачки, высокое значение позволяет ядру использовать подкачку наперёд. Использование низкого значения на достаточном количестве памяти, улучшает отзывчивость на многих системах (/proc менее организован и сохраняется только для обратной совместимости, вместо него предпочтительнее использовать /sys). 

Чтобы временно установить значение swappiness: 

# sysctl vm.swappiness=10

Чтобы постоянно установить значение swappiness, отредактируйте (создайте) конфигурационный файл sysctl:

# sudo nano /etc/sysctl.d/101-sysctl.conf

vm.swappiness=10

Параметры vm.vfs_cache_pressure:

# 0 — не кэшировать ничего. # 100 — значение по-умолчанию. # значение более 100 — агрессивно кэшировать дисковые операции.  

Рекомендуется устанавливать значение 1000 и больше для обычных винчестеров и около 50+ для SSD дисков. Чем выше значение vm.vfs_cache_pressure тем отзывчивей будет система (тем больше будет кэширование), но это при условии что у Вас достаточно оперативной памяти (более 2Гб). При небольшом ОЗУ значение vm.vfs_cache_pressure рекомендуется установить на 10 и больше использовать swap (виртуальная память). Сравните на сколько увеличилось или уменьшилось быстродействие системы при изменении параметров.

Для отслеживания использования загрузки оперативной памяти и размера кэша, а так же swap:

# free -h

Дополнительная информация на странице WiKi.


Страничный кэш (page cache) — это кэш, в котором хранятся данные файлов и исполняемых программ.