Swap (Español)

Esta traducción de
Swap
fue revisada el
2022-10-07
. Si existen
cambios
puede
actualizarla
o avisar al
equipo de traducción
.
Artículos relacionados
fstab
Hibernar
Zswap
Espacio de intercambio en RAM de video
Volumen de espacio de intercambio en ZFS
Cifrado del espacio de intercambio
Esta página proporciona una introducción al
espacio de intercambio y paginación
en GNU/Linux. Cubre la creación y activación de particiones de intercambio y archivos de intercambio.
De
Todo sobre el espacio de intercambio de Linux
:
Linux divide su RAM física (memoria de acceso aleatorio) en fragmentos de memoria llamados páginas. El intercambio (swapping) es el proceso mediante el cual se copia una página de memoria en el espacio preconfigurado del disco duro, llamado espacio de intercambio, para liberar esa página de memoria. Los tamaños combinados de la memoria física y el espacio de intercambio es la cantidad de memoria virtual disponible.
El kernel de Linux y las utilidades de espacio de usuario del paquete
util-linux
proporcionan compatibilidad con el espacio de intercambio.
Espacio de intercambio
El espacio de intercambio (swap) puede tomar la forma de una partición de disco o un archivo. Los usuarios pueden crear un espacio de intercambio durante la instalación o en cualquier momento posterior, según lo deseen. El espacio de intercambio se puede utilizar para dos propósitos, para ampliar la memoria virtual más allá de la memoria física instalada (RAM) y también para la compatibilidad con
suspender en disco
.
Si es beneficioso extender la memoria virtual con el espacio de intercambio depende de la cantidad de memoria física instalada. Si la cantidad de memoria física es menor que la cantidad de memoria requerida para ejecutar todos los programas deseados, "puede ser" beneficioso activar el espacio de intercambio. Esto evita las
condiciones de falta de memoria
, en las que el mecanismo asesino OOM del kernel de Linux intentará automáticamente liberar memoria eliminando procesos. Para aumentar la cantidad de memoria virtual a la cantidad requerida, añada la diferencia necesaria (o más) como espacio de intercambio.
El mayor inconveniente de activar el espacio de intercambio es su menor rendimiento, véase la sección
#Rendimiento
. Por lo tanto, activar el espacio de intercambio es una cuestión de preferencia personal: algunos prefieren eliminar los programas antes que activar el espacio de intercambio y otros prefieren activarlo y tener un sistema más lento cuando se agota la memoria física.
Nota
No hay diferencia de rendimiento entre utilizar una partición como espacio de intercambio y un archivo contiguo como espacio de intercambio.
Para comprobar el estado del espacio de intercambio, utilice:
$ swapon --show
O para mostrar la memoria física y el uso del espacio de intercambio:
$ free -h
Partición como espacio de intercambio
Se puede crear una partición como espacio de intercambio con la mayoría de las
herramientas de partición
de GNU/Linux. Las particiones como espacio de intercambio se designan como tipo
82
en MBR y
0657FD6D-A4AB-43C4-84E5-0933C84B4F4F
en GPT.
Para configurar una partición como área de intercambio de Linux, se utiliza la orden
mkswap(8)
. Por ejemplo:
# mkswap /dev/sd
xy
Advertencia
Se perderán todos los datos de la partición especificada.
Para activar el dispositivo para paginación:
# swapon /dev/sd
xy
Para activar esta partición como espacio de intercambio en el arranque, añada una entrada a
/etc/fstab
:
UUID=
UUID_del_dispositivo
none swap defaults 0 0
donde
UUID_del_dispositivo
es el
UUID
del espacio de intercambio.
Véase
fstab
para la sintaxis del archivo.
Nota
La entrada fstab es opcional si la partición de intercambio está ubicada en un dispositivo que usa GPT. Véase
#Activación por systemd
.
Advertencia
Activar
discard
en configuraciones RAID usando mdadm provocará el bloqueo del sistema en el arranque y durante el tiempo de ejecución, si se utiliza swapon.
Activación por systemd
systemd
activa las particiones de intercambio mediante dos mecanismos diferentes. Ambos son ejecutables en
/usr/lib/systemd/system-generators
. Los generadores se ejecutan en el arranque y crean unidades systemd nativas para montajes. El primero,
systemd-fstab-generator
, lee fstab para generar unidades, incluida una unidad para el espacio de intercambio. El segundo,
systemd-gpt-auto-generator
inspecciona el disco raíz para generar unidades. Funciona solo en discos GPT y puede identificar particiones de intercambio por su tipo de GUID; véase
systemd (Español)#Montaje automático de particiones GPT
para obtener más información.
Desactivar el espacio de intercambio
Para desactivar un espacio de intercambio específico:
# swapoff /dev/sd
xy
Alternativamente, utilice
-a
para desactivar todo el espacio de intercambio.
Dado que systemd administra el espacio de intercambio, se activará nuevamente en el próximo inicio del sistema. Para desactivar de forma permanente la activación automática del espacio de intercambio detectado, ejecute
systemctl --type swap
para encontrar la unidad
.swap
responsable y
enmascárela
.
Archivo como espacio de intercambio
Como alternativa a la creación de una partición completa, un archivo de espacio de intercambio ofrece la posibilidad de variar su tamaño sobre la marcha y es más fácil eliminarlo por completo. Esto puede ser especialmente deseable si el espacio en disco es escaso (por ejemplo, un SSD de tamaño modesto).
Manualmente
Creación de archivos de intercambio
Nota
Btrfs
soporta archivos como espacio de intercambio con limitaciones desde la versión 5.0 del kernel de Linux. Para este sistema de archivos, siga el procedimiento descrito en
Btrfs (Español)#Archivo como espacio de intercambio
para inicializar el archivo de intercambio.
Utilice
dd
para crear un archivo como espacio de intercambio del tamaño que elija. Por ejemplo, creando un archivo como espacio de intercambio de 512 MiB:
# dd if=/dev/zero of=/swapfile bs=1M count=512 status=progress
Nota
Utilizar
dd
para asignar un archivo como espacio de intercambio es la solución más portátil, véase
swapon(8) § Files with holes
para obtener más detalles.
Establezca los
permisos
correctos (un archivo como espacio de intercambio de lectura para todos es una gran vulnerabilidad local):
# chmod 0600 /swapfile
Después de crear el archivo del tamaño correcto, formatéelo como espacio de intercambio:
# mkswap -U clear /swapfile
Active el archivo como espacio de intercambio:
# swapon /swapfile
Finalmente, modifique la configuración de fstab para añadir una entrada para el archivo como espacio de intercambio:
/etc/fstab
/swapfile none swap defaults 0 0
Para obtener información adicional, véase
fstab (Español)#Utilización
.
Nota
El archivo como espacio de intercambio debe especificarse por su ubicación en el sistema de archivos, no por su UUID o etiqueta (LABEL).
Cuando utilice
Btrfs
, no olvide añadir el subvolumen creado a la lista también, y elimine las opciones
discard,autodefrag
del subvolumen que se monte primero (que controlará esta configuración para el sistema de archivos completo).
La compresión también debe desactivarse, pero el atributo
No_COW
(anteriormente establecido con
chattr +C
) se encarga de eso.
Eliminar archivo como espacio de intercambio
Para eliminar un archivo como espacio de intercambio, primero se debe desactivar para poder eliminarlo posteriormente:
# swapoff /swapfile
# rm -f /swapfile
Finalmente, elimine la entrada relevante de
/etc/fstab
.
Automáticamente
systemd-swap
Nota
El autor ahora
8F recomienda
utilizar
zram-generator
en su lugar, debido a la baja frecuencia de confirmación y
ZRAM
que cubre las necesidades de la mayoría de los usuarios.
systemd-swap es un script para crear un espacio de intercambio híbrido a partir de un espacio de intercambio
ZRAM
, archivos como espacio de intercambio y particiones como espacio de intercambio. No está afiliado al proyecto systemd.
Instale
el paquete
systemd-swap
AUR
. Descomente y configure
swapfc_enabled=1
en la sección
Swap File Chunked
de
/etc/systemd/swap.conf
.
Inicie/active
el servicio
systemd-swap
.
Visite la página
GitHub del autor
para obtener más información y definir la
configuración recomendada
.
Nota
Si el diario (journal) sigue mostrando la siguiente advertencia
systemd-swap[..]: WARN: swapFC: ENOSPC
y no se crea ningún archivo como espacio de intercambio, debe descomentar y configurar
swapfc_force_preallocated= 1
en
/etc/systemd/swap.conf
.
El archivo de espacio de intercambio creado por systemd-swap no se puede utilizar fácilmente para
hibernar
. Véase
systemd-swap problema 85
.
Cifrado del espacio de intercambio
Véase
dm-crypt (Español)/Swap encryption (Español)
.
Rendimiento
Las operaciones de intercambio suelen ser significativamente más lentas que acceder directamente a los datos en la RAM. Desactivar el intercambio por completo para mejorar el rendimiento a veces puede provocar una degradación, ya que disminuye la memoria disponible para las cachés del sistema de archivos virtual (VFS), lo que provoca un uso del disco más frecuente y costoso.
Los valores de intercambio se pueden ajustar para mejorar el rendimiento:
Swappiness
El parámetro
swappiness
sysctl
representa la preferencia del kernel (o la evitación) del espacio de intercambio. La capacidad de intercambio puede tener un valor entre 0 y 200 (máximo 100 si Linux < 5.8), el valor predeterminado es 60. Un valor bajo hace que el kernel evite el intercambio, un valor alto hace que el kernel intente utilizar el espacio de intercambio y un valor de 100 significa que se supone que el costo E/S (entrada/salida) es igual. Se sabe que el uso de un valor bajo en memoria suficiente mejora la capacidad de respuesta en muchos sistemas.
Para comprobar el valor actual de swappiness:
$ sysctl vm.swappiness
Alternativamente, los archivos
/sys/fs/cgroup/memory/memory.swappiness
(específicos de cgroup v1) o
/proc/sys/vm/swappiness
se pueden leer para obtener el valor entero sin procesar.
Para establecer temporalmente el valor de swappiness:
# sysctl -w vm.swappiness=10
Para establecer el valor de intercambio de forma permanente, cree un archivo de configuración
sysctl.d(5)
. Por ejemplo:
/etc/sysctl.d/99-swappiness.conf
vm.swappiness = 10
Para que el
gestor de arranque
establezca swappiness al cargar el kernel, añada un
parámetro del kernel
, por ejemplo
sysctl.vm.swappiness=10
.
Para probar (y más) sobre por qué esto puede funcionar, eche un vistazo a
este artículo
.
Presión de caché VFS
Otro parámetro
sysctl
que afecta el rendimiento del intercambio es
vm.vfs_cache_pression
, que controla la tendencia del kernel a reclamar la memoria que se utiliza para el almacenamiento en caché de las cachés VFS, en comparación con el caché de página y el intercambio. Aumentar este valor aumenta la velocidad a la que se recuperan las cachés de VFS
[1]
. Para obtener más información, véase la
documentación del kernel de Linux
.
Prioridad
Si tiene más de un archivo o partición como espacio de intercambio, debería considerar asignar un valor de prioridad (0 a 32767) para cada área de intercambio. El sistema utilizará áreas de intercambio de mayor prioridad antes que las de menor prioridad. Por ejemplo, si tiene un disco más rápido (
/dev/sda
) y otro más lento (
/dev/sdb
), asigne una prioridad más alta al área de intercambio ubicada en el dispositivo más rápido. Las prioridades se pueden asignar en
fstab
mediante el parámetro
pri
:
/dev/sda1 none swap defaults,pri=100 0 0
/dev/sdb2 none swap defaults,pri=10  0 0
O a través del parámetro
--priority
de
swapon
:
# swapon --priority 100 /dev/sda1
Si dos o más áreas tienen la misma prioridad, y es la prioridad más alta disponible, las páginas se asignan por turnos (round-robin) entre ellas.
Utilizar zswap o zram
Zswap
es una función del kernel de Linux que proporciona una caché de reescritura comprimida para las páginas intercambiadas,
ZRAM
crea un bloque de intercambio comprimido virtual en la memoria como alternativa a una partición/archivo como espacio de intercambio en el disco. Ambos enfoques aumentan el rendimiento de intercambio y disminuyen las operaciones de E/S del disco.
Striping
No hay necesidad de utilizar
RAID
en el espacio de intercambio por motivos de rendimiento. El kernel en sí puede dividir el intercambio en varios dispositivos, si les da la misma prioridad en el archivo
/etc/fstab
. Véase
The Software-RAID HOWTO
para obtener más información.