Cantidad de memoria
Como ya se comentó en la primera parte, la memoria completa se denomina memoria virtual y consta de memoria física y espacio de intercambio. La disponibilidad de la memoria física depende del hardware que está integrado en la máquina, así como de la cantidad de memoria que el procesador puede manejar, en realidad. Como ejemplo, los sistemas operativos de 32 bits tienen un límite de 4G de memoria, solo (2 ^ 32 bits), mientras que los sistemas operativos basados en 64 bits teóricamente permiten hasta 16 EB (2 ^ 64 bits).
Para ser precisos, la limitación es la placa base con el procesador en sí, los módulos de memoria que son compatibles con esa placa base y los módulos de memoria específicos que están conectados a las ranuras de memoria de la placa base. Una forma de maximizar la memoria disponible del sistema es utilizar módulos de memoria similares que tengan el tamaño más grande posible. La segunda forma es usar la memoria Swap como ya se explicó en la primera parte.
Acceso a la memoria
A continuación, entra en consideración una mejora de la velocidad de acceso de la memoria. Al principio, el límite físico lo da el propio módulo de memoria. No puede ir por debajo de los límites físicos del hardware. En segundo lugar, un ramdisk y, en tercer lugar, el uso de zRAM puede acelerar el acceso a la memoria. Discutiremos estas dos tecnologías con más detalle.
Creando un ramdisk
Un disco RAM es un bloque de memoria que el sistema operativo maneja como un dispositivo físico para almacenar datos, un disco duro que se guarda por completo en la memoria. Este dispositivo temporal existe tan pronto como el sistema se inicia y habilita el ramdisk, y el sistema deshabilita el ramdisk o se apaga. Tenga en cuenta que los datos que almacena en un disco RAM de este tipo se pierden después del apagado de la máquina.
Puede crear un disco RAM dinámico a través del sistema de archivos tmpfs y mediante el sistema de archivos ramfs. Ambas tecnologías difieren significativamente entre sí. Primero, dinámico significa que la memoria para el disco ram se asigna en función de su uso (cierto para ambos métodos). Siempre que no almacene datos en él, el tamaño del disco ram es 0.
La creación de un disco RAM dinámico a través de tmpfs es la siguiente:
# mkdir / media / ramdisk# mount -t tmpfs ninguno / media / ramdisk
La creación de un disco RAM dinámico a través de ramfs es la siguiente:
# mkdir / media / ramdisk# mount -t ramfs ramfs / media / ramdisk
En segundo lugar, el uso de tmpfs y, a menos que se especifique explícitamente, el tamaño del disco RAM está limitado al 50% de la memoria física. En contraste, un ramdisk basado en ramfs no tiene tal limitación.
La creación de un disco RAM dinámico a través de tmpfs con un tamaño relativo del 20% de la memoria física es la siguiente:
# mkdir / media / ramdisk# mount -t tmpfs -o tamaño = 20% ninguno / media / ramdisk
La creación de un disco RAM dinámico a través de tmpfs con un tamaño fijo de 200 M de memoria física es la siguiente:
# mkdir / media / ramdisk# mount -t tmpfs -o tamaño = 200M ninguno / media / ramdisk
En tercer lugar, ambos métodos manejan el intercambio de manera diferente. En caso de que el sistema alcance el límite de memoria de un disco ram basado en tmpfs, los datos del disco ram se intercambian. Esto frustra la idea de un acceso rápido. Por otro lado, el sistema operativo prioriza tanto el contenido como las páginas de memoria solicitadas de un disco ram basado en ramfs, lo mantiene en la memoria e intercambia las páginas de memoria restantes al disco.
En los ejemplos anteriores hemos utilizado / media / ramdisk
como punto de montaje. Con respecto a los datos regulares, la única parte del sistema de archivos de Linux que se recomienda utilizar en un disco ram es / tmp
. Este directorio almacena datos temporales, solo, que no persisten. La creación de un disco RAM permanente que almacena el sistema de archivos / tmp requiere una entrada adicional en el archivo / etc / fstab
de la siguiente manera (basado en ramfs):
La próxima vez que inicie su sistema Linux, el disco RAM se habilitará automáticamente.
Usando zRAM
zRAM significa Virtual Swap Compressed en RAM y crea un dispositivo de bloque comprimido directamente en la memoria física. zRAM entra en acción (uso) tan pronto como no haya más páginas de memoria física disponibles en el sistema. Luego, el kernel de Linux intenta almacenar páginas como datos comprimidos en el dispositivo zRAM.
Actualmente, no hay ningún paquete disponible para Debian GNU / Linux, pero Ubuntu. Se llama zram-config. Instale el paquete y configure un dispositivo zRAM simplemente iniciando el servicio systemd correspondiente de la siguiente manera:
# systemctrl iniciar zram-configSegún lo dado por la salida de swapon -s,
el dispositivo está activo como una partición de intercambio adicional. Automáticamente, se asigna un tamaño del 50% de la memoria para zRAM (ver figura 1). Actualmente, no hay forma de especificar un valor diferente para que se asigne zRAM.
Para ver más detalles sobre la partición de intercambio comprimida, use el comando zramctl
. La Figura 2 muestra el nombre del dispositivo, el algoritmo de compresión (LZO), el tamaño de la partición de intercambio, el tamaño de los datos en el disco y su tamaño comprimido, así como el número de flujos de compresión (valor predeterminado: 1).
Estrategia de uso
A continuación, nos centramos en la estrategia de uso de la memoria. Hay algunos parámetros que influyen en el comportamiento del uso y la distribución de la memoria. Esto incluye el tamaño de las páginas de memoria; en sistemas de 64 bits es 4M. A continuación, el intercambio de parámetros juega un papel. Como ya se explicó en la parte uno, este parámetro controla el peso relativo que se le da al intercambio de memoria en tiempo de ejecución, en lugar de eliminar páginas de memoria del caché de la página del sistema. Además, no debemos olvidar tanto el almacenamiento en caché como la alineación de la página de memoria.
Utilice programas que requieran menos memoria
Por último, pero no menos importante, el uso de la memoria depende de los programas en sí. La mayoría de ellos están vinculados a la biblioteca C predeterminada (LibC estándar). Como desarrollador, para minimizar su código binario, considere usar una alternativa y una biblioteca C mucho más pequeña en su lugar. Por ejemplo, hay dietlibc [1], uClibc [2] y musl lib C [3]. El sitio web del desarrollador de musl lib C contiene una amplia comparación [4] con respecto a estas bibliotecas en términos del programa C estático más pequeño posible, una comparación de características, así como los entornos de compilación correspondientes y las arquitecturas de hardware compatibles.
Como usuario, es posible que no tenga que compilar sus programas. Considere buscar programas más pequeños y marcos diferentes que requieran menos recursos. Como ejemplo, puede usar el entorno de escritorio XFCE en lugar de KDE o GNOME.
Conclusión
Existen bastantes opciones para cambiar el uso de la memoria para mejor. Esto va desde Swap hasta la compresión basada en zRAM, así como la configuración de un ramdisk o la selección de un marco diferente.
Enlaces y referencias
- [1] dietlibc, https: // www.fefe.de / dietlibc /
- [2] uClibc, https: // uclibc.org /
- [3] musl lib C, http: // www.musl-libc.org /
- [4] comparación de bibliotecas C, http: // www.etalabs.net / compare_libcs.html
Serie de administración de memoria de Linux
- Parte 1: Gestión de la memoria del kernel de Linux: espacio de intercambio
- Parte 2: Comandos para administrar la memoria de Linux
- Parte 3: Optimización del uso de la memoria de Linux
Agradecimientos
El autor desea agradecer a Axel Beckert y Gerold Rupprecht por su apoyo durante la preparación de este artículo.