vm.swappiness es un parámetro ajustable del kernel que controla qué tanto el kernel favorece el uso de swap sobre RAM. A nivel de código fuente está definido como la tendencia a «robar» la memoria asignada. Un valor alto de swappiness significa que el kernel estará más apto para desasignar paginas asignadas. En cambio, un valor bajo de swappiness significa lo contrario, el kernel estará menos dispuesto a desasignar páginas asignadas.
En otras palabras, a más alto valor de vm.swappiness, el sistema utilizará más la swap.
El valor por defecto en la mayoría de las distribuciones es 60. Para ver el valor asignado en nuestro sistema lo haremos con este comando: sysctl vm.swappiness, o con este otro comando: cat /proc/sys/vm/swappiness.
Qué razones puede haber para cambiar este valor? Al igual que otros parámetros del kernel modificables, no existe una razón específica para cambiarlo, pero teniendo la una facilidad que nos permite manipuar cómo se comporta el kernel sin modificar el código fuente, esto resulta indispensable.
Si hay razones para cambiar este parámetro del kernel, una debería ser reducirlo si no se desea utilizar mucho la swap. Se ha visto configuraciones en servidores con valor de swappiness de 1:125. Es evidente que en ese caso el interés de que solamente se utilice la memoria física. Sin importar si el valor de vm.swappiness está en 0, 20, 40, o algún otro valor, el administrador del servidor debería realizar pruebas para determinar la forma en que esto afecta al servidor mismo y las aplicaciones. Para palpar este efecto solo basta echar una mirada al fichero fuente vmscan.c y al algoritmo swap_tendency.
swap tendency = mapped_ratio / 2 + distress + vm_swappiness;
En la otra cara, uno debe considerar aumentar el valor de vm.swappiness más allá del establecido por defecto cuando el sistema tienes restricciones de memoria (poca memoria física).
“Sistemas con restricciones de memoria que ejecutan procesos por lotes (processo que hacen sleep por largo tiempo) deben beneficiarse de un uso agresivo del comportamiento de la swap.”
Andrew Morton ha dado un valor al vm.swappiness de 100. “Mi punto es que bajando la tendencia del kernel a usar la swap es incorrecto. Uno realmente no quiere cientos de megabytes de aplicaciones hinchadas utilizando la memoria de la compuradora. Sácalas al disco (swap), utiliza la memoria para algo más útil.”
Para cabiar el valor de swappiness en nuestro sistema, como usuario root, cuidadosamente hacemos lo siguiente:
# echo ‘valor’ > /proc/sys/vm/swappiness
Este cambio no es permanente y en el próximo arranque del sistema tomará el valor por defecto nuevamente. Para hacer este cambio permanente editaremos el fichero sysctl.conf, y al final del mismo añadimos: vm.swappiness=valor.
# nano /etc/sysctl.conf
vm.swappiness=valor
Nota: valor debe ser un número entero entre 0 y 100.
Lo siguiente es un resumen de un benchmark obtenido utilizando diferentes valores en vm.swappiness mientras se realizaba un dd en un kernel 2.6.5-7.97-default (http://lwn.net/Articles/100978/):
vm.swappiness | Total I/O | Avg Swap |
0 | 273.57 MB/s | 0 MB |
20 | 273.75 MB/s | 0 MB |
40 | 273.52 MB/s | 0 MB |
60 | 229.01 MB/s | 23068 MB |
80 | 195.63 MB/s | 25587 MB |
100 | 184.30 MB/s | 26006 MB |