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

Categorized in:

Tagged in:

,