Está en la página 1de 21

Asignatura: Sistemas Operativos Actividad 4 Gestión de memoria Ciclo 02-2022 Sec.

01
(Virtual)
Fecha de 1-11-2022 Fecha de 18/11/2022
Inicio: Entrega:
Nombre: Carnet:

Indicación: Revisar el contenido de la siguiente guía y desarrollar los puntos Forma de Digital en espacio
de prácticas que se proponen, esta actividad es evaluada; Solo Entrega indicado en el aula Solo
enviar la parte de: Ejercicios de Entrega enviar la Parte que dice
“Ejercicio de Entrega”

1. JERARQUÍA DE MEMORIA

Para que un proceso (una aplicación o parte de una o lo que sea) pueda ejecutarse, debe de estar
cargado en memoria. No hay comunicación directa de datos entre el procesador y los discos...

Más concretamente, el procesador "busca" por orden de proximidad. Primero "consulta" en los
registros internos del propio procesador; luego en la caché de primer nivel; luego en la de segundo
nivel (la de la placa, algunos dicen caché L2); luego la memoria. Si toma algo de disco, lo lleva a la
memoria, luego lo lleva a la L2 y luego a la L1 y, si es oportuno, a los registros.

2. MEMORIA VIRTUAL: SWAP (intercambio)

La "Memoria Virtual" es un mecanismo para "ampliar" la capacidad de la memoria. Técnicamente,


funciona como intermediaria entre los discos y la Memoria Principal. La desventaja de la Memoria
Virtual es obvia: el tiempo de acceso a disco duro es muy elevado.

Aquí añadir que Linux, como Windows y derivados, puede utilizar partición swap o archivo swap. Las
diferencias son las que podríamos pensar. El uso de un sistema de ficheros adecuado en una partición
propia es más eficiente en velocidad, el uso de un archivo es más eficiente en términos de espacio
(pudiendo incluso variar dinámicamente, según hiciese falta). Aquí se incluye que a partir de 1GB de
Memoria RAM el uso normal de un sistema implica que la swap apenas se utilice, ocupando su
partición un espacio que podría usarse para otra cosa. Por otra parte, en un disco de 200 o 300 GB, 1
o 2 no tienen por qué importar mucho.

Y como todos los parámetros de configuración (sistema de ficheros, sistema de memoria, etc.) la swap
se configura en la instalación (cuando se configura el núcleo). Por supuesto, lo que hace una
instalación genérica es algo así: "si hay una partición swap, usarla; sino, no". En tiempo de inicio, el
núcleo monta la partición de swap según la entrada del fichero /etc/fstab. Si se elimina tal entrada, el
sistema funcionará sin swap. Si se crea esa entrada, el sistema la utilizará. Esto es bueno para
redefinir tamaños, re-mapear tablas de partición, etc.

3. ESPACIOS DE DIRECCIONES

El uso de la memoria suele explicarse como una tabla, al más puro "hundir la flota". Cada celda
individual contiene un bit, y se referencia por la columna y la fila que ocupa. Es cuestión de cada
sistema particular si primero va la columna y luego la fila... En todo caso, una de las consecuencias es
la disponibilidad final de celdas

Supongamos que tenemos una tarjeta de memoria de 1MB. Esta podría ser una "tabla" de 1000 filas x
1000 columnas = 1000.000 celdas. Cada celda individual se referencia (direcciona, se da su dirección)
especificando la fila y la columna: por ejemplo, la celda (posición) 780 (fila) 400 (columna) sería la
celda 780400 (Por supuesto, todo en binario, aunque los S.O. suelen traducirlo a hexadecimal,
generalmente anteponiendo 0x como símbolo de hexadecimal).

Por otra parte, podría (suele) haber más de una tarjeta de memoria. ¿Cómo se referencian? ¿Se
antepone el número de tarjeta, o qué?

Los procesadores tienen un "mapa de memoria", que es una especie de representación (por decirlo
de esa forma) de toda la memoria que puede usar el sistema, en una única tabla... Así, el mapa de
memoria en un sistema de 32 bits podría ser una tabla de 2 elevado a 32 celdas (4.29497e+09 celdas).
Lo que se hace es "traducir" esa dirección a algo que exista en el sistema: los primeros bits sirven de
"selector de tarjeta", y los demás definen las posiciones dentro de la tarjeta. La memoria que no se
use, simplemente no se asigna. El "Espacio de direcciones" es el rango de celdas que corresponden a
cada tarjeta.

Pero en sistemas multiusuario como Linux el Espacio de Direcciones se emplea de otra forma. Para
verlo, cambiemos la metáfora.

Imagínese el mapa de memoria. Es necesario ahora verlo como una pila de platos, por ejemplo. Cada
plato se correspondería a una fila del mapa de direcciones. Lo que hace el sistema es asignar un
conjunto de platos para una cosa, otro para otra, y así... Por ejemplo: los platos de arriba para el
sistema base (núcleo y utilidades de sistema, módulos, etc.), unos cuantos para un usuario, otros para
otro... El sistema enmascara eso y lo que ofrece al usuario es una especie de memoria virtual, con sólo
los platos que le corresponden, pero dando la impresión de que se usa toda la memoria. Esta política
podríamos llamarla de "compartimentación", y permite que los fallos de memoria de un usuario no
afecten a los demás. Grosso modo, esta política puede abstraerse a nivel de aplicación (donde cada
aplicación ve sólo la parte de memoria que el sistema le asigna)

4. POLÍTICAS DE GESTIÓN DE MEMORIA

Que también pueden llamarse de "reemplazo", porque eso es exactamente, el decidir qué se carga en
memoria, el cuándo... y si hay que quitar algo para hacer sitio.

En el final del epígrafe tratamos de introducir el concepto de "Espacio de Direcciones" y hablamos de


Espacios de Usuario y de Espacios de Aplicación (que es el nombre que tienen). Esto suena a bastante
complicado, y de hecho lo es.

Los algoritmos (programas, por decirlo así) de gestión de memoria en Linux son quizás una de sus
características fundamentales, y es el rasgo que más diferencia a este sistema de otros que no son
multiusuario.

Así, Linux utiliza ideas como "cargar todo lo que pueda hacer falta", para evitar transacciones con la
memoria virtual. El tiempo que se ahorra se destina, fundamentalmente, en decidir qué es lo que se
carga. Cada elemento se carga en el espacio de direcciones correspondiente, sea el espacio del
sistema, el espacio de usuario o el de aplicación. Otra tarea complicada para estos algoritmos es la
conversión de direcciones (del mapa del sistema a todos los espacios que se usan), verificación de las
mismas... Para los elementos que compartan varios usuarios, existe un espacio de direcciones
compartidas; también se utilizan buffers y cachés para acelerar el acceso a la información. Podríamos
ver esto como "que se guarde en un buffer una cosa que tal vez a lo mejor se use".

En esta práctica, aprenderemos los comandos avanzados de Linux para monitorear componentes
físicos (específicamente memoria principal).

Un sistema Linux está conformado por varios componentes físicos clave como CPU, memorias,
tarjetas de red y dispositivos de almacenamiento. Para administrar de manera efectiva el entorno
Linux, usted debería poder evaluar varias métricas de estos recursos

Monitorear componentes físicos. En especial, aprenderá acerca de los comandos en las siguientes
categorías:

Component Comandos
Memoria free, vmstat, mpstat, iostat, sar

CPU vmstat, mpstat, iostat, sar

I/O vmstat, mpstat, iostat, sar

Processes ipcs, ipcrm

Como puede observar, algunos comandos aparecen en más de una categoría. Esto se debe a que los
comandos pueden desempeñar muchas tareas. Algunos comandos se ajustan mejor a otros
componentes por ejmplo, iostat para I/O, pero debería comprender las diferencias en sus trabajos y
utilizar aquellos con los que se sienta más cómodo.

En la mayoría de los casos, un solo comando no es útil para comprender lo que realmente está
sucediendo. Usted debería conocer múltiples comandos para obtener la información que desea.

Comando free:
Una pregunta común es, “¿Cuánta memoria está siendo utilizada por mis aplicaciones y los distintos
servidores, usuarios y procesos de sistemas?” O, “¿Cuánto espacio de memoria tengo libre en este
momento?” Si la memoria utilizada por los procesos en ejecución es mayor la memoria RAM
disponible, los procesos se trasladan a la memoria swap (memoria virtual). Por lo tanto, una pregunta
complementaria sería, “¿Qué cantidad de memoria swap se está utilizando?”.

El comando “free” responde a todas estas preguntas. Es más, una opción muy útil, –m, muestra la
memoria libre en megabytes:

# free -m
total used free shared buffers cached
Mem: 1772 1654 117 0 18 618
-/+ buffers/cache: 1017 754
Swap: 1983 1065 918

El output muestra que el sistema tiene 1.772 MB de RAM, de los cuales se utilizan 1.654 MB, dejando
117 MB de memoria libre. La segunda línea muestra los cambios de tamaño de caché y buffers en la
memoria física. La tercera línea muestra la utilización de memoria swap.
Para expresar lo mismo en kilobytes y gigabytes, reemplace la opción -m con -k o -g respectivamente.
Usted puede colocarse en el nivel de bytes también, utilizando la opción –b.

# free -b
total used free shared buffers cached
Mem: 1858129920 1724039168 134090752 0 18640896 643194880
-/+ buffers/cache: 1062203392 795926528
Swap: 2080366592 1116721152 963645440

La opción –t muestra el total al final del output (suma de memoria física más swap):
# free -m -t
total used free shared buffers cached
Mem: 1772 1644 127 0 16 613
-/+ buffers/cache: 1014 757
Swap: 1983 1065 918
Total: 3756 2709 1046

A pesar de que “free” no muestra los porcentajes, podemos extraer y formatear partes específicas del
output para mostrar la memoria utilizada como porcentaje del total solamente:

# free -m | grep Mem | awk '{print ($3 / $2)*100}'


98.7077

Esto viene bien para los shell scripts en donde las cantidades específicas son importantes. Por
ejemplo, usted quizás quiera generar un alerta cuando el porcentaje de memoria libre descienda por
debajo de cierto límite. De modo similar, para encontrar el porcentaje de swap utilizado, usted puede
emitir:

free -m | grep -i Swap | awk '{print ($3 / $2)*100}'

Puede utilizar free para observar la carga de memoria empleada por una aplicación. Por ejemplo,
controle la memoria libre antes de iniciar una aplicación de backup y luego contrólela
inmediatamente luego de iniciarla. La diferencia podría atribuirse al consumo por parte de la
aplicación de backup.

El comando free muestra información relativa al uso de la memoria. Sin embargo, el resultado


mostrado por este comando es estático, para poder visualizar el uso de la memoria de manera
dinámica, se le puede agregar el comando watch:

#watch –n 1 –d free
Every 1,0s: free Wed Sep 23 10:22:47 2014
Total used free shared buffers cached
Mem: 3632736 1049556 2583180 0 359644 255072
-/+ buffers/cache: 434840 3197896
Swap: 1991920 0 1991920

La opción –n indica el tiempo de refrescamiento de la información y –d para resaltar la evolución de


los snapshots.

vmstat: proporciona información sobre el uso de la memoria virtual por los threads del núcleo, el
disco y la actividad del procesador.

#vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 0 2583032 359664 255088 0 0 1 14 63 22 1 0 99 0

LIBERAR MEMORIA CACHE DE LA RAM

En teoría para máquinas potentes no se debería notar mucha diferencia en el rendimiento que
obtenemos ya que en principio lo que se almacena y borra en la memoria cache de nuestra RAM es
controlado por nuestro Kernel. Con la siguiente explicación podrán comprender como funciona
nuestra memoria cache.

¿Cómo funciona la memoria cache?

Nuestra memoria RAM se subdivide en varias partes. Una parte de la memoria se denomina SRAM o
RAM estática y otra parte de llama DRAM o RAM dinámica. La parte de la memoria que denominamos
SRAM es la memoria rápida y la que denominamos cache. ¿Cómo funciona la memoria cache o
SRAM?

Cuando ejecutamos un programa, por ejemplo Libre office, se tiene que cargar en nuestra memoria y
posteriormente arrancar. El proceso descrito puede tener una duración de tranquilamente 6 o 7
segundos. Una vez cerremos Libre office parte de la información que se ha cargado a la memoria
quedará almacenada de forma permanente en nuestra memoria SRAM o cache de tal forma que
cuando volvamos a ejecutar libre office nuestro ordenador primero mirará si tenemos almacenada la
información necesaria en la SRAM o cache, y como en este caso ya tenemos la información en
nuestra memoria la aplicación arrancará mucho más rápido que la primera vez.

Si además de Libre office arrancamos muchos más programas como por ejemplo Firefox, Chrome,
gimp, etc. llegará a un punto que nuestra memoria SRAM o cache está llena y en teoría esto debería
perjudicar al rendimiento de nuestro equipo. Pero en este punto entra en acción nuestro Kernel. En
esta situación el Kernel de nuestro ordenador se encargará de gestionar inteligentemente la cache
(SRAM) de nuestro equipo. Así que cuando detecte que nuestra SRAM o cache está llena procederá a
vaciarla de forma inteligente y borrando siempre los datos que más nos conviene para obtener el
mejor rendimiento posible. Por esto a priori no es necesario hacer un vaciado de la memoria cache.

¿Cómo liberar memoria cache de nuestra RAM?


Para realizar la limpieza podemos generar un script muy básico y simple. El script lo podemos hacer
de la siguiente forma: Creamos un archivo en nuestra home que se llame limpiamemoria.sh. Para
crearlo abrimos una terminal y tecleamos: (Ejercicio ¡)

sudo nano limpiamemoria.sh

Dentro del archivo copiamos el siguiente texto   (antes de copiar el texto ver nota):

#!/bin/bash
echo “Limpiando la caché~ “;
sync ; echo 1 > /proc/sys/vm/drop_caches
sync ; echo 2 > /proc/sys/vm/drop_caches
sync ; echo 3 > /proc/sys/vm/drop_caches

Nota: En el script hay una frase de color rojo, otra de color verde y otra de color negro, Solo debemos
copiar una de las tres frases en función de lo agresivos que queremos ser en limpiar nuestra cache. Si
elegimos la frase de color rojo es la opción menos agresiva mientras que si elegimos la frase de color
negro estamos eligiendo la opción más agresiva.

Una vez definido el texto del script tanto tenemos que guardar y cerrar.

Antes de seguir adelante es importante hace un paréntesis y comprender lo que estamos haciendo
con el comando que se ejecuta en el script. El comando que estamos ejecutando es:

sync ; echo (1,2 o 3) > /proc/sys/vm/drop_caches

Con este comando lo que hacemos es modificar el archivo drop_caches que se halla en la ubicación
/proc/sys/vm/. Este archivo tiene 4 valores posibles. En función del valor que le asignamos a este
archivo nuestro kernel actuará de una forma u otra con la información que tenemos almacenada en
nuestra cache. Los posibles valores que podemos definir en el archivo son:

 0: Es el valor por defecto siempre que arrancamos nuestro ordenador. Si dejamos este comando no se
liberara absolutamente nada de nuestra memoria cache.
 1: Equivaldría a usar el script con “echo 1 > /proc/sys/vm/drop_caches”. Al ejectuar el script con este
valor estamos forzando a nuestro kernel a liberar la pagecache.
 2: Equivaldría a usar el script con “echo 2 > /proc/sys/vm/drop_caches”. Al ejectuar el script con este
valor estamos forzando a nuestro kernel a liberar los inodos y dentries.
 3: Equivaldría a usar el script con “echo 3 > /proc/sys/vm/drop_caches”. Al ejectuar el script con este
valor estamos forzando a nuestro kernel a liberar la pagecache, los inodos y las dentries.

Nota 1: Pueden elegir tranquilamente la opción más agresiva de las 3. Si se observan en el script
aparece el comando sync. Con el comando sync aseguramos que solo se liberen de la cache los
objetos que no estamos usando actualmente. Por lo tanto a priori no hay peligro de cuelgues ni
estabilidad en realizar esta operación.

Nota 2: Si elegimos la opción 3 estaremos borrando los inodos, dentries y pagecache. Los inodos
contienen meta-información de archivos individuales como por ejemplo el propietario, el grupo, la
fecha de creación, la hora de creación etc, así como también los bloques del disco duro que contienen
la información que acabamos de citar. Las dentries contienen información para enlazar los nombres
de los distintos directorios con los ficheros que contienen para de esta forma acceder más rápido
a nuestras aplicaciones. Mientras que la pagecache almacena copias de los bloques de nuestro disco
duro.

A estas alturas ya solo nos queda ejecutar el script. Para ejecutar el script primero tenemos que darle
permisos. Para darle permisos abrimos una terminal en la misma ruta donde hemos guardado el
script y tecleamos:

sudo chmod +x limpiamemoria.sh

Antes de ejecutar el script tecleamos en la terminal el comando:

free

Y obtenemos el siguiente resultado:

En la captura de pantalla que acabamos de pegar se pueden ver el estado de nuestra memoria RAM


en este preciso instante. Después de ejecutar el script podremos comparar los resultados.

Ahora ejecutamos el script mediante el comando

sudo ./limpiamemoria.sh

Una vez ejecutado el script en la terminal volvemos a usar el comando free. Con el comando free
ahora podremos observar lo que ha realizado la ejecución de nuestro script:
Si observamos la captura de pantalla podemos ver que la ejecución del script nos ha liberado
aproximadamente 200 mb de nuestra RAM cache. Por lo tanto podemos decir que el proceso ha
salido correctamente.

Nota: Una vez liberada la memoria cache no hay que preocuparse de nada más. A medida que
vayamos abriendo programas el contenido se cacheara como lo hace habitualmente. Cuando cuando
volvamos a arrancar nuestro ordenador nuestra configuración seguirá siendo la standard ya que con
este script no estamos modificando la configuración de arranque de nuestro ordenador.

Automatizar el proceso de limpieza de la Cache

En el caso que seáis de las personas que tenéis las 24 horas vuestro ordenador funcionando les puede
interesar realizar la operación de limpieza de cache de forma automática. Para ello tenemos que
seguir los siguientes pasos:

Copiaremos el script creado en la carpeta /bin. Para ello abrimos una terminal y tecleamos:

mv limpiamemoria.sh /bin

Ahora configuraremos contrab para que el script se ejecute periódicamente a las 12 de la noche. Para
ello en la terminal tecleamos:

crontab -e

Se abrirá el editor de textos en modo terminal y copiamos el siguiente contenido:

0 0 * * * /bin/limpiamemoria.sh
Cerramos y guardamos. De esta forma nuestro script se ejecutará periódicamente sin que nosotros
tengamos que hacer nada
¿Qué es la memoria Swap?

La Swap o espacio de intercambio es un espacio en nuestro disco duro que se usa para almacenar los
datos e imágenes de procesos que no pueden ser almacenados en nuestra memoria RAM por falta de
capacidad. Por lo tanto la swap es una forma para liberar carga de nuestra memoria RAM.

En otras palabras la Swap es el equivalente de lo que se conoce como archivo de paginación en


Windows. La gran mayoría de usuarios de Windows probablemente no conocen la existencia de los
archivos de paginación o swap. Los usuarios de Linux si conocen su existencia porqué en el momento
de la instalación se tienen que realizar una partición de swap en nuestro disco duro mientras que en
Windows esto no es necesario. El mismo Windows te genera de forma poco transparente un archivo
de paginación que se incremente o disminuye de tamaño en función de la carga que estemos dando a
nuestro equipo.

Nota: En el caso que en Linux nos olvidemos de crear una partición de intercambio cuando estamos
instalando nuestro sistema operativo no implica tener que volver a instalar el sistema. Siempre
podemos modificar nuestra tabla de particiones de nuevo y crear la partición Swap. O también existe
la opción de generar un archivo de intercambio Swap al estilo Windows. En un futuro post se
explicará cómo crear un archivo que funcione como memoria de intercambio swap.

¿Por qué Linux necesita utilizar la swap?

Linux necesita la memoria Swap porqué es un forma de ampliar la memoria RAM de nuestro sistema
operativo en el caso que esté llena.

A medida que vamos ejecutando aplicaciones en nuestro sistema operativo estas se cargan en la
memoria RAM. A medida que vayamos cargando aplicaciones nuestra memoria RAM se va llenando y
puede llegar al punto que está prácticamente llena. En el momento que la memoria RAM se llene
completamente e intentemos ejecutar otras aplicaciones nuestro sistema operativo simplemente se
saturará, se volverá inestable o nos generará algún tipo de error ya que no tiene recursos para iniciar
más aplicaciones de forma simultánea.

Es en esta situación es donde actúa la swap. A partir de un cierto nivel de carga en la RAM, que
nosotros podemos controlar mediante el parámetro swappines, el Kernel de nuestro linux buscará
las imágenes de procesos que menos usamos y tengamos cargados en nuestra memoria RAM y los
moverá a nuestro disco duro en la zona que denominamos como área de intercambio o swap. De esta
forma estamos liberando memoria RAM para poder cargar más procesos.

Además Linux necesita un mínimo de memoria Swap para trabajar de forma eficiente cuando nos
quedamos sin memoria. La explicación de esta afirmación es la siguiente:

En la memoria RAM se guarda diverso tipo de información:

Tipo 1 - Información que siempre tiene que estar almacenada en la memoria RAM y en ningún caso
podrá ser swapeada.
Tipo 2 - Información que se puede swapear y que además de estar en la RAM también está
respaldada en nuestro disco duro. Esta información, en el caso de no existir swap, se puede eliminar
de la RAM y que siempre podemos recuperarla porqué hay una copia en el disco duro.

Tipo 3- Información que se puede swapear pero que no dispone de una copia de respaldo en el disco
duro.

Ahora imaginemos que nuestro ordenador se está quedando sin memoria RAM:

En el caso de tener una partición de intercambio el kernel podrá eliminar o intercambiar información
clasificada dentro del tipo 2 y 3.

En el caso que no tengamos una partición de intercambio, nuestro kernel solo se podrá plantear
eliminar información clasificada como tipo 2. ¿Por qué?

Hay que tener en cuenta que la información de tipo 2 no se puede swapear, por qué no existe la
partición de intercambio, pero se puede eliminar ya que existe una copia de respaldo y por lo tanto en
caso de hacer falta siempre la podemos volver a recuperar. La información de tipo 3 nunca la
podemos eliminar ya que no tiene respaldo alguno y no la podemos swapear por no existir en
el área de intercambio. Esto implica que se tiene que quedar a la fuerza en la memoria RAM.

Por lo tanto si no tenemos espacio de intercambio el rendimiento no será el óptimo en caso de


quedarnos sin memoria. Puede darse perfectamente el caso que la solución ideal para no notar una
pérdida de rendimiento sea eliminar información del tipo 3. Pero al no existir memoria de
intercambio tendrá que eliminar información del tipo 2 pudiendo perjudicar notablemente el
rendimiento de nuestro sistema ya que no es la solución ideal.

 ¿Por qué debemos minimizar el uso de la swap en nuestros ordenadores?

En ordenadores con prestaciones normales, o incluso de prestaciones reducidas como mi Eee PC,
seguro que notaréis que en el momento que se activa la memoria Swap todo empieza a ir más lento.
¿Por qué en el momento de activarse la swap el ordenador se ralentiza?

Simplemente porqué las librearías y procesos necesarios para poder ejecutar algunas de las
aplicaciones se hallan en una parte del disco duro denominado swap en vez de a la memoria RAM.
Cómo todos saben la velocidad de ejecución de la información almacenada en la memoria RAM es
infinitamente superior a la que tenemos en nuestro disco duro. Por lo tanto es normal que todo vaya
mucho más lento.

Otro motivo de la lentitud que experimentamos es la posible aparición de hiperpaginación. La


hiperpaginación causará que haya una serie de librerías que estén intercambiándose continuamente
de la memoria RAM a la Swap y de la Swap a la RAM causando lentitud y sobrecarga en el sistema. Los
motivos de la hiperpaginación pueden ser que nuestro ordenador tenga muy poca RAM o que los
algoritmos de intercambio de procesos de un sitio a otro estén mal implementados.

Pero tenemos que tener en cuenta que no en todos los equipos es interesante minimizar el uso de la
Swap. Hay casos particulares que incluso pueden ser necesarios no minimizar el uso de la memoria
Swap. Estos casos particulares pueden ser los siguientes:
1. Servidores en los que exista una alta carga de trabajo. Hay que tener en cuenta que los servidores
acostumbran a lidiar con bases de datos y archivos de gran tamaño.
2. En el caso que dispongamos de un ordenador que tenga muy poca memoria RAM disponible. Este
caso si estamos hablando de ordenadores relativamente actuales nunca se dará.
3. Ordenadores que aunque dispongan de mucha memoria RAM tengan que ejecutar aplicaciones que
hagan un gran consumo de RAM. Por lo tanto tenemos que ir con cuidado en el caso que tengamos
que usar aplicaciones que consuman gran cantidad de RAM.
4. Usuarios que tengan que compilar aplicaciones que sean muy grandes.
Nota: En prácticamente el 99% de los ordenadores actuales podemos minimizar el uso de la memoria
swap. Los 4 casos que acabamos de citar prácticamente no se dan en la mayoría de usuarios. Además
hoy en día los ordenadores tienen mucha RAM en comparación con los ordenadores de años atrás.

Cantidad de memoria Swap que es aconsejable asignar

En internet encontrareis multitud de opiniones sobre la memoria swap que se debe asignar para que
nuestro sistema operativo funcione adecuadamente. Una teoría muy extendida es la que se presenta
a continuación:

1. En el caso que tengamos 1 GB de RAM o menos deberemos tener un tamaño igual a nuestra RAM. Por
lo tanto si tenemos 512 Mb de RAM deberemos tener 512 Mb de Swap
2. En el caso que tengamos entre 2 y 4 GB de RAM la swap deberá ser la mitad de
nuestra memoria RAM. Así por lo tanto si tenemos 2Gb de RAM deberíamos tener 1Gb de Swap
3. En el caso de equipos más modernos con más de 4Gb de RAM como máximo deberíamos tener 2 Gb
de memoria de intercambio.

No obstante según mi punto de vista el criterio que deberíamos seguir es el siguiente:

1. Primero tenemos que saber la memoria RAM que tiene nuestro ordenador. Por ejemplo pongamos
que tenga 1 Gb de RAM.
2. A continuación tenemos que tener una idea del consumo máximo de RAM que tendremos con
nuestro equipo en la peor de las situaciones. Por ejemplo considero que el uso máximo de memoria
RAM se dará cuando use simultáneamente el navegador, Libreoffice, el gestor de correo y el
reproductor de música. Estimo que con todas estas aplicaciones abiertas mi consumo total Será de 2
GB.
3. Considerando que tenemos un 1Gb de RAM y en el peor de los casos vamos a llenar 2 Gb implica que
tenemos que asignar 1 Gb de Swap más un margen de seguridad de 512Mb. Por lo tanto en el caso
presentado 1.5 Gb de Swap es suficiente.
4. Para finalizar hay que tener claro si tendremos la necesidad de poner nuestro equipo en hibernación.
En el momento que hibernamos nuestro equipo lo que estamos haciendo es volcar la totalidad
de imágenes de procesos de nuestra memoria RAM a nuestra memoria Swap. Por lo tanto en el caso
de querer hibernar el equipo como mínimo necesitaremos nan memoria Swap igual a nuestra RAM.
En el caso que hemos planteado, en el caso que quiera hibernar mi equipo, incrementaría la partición
de memoria Swap de 1.5 Gb a 2.5Gb.
Minimizar el uso de la memoria Swap

Como hemos visto en los puntos anteriores, en la gran mayoría de casos lo ideal es evitar o retardar el
uso de la swap en nuestro sistema operativo y usar la memoria RAM siempre que sea posible. De esta
forma el funcionamiento de nuestro ordenador será mucho más rápido y fluido. Además los usuarios
que dispongan de un disco duro SSD puede que no deseen que se escriba información en su disco
duro ya que la vida de un disco duro SSD viene determinado por un número límite de escrituras.

Quien decide el momento en que se empiezan a trasvasar imágenes de procesos de la RAM a la Swap
es el Kernel. Como Linux es un sistema operativo abierto podemos hacer que el Kernel de Linux
esperé hasta cuando la memoria RAM este casi llena para que empezar el trasvase. Tan solo tenemos
que modificar el valor de swappiness de nuestro sistema operativo para indicarle al kernel de linux
que dé más prioridad al uso de RAM que al uso de Swap.

El valor de swappiness puede comprender un valor entre 0 y 100. Si el valor es 0 se evitará el


intercambio de información entre la RAM y la Swap, mientras que si elegimos un valor 100 el
intercambio se estará realizando constantemente  La mayoría de distribuciones Linux vienen pre
configuradas con un valor de swappiness de 60. Este valor es probablemente correcto para el uso de
servidores y superordenadores pero es claramente excesivo para usuarios domésticos como nosotros.

Por lo tanto en nuestro caso podemos recudir muy drásticamente el valor de la swappiness por
defecto hasta valores de 10 o 5. Para ello lo primero que tenemos que hacer es abrir una terminal y
teclear el siguiente comando:

cat /proc/sys/vm/swappiness

La salida será el valor actual de swappiness que tenemos asignado. Si no habéis tocado nunca este
parámetro es probable que el valor que salga en pantalla sea 60, ya que es el valor por defecto que
usan la mayoría de distros de Linux. Si es este nuestro caso y tienes un valor de 60 podemos reducir
drásticamente el uso de swap.

Si queremos reducir el valor de Swappiness de 60 a 10 tan solo tenemos que abrir una terminal y
escribir el siguiente comando:

sudo sysctl -w vm.swappiness=10

En estos momentos ya tenemos fijado el valor de swappiness en 10 y nuestro sistema operativo


tenderá a usar mucho menos swap que cuando teníamos fijado el valor en 60.

Una vez tenemos el nuevo valor, lo más aconsejable es usar el ordenador durante un periodo de
tiempo razonable para asegurar que el rendimiento que obtenemos con el nuevo parámetro es
aceptable y también para comprobar que el sistema sea estable.
Una vez que estamos seguros que nuestro sistema rinde mejor y no genera inestabilidad en el sistema
lo que haremos es hacer este cambio permanente. Así evitaremos que cada vez que arranquemos el
ordenador tengamos que cambiar el valor de swappiness de 60 a 10.

Para hacerlo persistente el valor de swappiness 10 abrimos una terminal y tecleamos:

sudo nano /etc/sysctl.conf

Justo al final del fichero introducimos el siguiente comando:

vm.swappiness=10

Guardamos el fichero y la próxima vez que arranquemos nuestro ordenador ya tendremos ajustado el


valor de swappiness a 10. Si queremos realizar la comprobación tan solo tenemos que abrir una
terminal y teclear el siguiente comando:

cat /proc/sys/vm/swappiness

Liberar la memoria Swap una vez está en uso

Una vez se activa nuestra memoria Swap nuestro sistema se acostumbra a saturar y ralentizar. Una
solución para solucionar este problema es reiniciar el equipo pero existen soluciones para liberar la
memoria Swap y no tener que apagar el ordenador. Para evitar apagar el equipo podemos proceder
de la siguiente forma:

Lo que realizaremos es traspasar el contenido que tenemos almacenado en nuestra memoria Swap
hacia la memoria RAM. Por lo tanto lo primero que realizaremos es asegurarnos que la memoria RAM
tiene capacidad libre para poder albergar el contenido que está guardado en la Swap. Para hacer esto
abrimos una terminal y tecleamos el comando:

free

El comando free nos dará la salida que pueden observar en la siguiente captura de imagen:
Como podemos ver en la captura en nuestra memoria Swap tenemos almacenado 7Kb. Nuestra
memoria RAM tiene 461316 Kb libres. Por lo tanto podemos traspasar el contenido de la memoria
Swap a la RAM sin tener ningún tipo de problema.

Para realizar el traspaso abrimos la terminal y escribimos el siguiente comando para transferir el
contenido de un lado a otro:

sudo swapoff -a ; sudo swapon -a

Ahora volveremos a teclear el comando:

free

Y efectivamente en la siguiente captura de pantalla podemos confirmar que la operación ha tenido


éxito, ya que la memoria Swap ahora está completamente libre:

El proceso que acabamos ver lo podemos automatizar mediante un script y ejecutarlo


periódicamente a las 12 de la noche por ejemplo. Para ello tan solo tenemos que añadir la siguiente
frase:

swapoff -a && swapon -a

Por lo tanto el contenido del script para limpiar la memoria cache de la RAM y traspasar el contenido
de la memoria Swap a la RAM es el siguiente:

 #!/bin/bash
echo “Limpiando la caché~ “;
sync ; echo 3 > /proc/sys/vm/drop_caches
echo “Limpiando Swap~ “;
swapoff -a && swapon -a
Ejercidos de entrega:

1. Realizar el siguiente script para hacer limpieza de la memoria. Con el editor nano hacer lo
siguiente:

# nano limpiamemoria.sh

#!/bin/bash
echo “Limpiando la caché~ “;
sync ; echo 1 > /proc/sys/vm/drop_caches
sync ; echo 2 > /proc/sys/vm/drop_caches
sync ; echo 3 > /proc/sys/vm/drop_caches

 Luego cambiarle los permisos :

# chmod +x limpiamemoria.sh

 Verificar la cantidad de memoria con el comando free


 Luego ejecutar el script :

# ./limpiamemoria.sh mostrar el resultado y verificar si realizo la limpieza.


2. Automatizar el proceso de limpieza de memoria cache, utilizando crontab para que se realice
todos los días a las 6 de la mañana. Dejar constancia.
3. Minimizar el uso de la memoria swap modificando el valor swappiness.
4. Liberar la memoria swap una vez que esté en uso demostrar la liberación de memoria.´

5. Realizar el script para limpiar la memoria cache de la RAM y traspasar el contenido de la memoria
Swap a la RAM.
6. En una sola instrucción mostrar el valor con el que está trabajando la swap.

7.- Muestre el porcentaje de uso de la CPU de los procesos de sistema.


8.- Utilizando el cron programe una tarea para para crear una copia del archivo editores.txt en el
directorio tareas_prog dentro del directorio home.

9.- Muestre la cantidad de memoria disponible y utilizada por el sistema.


10- Muestre la cantidad de memoria que esté utilizando el directorio /home.

También podría gustarte