En este tutorial, presentaremos el espacio de intercambio de Unix, sus ventajas y algunos comandos simples para administrarlo.
El espacio de swap de unix
El espacio de intercambio (swap) o paginación es básicamente una parte del disco duro que el sistema operativo puede usar como una extensión de la RAM disponible. Este espacio se puede asignar con una partición o un archivo simple.
Gracias a una técnica de paginación de memoria, específicamente la técnica de administración de memoria virtual, nuestro sistema operativo puede cargar aplicaciones que requieren más memoria que la RAM físicamente presente en nuestra computadora.
Cuando la RAM está llena, partes de los datos de las aplicaciones activas se transfieren al espacio de intercambio, liberando RAM para otros datos necesarios de inmediato.
Las razones detrás de la implementación de esta técnica son históricas: la primera máquina con memoria virtual fue la supercomputadora Atlas construida en Cambridge en la década de 1960, cuando la memoria física era muy costosa.
Los ahorros, la seguridad adicional y la mayor confiabilidad proporcionaron un fuerte incentivo para cambiar todos los sistemas a la memoria virtual.
Creando espacio de intercambio
Como se mencionó anteriormente, el intercambio es un espacio reservado para la administración de memoria.
Tenemos dos formas de decirle al sistema operativo dónde se asignará este espacio. Podemos crear un nuevo archivo dentro de una partición existente, o podemos asignar una partición completa de intercambio de tipos.
En primer lugar, necesitamos crear un archivo vacío con el tamaño deseado.
Para hacer eso, usamos el comando dd, configurando las opciones de tamaño adecuadamente:
- bs controla el número de bytes para escribir de una vez como un bloque
- count se refiere a la cantidad de bloques para escribir
Creemos un archivo de intercambio de 4 GB con 4.096 bloques, a 1 MB por bloque:
sudo dd if=/dev/zero of=/archivoswap bs=1M count=4096
# Salida
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB, 4.0 GiB) copied, 20.0082 s, 215 MB/s
Ahora, configuremos los permisos correctos con chmod:
sudo chmod 600 /archivoswap
El siguiente paso es configurar el archivo como espacio de intercambio utilizando el comando mkswap:
sudo mkswap /archivoswap
# Salida
Setting up swapspace version 1, size = 4 GiB (4294963200 bytes)
no label, UUID=20721910-090f-4c2a-8442-0e6f50c9c1d6
y habilitarlo con swapon:
sudo swapon /archivoswap
Finalmente, haremos que nuestros cambios sean permanentes modificando el archivo fstab, en caso de que necesitemos reiniciar la máquina.
Para agregar la configuración al final del archivo, la hacemos eco en la salida estándar y la canalizamos en tee, que puede analizar la entrada línea por línea:
echo "/archivoswap swap swap defaults 0 0" | sudo tee -a /etc/fstab
Crear una partición swap
El caso de la partición es diferente del caso anterior solo debido al formato utilizado; en lugar de un archivo, podemos asignar una porción completa del disco.
Para hacer eso, necesitamos modificar la tabla de particiones para hacer espacio y crear una nueva partición de intercambio de tipos.
Hay muchas herramientas GUI (como GParted) que pueden cambiar fácilmente la tabla de particiones de forma segura y visual con solo unos pocos clics del mouse.
Una vez que se guarda la nueva partición, definamos como intercambio:
mkswap /dev/sdXX
mkswap: /dev/sdXX: warning: wiping old swap signature.
Setting up swapspace version 1, size = 4.0 GiB (5266130944? bytes)
no label, UUID=a0a2d61c-bc3a-442a-acf1-120ecb041f9d
Donde sdXX debe reemplazarse con el nuevo nombre de partición.
Luego, lo activamos:
sudo swapon /dev/sdXX
Finalmente, como en el escenario del archivo, tenemos que agregar la nueva partición a nuestro archivo fstab, para que se cargue la próxima vez que reiniciemos:
echo "/dev/sdXX swap swap defaults 0 0" | sudo tee -a /etc/fstab
Supervisar el espacio de intercambio
Ahora que nuestro espacio de intercambio está activo, es posible que necesitemos monitorear cómo lo está utilizando el sistema operativo. Para hacer esto, tenemos varios comandos disponibles que pueden brindarnos información sobre el intercambio gratuito hacia la izquierda, algunos más gráficos que otros.
Exploremos algunos ejemplos simples de soluciones basadas en texto.
swapon -show
sudo swapon --show
# Salida
NAME TYPE SIZE USED PRIO
/archivoswap file 4024M 0B -2
/dev/sdXX partition 4G 0B -3
free -h
free -h
# Salida
total used free shared buff/cache available
Mem: 4.9Gi 2.2Gi 193Mi 13Mi 2.6Gi 2.7Gi
Swap: 8.0Gi 2.0Mi 8.0Gi
cat /proc/swaps
El sistema de archivos Unix proc contiene información sobre varias estructuras de datos del núcleo, incluido el intercambio:
cat /proc/swaps
# Salida
Filename Type Size Used Priority
/archivoswap file 4194300 2272 -2
/dev/sdXX partition 4194300 0 -3
top
top
# Salida
top - 17:40:08 up 54 min, 1 user, load average: 0.29, 0.22, 0.12
Tasks: 188 total, 1 running, 187 sleeping, 0 stopped, 0 zombie
%Cpu(s): 17.5 us, 0.7 sy, 0.0 ni, 81.6 id, 0.0 wa, 0.0 hi, 0.2 si, 0.0 st
MiB Mem : 5050.7 total, 840.9 free, 1555.4 used, 2654.3 buff/cache
MiB Swap: 8192.0 total, 8189.8 free, 2.2 used. 3407.1 avail Mem
