Optimización del uso de la memoria de Linux

Optimización del uso de la memoria de Linux
En la primera parte de esta serie, echamos un vistazo más de cerca al espacio de intercambio, y la segunda parte se ocupó de herramientas y comandos para administrar la memoria. Ahora, discutiremos varios parámetros y estrategias para optimizar la memoria y su uso en general. Esto cubre la cantidad de memoria, la aceleración del acceso y la estrategia de uso interno.

Cantidad de memoria

Como ya se discutió en la primera parte, toda la memoria se llama memoria virtual y consiste en la memoria física y el espacio de intercambio. La disponibilidad de la memoria física depende del hardware integrado en la máquina, así como cuánta memoria puede abordar el procesador, en realidad. Como ejemplo, los sistemas operativos de 32 bits tienen un límite de 4 g 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 en 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 de intercambio como ya se explicó en la primera parte.

Acceso a la memoria

A continuación, se considera una mejora de la velocidad de acceso de la memoria. Al principio, el límite físico viene dado por el módulo de memoria en sí. No puede ir por debajo de los límites físicos del hardware. En el segundo, un ramdisk, y en el tercero el uso de ZRAM puede acelerar el acceso a la memoria. Discutiremos estas dos tecnologías con más detalle.

Creando un ramdisk

Un ramdisk es un bloque de memoria en el que el sistema operativo maneja como un dispositivo físico para almacenar datos, un disco duro que se mantiene completamente en la memoria. Este dispositivo temporal existe tan pronto como el sistema se inicia y habilita el Drisk, y el sistema deshabilita la Ramdisk o se apaga. Tenga en cuenta que los datos que almacenan en tal ramdisk se pierde después del cierre de la máquina.

Puede crear un Dynamic RamDisk a través del sistema de archivos TMPFS y a través del sistema de archivos RAMFS. Ambas tecnologías difieren significativamente entre sí. Primero, Dynamic significa que la memoria para el Ramdisk se asigna en función de su uso (verdadero para ambos métodos). Siempre que no almacene datos sobre él, el tamaño del ramdisk es 0.

Crear un ramdisk dinámico a través de TMPFS es el siguiente:

# Mkdir /Media /Ramdisk
# Mount -T TMPFS Ninguno /Media /Ramdisk

Crear un ramdisk dinámico a través de RAMFS es el siguiente:

# Mkdir /Media /Ramdisk
# MONTE -T RAMFS RAMFS /MEDIA /RAMDISK

En segundo lugar, el uso de TMPFS y, a menos que se especifique explícitamente, el tamaño del Dramdisk se limita al 50% de la memoria física. En contraste, un ramdisk basado en RAMF no tiene tal limitación.

Es el siguiente creación de un Dinamic Ramdisk a través de TMPF con un tamaño relativo del 20% de la memoria física:

# Mkdir /Media /Ramdisk
# MONTAJE -T TMPFS -O Size = 20% Ninguno /Media /Ramdisk

Es el siguiente creación de un Dinamic Ramdisk a través de TMPF con un tamaño fijo de 200 m de memoria física:

# Mkdir /Media /Ramdisk
# MONTAJE -T TMPFS -O Size = 200m Ninguno /Media /Ramdisk

Tercero, ambos métodos manejan el intercambio de una manera diferente. En caso de que el sistema alcance el límite de memoria de una ramdisk basada en TMPFS, se intercambian datos de Ramdisk. 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 ramdisk basado en RAMFS, lo mantiene en la memoria y cambia las páginas de memoria restantes al disco.

En los ejemplos anteriores hemos usado /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 ramdisk es /TMP. Este directorio almacena datos temporales, solo, que no persisten. La creación de undisco Ram permanente que almacena el sistema de archivos /TMP requiere una entrada adicional en el archivo /etc/fstab como sigue (basado en RAMF):

RAMFS /TMP RAMFS valores predeterminados 0 0

La próxima vez que inicie su sistema Linux, el ramdisk estará habilitado, automáticamente.

Usando zram

ZRAM significa intercambio virtual comprimido en RAM y crea un dispositivo de bloque comprimido directamente en la memoria física. ZRAM entra en acción (use) tan pronto como no hay 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 un 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 de la siguiente manera:

# SystemCTRL Start Zram-Config

Segú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 comprimido, 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 para influir en el comportamiento del uso y la distribución de la memoria. Esto incluye el tamaño de las páginas de memoria: en los sistemas de 64 bits es de 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 dado al intercambio de la memoria de tiempo de ejecución, en lugar de eliminar las páginas de memoria desde el 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 comparación extensa [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, y las arquitecturas de hardware compatibles con.

Como usuario, es posible que no tenga que compilar sus programas. Considere buscar programas más pequeños y diferentes marcos 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 el intercambio hasta la compresión basada en ZRAM, así como en la configuración de un ramdisk o seleccionando 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 núcleo 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 mientras prepara este artículo.