Очистка swap-памяти в Ubuntu и параметр swappiness

Опубликовано admin в Втр, 26/04/2011 - 14:53

Сегодня возникло желание очистить swap-память на своей рабочей Ubuntu 9.10. Точнее сказать - переместить память из swap-раздела в оперативную память. Когда-то уже делал подобное с помощью команды swapoff -a которая отключает все смонтированные swap-разделы, а перед этим перемещает страницы памяти в ОЗУ. Но сегодня решил посмотреть может есть другой способ - другая команда, которая позволяет очистить своп. Прочитав FAQ от Ubuntu на тему swap-памяти (https://help.ubuntu.com/community/SwapFaq), хочу остановиться на нескольких моментах.

В разделе Empty Swap был предложен скрипт который позволяет “to get the swap manually back into RAM”, то есть делает как раз то, что мне нужно - выгружает данные из swap-памяти в оперативную память. Скрипт всего в несколько строчек:

1
2
3
4
5
6
err="not enough RAM to write swap back, nothing done"
mem=`free|grep Mem:|awk '{print $4}'`
swap=`free|grep Swap:|awk '{print $3}'`
test $mem -lt $swap && echo -e $err && exit 1
swapoff -a && swapon -a &&
exit 0

Но на самом деле в нем нет необходимости (для меня), так как использует он все те же команды swapoff -a и swapon -a. То есть получается никакой специальной программы для выгрузки swap-файла нет. По крайней мере на сайте Ubuntu рекомендуют использовать именно swapoff и swapon.

Таким образом для того чтобы выгрузить данные из swap-памяти достаточно выполнить команды:

1
$ sudo swapoff -a && sudo swapon -a

и дождаться пока данные будут выгружены. В зависимости от количества данных и производительности компьютера, процедура может занять до нескольких минут.

Также хочу несколько слов написать о параметре swappiness, который управляет интенсивностью перемещения данных из ОЗУ в swap-память. Этот параметр может принимать значения от 0 до 100. Если параметр установлен в 0, то ядро будет пытаться не использовать swap-память насколько это возможно, если swappiness=100, то наоборот ядро будет с максимально возможной интенсивностью использовать swap-память.

По умолчанию, в Ubuntu, этот параметр установлен в 60. Это можно увидеть выполнив команду:

1
cat /proc/sys/vm/swappiness

Если у вас достаточно оперативной памяти и вы хотите чтобы swap-память использовалась только в случае крайней необходимости, то можно установить swappiness в 0. Для текущего сеанса командой:

1
sudo sysctl vm.swappiness=10

Но после перезагрузки параметр вновь будет установлен в 60. Чтобы установить новое значение в качестве постоянного, нужно открыть файл /etc/sysctl.conf, найти строку vm.swappiness=60 и изменить значение. Если данной строки не будет значит нужно дописать ее в конце файла:

1
vm.swappiness=0

“Поигравшись” с параметром swappiness можно подобрать тот вариант при котором работа в системе будет более комфортной. Для каждого это конечно же будет индивидуально.

Для тех кто понимает технический английский, рекомендую также прочесть интересную переписку по поводу использования разных значений параметра swappiness на сайте http://kerneltrap.org/node/3000.

( categories: )