GNU/Linux >> Tutoriales Linux >  >> Linux

Swappiness en Linux:Todo lo que necesitas saber

Si ha sido un usuario o entusiasta de Linux durante una cantidad considerable de tiempo, entonces el término intercambio o memoria de intercambio no debería ser una novedad para usted. Pero, desafortunadamente, muchos usuarios de Linux tienden a confundir el concepto de memoria de intercambio con swappiness. El concepto erróneo más común es que un valor de swappiness indica la memoria RAM utilizable máxima antes de que comience el proceso de intercambio real.

Para acabar con este concepto erróneo ampliamente difundido, tenemos que desglosar la definición de swappiness y swappiness.

Redimir el swappiness de conceptos erróneos comunes

De swappiness se concibe el término swappiness. Para que se produzca el intercambio, la RAM (memoria de acceso aleatorio) debe tener algunos datos del sistema. Cuando estos datos se escriben en una ubicación de disco duro dedicada, como un archivo de intercambio o una partición de intercambio, la RAM del sistema se libera del espacio necesario. Esta liberación de la memoria RAM del sistema constituye la definición de intercambio.

Su sistema operativo Linux contiene una configuración de valor de intercambio. La existencia de este valor continúa generando muchos conceptos erróneos sobre la funcionalidad prevista del sistema. El más común es su asociación con el umbral de uso de RAM. A partir de la definición de intercambio, swappiness se malinterpreta como el valor máximo de almacenamiento de RAM que desencadena el inicio del intercambio.

Zonas divididas de RAM

Para encontrar claridad en el concepto erróneo de swappiness discutido anteriormente, tenemos que comenzar desde donde comenzó este concepto erróneo. Primero, debemos mirar la memoria de acceso aleatorio (RAM). Nuestra interpretación de la memoria RAM es muy diferente de la percepción del sistema operativo Linux. Vemos la RAM como una única entidad de memoria homogénea, mientras que Linux la interpreta como zonas o regiones de memoria dividida.

La disponibilidad de estas zonas en su máquina depende de la arquitectura de la máquina en uso. Por ejemplo, podría ser una máquina con arquitectura de 32 bits o una máquina con arquitectura de 64 bits. Para comprender mejor este concepto de zonas divididas, considere el siguiente desglose y descripciones de las zonas de computadora con arquitectura x86.

  • Acceso directo a memoria (DMA) :Aquí, la capacidad de zona o región de memoria asignable es tan baja como 16 MB. Su nombre está relacionado con su implementación. Las primeras computadoras solo podían comunicarse con la memoria física de una computadora a través del enfoque de acceso directo a la memoria.
  • Acceso directo a memoria 32 (DM A 32) :Independientemente de esta convención de nomenclatura asignada, DMA32 es una zona de memoria que solo se aplica a una arquitectura Linux de 64 bits. Aquí, la región de memoria asignable o la capacidad de la zona no supera los 4 GB. Por lo tanto, una máquina Linux de 32 bits solo puede alcanzar un DMA de 4 GB de RAM. La única excepción de este caso es cuando el usuario de Linux decide usar el kernel PAE (Physical Address Extension).
  • Normal :La proporción de RAM de la máquina superior a 4 GB, según estimación, en una arquitectura de computadora de 64 bits, cumple con la definición métrica y los requisitos de la memoria normal. Por otro lado, una arquitectura de computadora de 32 bits define la memoria normal entre 16 MB y 896 MB.
  • Alto M em :esta zona de memoria solo es evidente en la arquitectura de computadora con Linux de 32 bits. Se define como la capacidad de RAM superior a 896 MB para máquinas pequeñas y superior a 4 GB para máquinas grandes o con características y especificaciones de hardware de alto rendimiento.

Valores de RAM y PAGESIZE

La asignación de RAM de la computadora se determina en páginas. La asignación de estas páginas está configurada para tamaños fijos. El núcleo del sistema es el determinante de estas asignaciones de tamaño fijo. La asignación de la página se lleva a cabo en el momento del arranque del sistema cuando el kernel detecta la arquitectura de su computadora. En una computadora Linux de este tipo, el tamaño de página típico es de aproximadamente 4 Kbytes.

Para determinar el tamaño de página de su máquina Linux, puede utilizar el comando "getconf" como se muestra a continuación:

$ getconf PAGESIZE

Ejecutar el comando anterior en su terminal debería darle un resultado como:

4096

Accesorios de Zonas y Nodos

Las zonas de memoria discutidas tienen una conexión directa con los nodos del sistema. La CPU o Unidad Central de Procesamiento se asocia directamente con estos nodos. Esta asociación de nodo a CPU a la que hace referencia el kernel del sistema cuando asigna memoria es necesaria para un proceso programado para ser ejecutado por la misma CPU.

Estos niveles de nodos a CPU son esenciales para la instalación de tipos de memoria mixtos. Las computadoras especializadas con múltiples CPU son el objetivo principal de estas instalaciones de memoria. Este procedimiento solo tiene éxito cuando se utiliza la arquitectura de acceso a memoria no uniforme.

Con tales requisitos de gama alta, una computadora Linux, en promedio, se asociará con un nodo específico. El término OS para ello es nodo cero. Este nodo posee todas las zonas de memoria disponibles. También se puede acceder a estos nodos y zonas desde su sistema operativo Linux. Primero, deberá acceder al archivo "/proc/buddyinfo". Puede usar el siguiente comando para lograr este objetivo.

$ less /proc/buddyinfo

La salida de tu terminal debería ser similar a la siguiente captura de pantalla.

Como puede ver, desde mi punto de vista, estoy tratando con tres zonas:DMA, DMA32 y zonas normales.

La interpretación de los datos de estas zonas es sencilla. Por ejemplo, si vamos con la zona DMA32, podemos desentrañar información crítica. Moviéndonos de izquierda a derecha, podemos revelar lo siguiente:

4846: Los fragmentos de memoria disponibles se pueden interpretar como 4846 de 2^(0*PAGESIZE)

3946: Los fragmentos de memoria disponibles se pueden interpretar como 3946 de 2^(1*PAGESIZE)

2490: Los fragmentos de memoria disponibles se pueden interpretar como 2490 de 2^(2*PAGESIZE)

0: Los fragmentos de memoria disponibles se pueden interpretar como 0 de 2^(512*PAGESIZE)

La información anterior aclara cómo los nodos y las zonas se relacionan entre sí.

Páginas de archivos frente a páginas anónimas

Las entradas de la tabla de páginas proporcionan la funcionalidad de asignación de memoria con los medios necesarios para registrar el uso de páginas de memoria específicas. Por esa razón, el mapeo de memoria existe en las siguientes fases funcionales:

Archivo respaldado: Con este tipo de asignación, los datos que existen aquí se originan en un archivo. La asignación no restringe su funcionalidad a tipos de archivos específicos. Se puede utilizar cualquier tipo de archivo siempre que la función de mapeo pueda leer datos de él. La flexibilidad de esta característica del sistema es que una memoria liberada por el sistema se puede volver a obtener fácilmente y sus datos se pueden reutilizar siempre que el archivo que contiene los datos siga siendo legible.

Si por casualidad ocurren cambios de datos en la memoria, el archivo del disco duro deberá registrar los cambios de datos. Debe tener lugar antes de que la memoria en uso vuelva a estar libre. Si no se toma esta precaución, el archivo del disco duro no notará los cambios de datos que ocurrieron en la memoria.

Anónimo: Este tipo de técnica de mapeo de memoria no tiene funcionalidad de copia de seguridad de archivos o dispositivos. Las solicitudes de memoria disponibles en estas páginas pueden describirse como sobre la marcha y son iniciadas por programas que necesitan almacenar datos con urgencia. Tales solicitudes de memoria también son efectivas cuando se trata de pilas y montones de memoria.

Dado que estos tipos de datos no están asociados con archivos, su naturaleza anónima necesita algo para funcionar instantáneamente como una ubicación de almacenamiento confiable. En este caso, se crea una partición de intercambio o un archivo de intercambio para almacenar estos datos del programa. Los datos primero se moverán para intercambiar antes de que se liberen las páginas anónimas que contenían estos datos.

Dispositivo respaldado: Los archivos de dispositivos de bloques se utilizan para direccionar los dispositivos del sistema. El sistema considera los archivos del dispositivo como archivos normales del sistema. Aquí, tanto la lectura como la escritura de datos son posibles. Los datos de almacenamiento del dispositivo facilitan e inician la asignación de memoria respaldada por el dispositivo.

Compartido: Una sola página de RAM puede acomodar o puede asignarse con múltiples entradas de tabla de páginas. Cualquiera de estas asignaciones se puede utilizar para acceder a las ubicaciones de memoria disponibles. Cualquiera que sea la ruta de mapeo, la visualización final de datos siempre será la misma. Debido a que las ubicaciones de memoria aquí se observan conjuntamente, la comunicación entre procesos es más eficiente a través del intercambio de datos. Las comunicaciones entre procesos también tienen un alto rendimiento debido a las asignaciones de escritura compartidas.

Copiar al escribir: Esta técnica de asignación está algo orientada a la pereza. Si se produce una solicitud de recurso y el recurso solicitado ya existe en la memoria, el recurso original se asigna para satisfacer esa solicitud. Además, el recurso puede ser compartido por otros múltiples procesos.

En tales casos, un proceso podría intentar escribir en ese recurso. Para que esta operación de escritura tenga éxito, debería existir una réplica de ese recurso en la memoria. La copia o réplica del recurso ahora acomodará los cambios efectuados. En resumen, es este primer comando de escritura el que inicia y ejecuta la asignación de memoria.

De estos cinco enfoques de mapeo de memoria discutidos, el intercambio se ocupa de las páginas respaldadas por archivos y las rutinas de mapeo de memoria de páginas anónimas. Por lo tanto, son las dos primeras técnicas de mapeo de memoria discutidas.

Comprender el intercambio

Basado en lo que hemos cubierto y discutido hasta ahora, la definición de swappiness ahora se puede entender fácilmente.

En términos simples, swappiness es un mecanismo de control del sistema que detalla la intensidad de la agresión del núcleo del sistema en el intercambio de páginas de memoria. Se utiliza un valor de swappiness para identificar este nivel de agresión del núcleo del sistema. El aumento de la agresividad del kernel se indica mediante valores de intercambio más altos, mientras que la cantidad de intercambio disminuirá con valores más bajos.

Cuando su valor es 0, el kernel no tiene la autenticación para iniciar el intercambio. En su lugar, el núcleo hace referencia a las páginas libres y respaldadas por archivos antes de iniciar el intercambio. Por lo tanto, cuando se compara swappiness con swap, swappiness es responsable de medir intensamente el intercambio hacia arriba y hacia abajo. Curiosamente, un valor de intercambio establecido en cero no impide que se produzca el intercambio. En su lugar, solo detiene el intercambio mientras el kernel del sistema espera que algunas condiciones de intercambio sean viables.

Github proporciona una descripción del código fuente más convincente y valores asociados con la implementación de swappiness. Por definición, su valor predeterminado se representa con la siguiente declaración e inicialización de variables.

Int vm_swappiness = 60;

Los rangos de valores de intercambio están entre 0 y 100. El enlace de Github anterior apunta al código fuente para su implementación.

El valor de swappiness ideal

Varios factores determinan el valor de swappiness ideal para un sistema Linux. Incluyen el tipo de disco duro de su computadora, el hardware, la carga de trabajo y si está diseñado para funcionar como un servidor o una computadora de escritorio.

También debe tener en cuenta que la función principal del intercambio no es iniciar un mecanismo de liberación de memoria para la RAM de una máquina cuando se está agotando el espacio de memoria disponible. La existencia de intercambio es, por defecto, un indicador de un sistema en buen funcionamiento. Su ausencia implicaría que su sistema Linux tiene que adherirse a rutinas de gestión de memoria insanas.

El efecto de implementar un valor de intercambio nuevo o personalizado en un sistema operativo Linux es instantáneo. Descarta la necesidad de reiniciar el sistema. Por lo tanto, esta ventana es una oportunidad para ajustar y monitorear los efectos del nuevo valor de swappiness. Estos ajustes de valor y la supervisión del sistema deben realizarse durante un período de días y semanas hasta que llegue a un número que no afecte el rendimiento y el estado de su sistema operativo Linux.

Al ajustar su valor de swappiness, tenga en cuenta los siguientes consejos:

  • Primero, implementar 0 como el valor de intercambio establecido no desactiva la funcionalidad de intercambio. En su lugar, la actividad del disco duro del sistema cambia de asociada al intercambio a asociada al archivo.
  • Si está trabajando con discos duros de computadora obsoletos o obsoletos, se recomienda reducir el valor de intercambio de Linux asociado. Minimizará los efectos de la rotación de la partición de intercambio y también evitará la recuperación de páginas anónimas. La rotación del sistema de archivos aumentará cuando se reduzca la rotación del intercambio. Con el aumento de una configuración provocando la disminución de otra, su sistema Linux será más saludable y tendrá un mejor rendimiento con un método efectivo de administración de memoria en lugar de producir un rendimiento promedio con dos métodos.
  • Los servidores de bases de datos y otros servidores de un solo propósito deben tener pautas de software de sus proveedores. Vienen con una administración de memoria confiable y mecanismos de caché de archivos especialmente diseñados. Los proveedores de este software tienen la obligación de sugerir un valor de intercambio de Linux recomendado en función de la carga de trabajo y las especificaciones de la máquina.
  • Si usted es un usuario promedio de escritorio de Linux, es recomendable apegarse al valor de swappiness ya establecido, especialmente si está usando hardware razonablemente reciente.

Trabajar con un valor de intercambio personalizado en su máquina Linux

Puede cambiar su valor de intercambio de Linux a una figura personalizada de su elección. Primero, debe conocer el valor establecido actualmente. Le dará una idea de cuánto desea disminuir o aumentar el valor de intercambio establecido en su sistema. Puede verificar el valor establecido actualmente en su máquina Linux con el siguiente comando.

$ cat /proc/sys/vm/swappiness

Debería obtener un valor como 60, ya que es el valor predeterminado del sistema.

El "sysctl" es útil cuando necesita cambiar este valor de swappiness a una nueva cifra. Por ejemplo, podemos cambiarlo a 50 con el siguiente comando.

$ sudo sysctl vm.swappiness=50

Su sistema Linux detectará este valor recién establecido de inmediato sin necesidad de reiniciar. Reiniciar su máquina restablece este valor al predeterminado 60. El uso del comando anterior es temporal debido a una razón principal. Permite a los usuarios de Linux experimentar con los valores de intercambio que tienen en mente antes de decidirse por uno fijo que pretenden usar de forma permanente.
Si desea que el valor de intercambio sea persistente incluso después de un reinicio exitoso del sistema, necesitará para incluir su valor establecido en el archivo de configuración del sistema “/etc/sysctl.conf”. Para demostración, considere la siguiente implementación de este caso discutido a través del editor nano. Por supuesto, puede usar cualquier editor compatible con Linux de su elección.

$ sudo nano /etc/sysctl.conf

Cuando este archivo de configuración se abra en la interfaz de su terminal, desplácese hasta la parte inferior y agregue una línea de declaración de variable que contenga su valor de swappiness. Considere la siguiente implementación.

 
vm.swappiness=50

Guarde este archivo y estará listo para comenzar. Su próximo reinicio del sistema utilizará este nuevo valor de intercambio establecido.

Nota final

La complejidad de la gestión de la memoria la convierte en una función ideal para el kernel del sistema, ya que sería un gran dolor de cabeza para el usuario medio de Linux. Dado que el intercambio está asociado con la gestión de la memoria, es posible que sobreestime o piense que está usando demasiada RAM. Por otro lado, Linux considera que la memoria RAM libre es ideal para funciones del sistema como el almacenamiento en caché del disco. En este caso, el valor de la memoria "libre" será artificialmente más bajo y el valor de la memoria "usada" artificialmente más alto.

Prácticamente, esta proporcionalidad de valores de memoria libres y usados ​​es descartable. ¿Razón? La RAM libre que se asigna a sí misma como caché de disco se puede recuperar en cualquier instancia del sistema. Es porque el kernel del sistema lo marcará como espacio de memoria disponible y reutilizable.


Linux
  1. Podman vs Docker:Todo lo que necesitas saber

  2. Todo lo que necesita saber sobre Ubuntu 13.04

  3. Directorio tmp de Linux:todo lo que necesita saber

  4. Compresión de archivos de Linux:todo lo que necesita saber

  5. Permisos de archivos de Linux:todo lo que necesita saber

Todo lo que necesita saber sobre Black Lab Linux

Todo lo que necesita saber sobre la distribución Linux Mint

Todo lo que necesita saber sobre los inodos en Linux

Todo lo importante que necesita saber sobre Hard Link en Linux

Todo lo importante que necesita saber sobre UID en Linux

Todo lo que necesita saber sobre el directorio /tmp de Linux