Vamos a revisar por qué puede ser necesario configurar un espacio de intercambio y cómo configurar la memoria swap en Ubuntu 18.
Comenzaremos con un repaso acerca de qué es la swap y para qué sirve la memoria de intercambio, además repasaremos cuestiones cómo ¿qué tipo de swap elegir (partición o fichero) ?, ¿cual es la cantidad de swap recomendable en cada equipo según la RAM instalada?, ¿cómo habilitar y utilizar la swap? y ¿cómo comprobar la swap en uso en el sistema?.
En este artículo:
- Qué es la swap en Linux y para qué sirve el espacio de intercambio
- ¿Es mejor usar una partición de swap o fichero de swap?
- ¿Cuanta swap necesito?
- Cómo ajustar la propiedad swappiness para ajustar la frecuencia de intercambio.
- Modificar la presión de caché (vfs_cache_pressure)
Qué es la swap en Linux y para qué sirve el espacio de intercambio
Podemos crear una partición de swap o un fichero de intercambio.
El uso de memoria swap (memoria de intercambio) puede mejorar el rendimiento de un equipo en casos de falta de memoria. Al asignar un espacio de intercambio para almacenar datos, este espacio será utilizado por el sistema en casos en que no pueda conservar los datos en la RAM.
El uso de swap puede favorecer el rendimiento del equipo, sobre todo si se trata de un equipo con poca RAM.
Podemos utilizar archivos de intercambio o utilizar una partición como partición para swap.
Aquí podemos ver los discos del sistema y las particiones, donde podemos ver una partición de swap, con el gestor de discos de gnome:
discos de gnome, es una utilidad de gnome en ubuntu 18 :
Y aquí vemos un ejemplo de partición de swap:
¿es mejor una partición de swap o fichero de swap?
En principio el uso de una partición de intercambio o de un fichero de intercambio ofrece el mismo rendimiento.
Aunque discutiendo los detalles técnicos, muchos expertos siguen prefiriendo el uso de una partición swap frente a un fichero de swap, ya que un fichero de swap podría fragmentarse si el sistema de archivos subyacente se sobrecarga, pero una partición de swap es un sistema de archivos de intercambio en si mismo, y no está expuesto a esa fragmentación
También tenemos que tener en cuenta que una partición de swap es menos flexible que el uso de un fichero de swap, algo que podemos notar si nuestras necesidades de swap varían. Es decir, que si tienes una partición swap, es probable que el rendimiento sea un poquitín mayor, pero sin embargo, si quieres modificar el tamaño de la partición, no será una operación tan rápida como sería el cambio de tamaño de un fichero de swap. En la práctica yo he notado mejor rendimiento utilizando una partición swap.
También es recomendable crear la swap al principio del disco, eso mejorará el rendimiento, ya que el acceso al disco es más rápido al principio del disco.
En resúmen, si no tienes suficiente RAM, la swap puede aumentar el rendimiento del equipo, y una partición swap es probablemente la mejor opción en cuanto al rendimiento, aunque un archivo de intercambio es más flexible y puede modificarse más rápidamente si lo necesitas.
¿Cuanta swap necesito?
En principio existe una “regla” que podemos aplicar a la hora de configurar la cantidad de swap necesaria en un equipo Ubuntu.
–> Si utilizas un server normal (Servidor Web/Mail, etc ..) :
Si tienes menos de 2Gb de RAM –> Swap de igual tamaño que la RAM
Si tienes más de 2Gb de RAM –> Swap de 2 Gb.
–> Por otra parte en la ayuda oficial de Ubuntu comentan acerca de la swap la regla siguiente :
Si tienes un equipo con 1Gb de RAM –> Swap de igual tamaño que la RAM
Si tienes un equipo moderno, con más de 1Gb de RAM, y utilizas Hibernación –> Swap de tamaño igual que la RAM como mínimo.
Podemos tomar como base esta tabla para configurar la cantidad de swap adecuada que Ubuntu:
- 4 Gb de RAM, sin Hibernación —> Swap de 2 Gb
- 4 Gb de RAM, con Hibernación —> Swap de 6 Gb
- 8 Gb de RAM, sin Hibernación —> Swap de 3 Gb
- 8 Gb de RAM, con Hibernación —> Swap de 11 Gb
- 16 Gb de RAM, sin Hibernación —> Swap de 4 Gb
- 16 Gb de RAM, con Hibernación —> Swap de 20 Gb
–> Sin embargo, si nos vamos a Red Hat o CentOS, la cantidad de swap recomendada según la RAM cambia:
- Los sistemas con 4GB a 16GB de RAM requieren un mínimo de 4GB de espacio de intercambio
- Los sistemas con 16 GB a 64 GB de RAM requieren un mínimo de 8 GB de espacio de intercambio
Comprobar si el sistema tiene configurado un espacio de intercambio
Comprobamos si el sistema tiene configurado algún espacio de intercambio con el comando free y con el comando swapon
En este caso podemos ver que tenemos una partición swap habilitada, de 1G, con prioridad de swap -2,
y además un fichero de intercambio de 5Gigas:
usuario1@Ubuntu18:~$ sudo swapon --show [sudo] contraseña para usuario1: NAME TYPE SIZE USED PRIO /swapfile file 5G 301,7M -3 /dev/dm-2 partition 980M 945M -2 |
Comprobar si tenemos una partición de swap
Con el comando parted podemos comprobar si existe una partición asignada para intercambio:
usuario1@Ubuntu18:~$ sudo parted --list [sudo] contraseña para usuario1: Modelo: ATA SanDisk SSD PLUS (scsi) Disco /dev/sda: 480GB Tamaño de sector (lógico/físico): 512B/512B Tabla de particiones: msdos Indicadores de disco: Numero Inicio Fin Tamaño Tipo Sistema de archivos Banderas 1 1049kB 768MB 767MB primary ext4 arranque 2 769MB 480GB 479GB extended 5 770MB 240GB 239GB logical Modelo: Asignador de dispositivos de Linux (linear) (dm) Disco /dev/mapper/ubuntu--vg-swap_1: 1028MB Tamaño de sector (lógico/físico): 512B/512B Tabla de particiones: loop Indicadores de disco: Numero Inicio Fin Tamaño Sistema de archivos Banderas 1 0,00B 1028MB 1028MB linux-swap(v1) |
Comprobar el uso de memoria swap
Previamente hemos comprobado que teníamos una partición de intercambio, con el comando “swapon” (el fichero de intercambio lo hemos creado después; lo veremos más adelante).
Para comprobar el uso de la swap en el equipo también podemos utilizar el comando “free“, que consulta la información el el fichero /proc/meminfo
y utilizamos el parámetro -h para mostrar la información en modo “human readable” (más facil y rápido de ver y comprender de un vistazo):
usuario1@Ubuntu18:~$ free -h total usado libre compartido búfer/caché disponible Memoria: 5,6G 3,7G 736M 557M 1,2G 1,1G Swap: 979M 945M 34M |
Así vemos que tenemos un espacio de 1G para memoria swap, y 945M utilizados.
También podemos comprobar el uso de la swap en el fichero:
usuario1@Ubuntu18:~$ cat /proc/swaps Filename Type Size Used Priority /dev/dm-2 partition 1003516 1003516 -2 /swapfile file 5242876 19456 -3 |
usuario1@Ubuntu18:~$ sudo swapon --show NAME TYPE SIZE USED PRIO /dev/dm-2 partition 980M 980M -2 /swapfile file 5G 19M -3 |
Crear un fichero de swap
Lo primero evidentemente es comprobar el espacio libre en el disco;
lo hacemos con el comando df -h
usuario1@Ubuntu18:~$ df -h S.ficheros Tamaño Usados Disp Uso% Montado en udev 2,8G 0 2,8G 0% /dev tmpfs 575M 2,0M 573M 1% /run /dev/mapper/ubuntu--vg-root 218G 26G 181G 13% / tmpfs 2,9G 183M 2,7G 7% /dev/shm tmpfs 5,0M 4,0K 5,0M 1% /run/lock tmpfs 2,9G 0 2,9G 0% /sys/fs/cgroup /dev/sda1 704M 166M 487M 26% /boot tmpfs 575M 16K 575M 1% /run/user/121 tmpfs 575M 60K 575M 1% /run/user/1000 |
En este caso comprobamos que tenemos bastante espacio en /
Cuando nos aseguremos de tener espacio libre suficiente, creamos un fichero /swapfile en el directorio /root
sudo fallocate -l 5G /swapfile |
Como nuestra RAM es poca (tenemos menos de 8 G) , entonces igualamos la swap a la RAM.
En este caso hemos creado un fichero swap de 5 Gigas, ya que tenemos 6 Gigas de memoria RAM, y ya tenemos una partición de intercambio de 1 Giga de tamaño. Así que 1G de partición swap que ya teníamos, más un fichero de intercambio de 5G, es igual a 6 G, la misma cantidad de RAM que tenemos en este equipo con pocos recursos.
Vemos que el fichero se ha creado correctamente, y con la cantidad correcta de espacio asignado:
usuario1@Ubuntu18:~$ ls -lha /swapfile -rw-r--r-- 1 root root 5,0G oct 23 22:51 /swapfile |
Habilitar el archivo de intercambio
Ya tenemos el fichero de intercambio creado, y ahora lo habilitaremos para swap.
Lo primero le otorgamos permisos al fichero, para que root pueda leer y escribir en el fichero:
usuario1@Ubuntu18:~$ sudo chmod 600 /swapfile |
comprobamos los permisos:
usuario1@Ubuntu18:~$ ls -lh /swapfile -rw------- 1 root root 5,0G oct 23 22:51 /swapfile |
Marcamos el fichero como espacio de intercambio:
sudo mkswap /swapfile |
usuario1@Ubuntu18:~$ sudo mkswap /swapfile mkswap: /swapfile: permisos 0644 no seguros; se sugiere 0600. Configurando espacio de intercambio versión 1, tamaño = 5 GiB (5368705024 bytes) sin etiqueta, UUID=597987aa-4ae9-4042-93c4-5751ef6913fd |
Y finalmente activamos el espacio de intercambio swap:
sudo swapon /swapfile |
Y ahora verificamos que el intercambio está disponible:
usuario1@Ubuntu18:~$ sudo swapon --show NAME TYPE SIZE USED PRIO /dev/dm-2 partition 980M 921,8M -2 /swapfile file 5G 343M -3 |
y revisamos de nuevo con el comando free
usuario1@Ubuntu18:~$ free -h total usado libre compartido búfer/caché disponible Memoria: 5,6G 3,6G 776M 651M 1,3G 1,2G Swap: 6,0G 1,2G 4,7G |
—> Ahora editamos el fichero /etc/fstab para configurar el intercambio swap de forma permanente, y el fichero de intercambio se mantenga en cada reinicio del sistema.
Añadimos :
/swapfile swap swap defaults 0 0 |
Y si reiniciamos, comprobamos de nuevo la swap en funcionamiento y veremos que se encuentra activo el fichero de swap.
Eliminar un fichero de intercambio swap
Primero desactivamos el fichero de swap:
usuario1@Ubuntu18:~$ sudo swapoff -v /swapfile swapoff /swapfile |
Eliminamos las líneas de /etc/fstab referentes al fichero de intercambio:
usuario1@Ubuntu18:~$ cat /etc/fstab # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # <file system> <mount point> <type> <options> <dump> <pass> /dev/mapper/ubuntu--vg-root / ext4 errors=remount-ro 0 1 # /boot was on /dev/sda1 during installation UUID=42cbeefc-68d9-4823-b57f-3defb293453e /boot ext4 defaults 0 2 /dev/mapper/ubuntu--vg-swap_1 none swap sw 0 0 /swapfile none swap sw 0 0 |
Y finalmente eliminamos el fichero de intercambio:
sudo rm /swapfile |
Cómo ajustar la propiedad swappiness para ajustar la frecuencia de intercambio
El valor swappiness define la frecuencia con que el sistema utilizará el espacio de intercambio.
Es un valor que podemos configurar en el fichero
cat /proc/sys/vm/swappiness |
Podemos comprobar el valor configurado de la swap para realizar intercambio
usuario1@Ubuntu18:~$ cat /proc/sys/vm/swappiness 60 |
Por defecto en Ubuntu estará en 60
Podemos modificar el valor con
sudo sysctl vm.swappiness=40 |
Esto cambia el valor hasta que el equipo se reinicie
si queremos hacer permanente el cambio, tenemos que editar el fichero
sudo vi /etc/sysctl.conf |
Modificar la presión de caché (vfs_cache_pressure)
Este valor configura la medida en que el sistema elige guardar datos de inodos y entradas de directorio, es decir, está directamente relacionado con datos de acceso sobre el sistema de archivos.
Podemos comprobar la configuración actual que tiene el sistema comprobando el contenido del fichero:
usuario1@Ubuntu18:~$ cat /proc/sys/vm/vfs_cache_pressure 50 |
Podemos modificarlo con
usuario1@Ubuntu18:~$ sudo sysctl vm.vfs_cache_pressure=50 vm.vfs_cache_pressure = 50 |
Pero para hacerlo un cambio permanente, editamos el fichero:
sudo vi /etc/sysctl.conf |
Y al final del fichero añadimos el valor deseado:
vm.vfs_cache_pressure=50 |
CONCLUSIÓN
Si tienes un equipo Linux con poca memoria RAM, la memoria swap o espacio de intercambio puede aumentar notablemente el rendimiento del ordenador. También es importante saber jugar con la configuración adecuada de la propiedad swappiness y con la presión de caché.