GNU/Linux >> Tutoriales Linux >  >> Cent OS

¿Qué son las páginas sucias en Linux?

Pregunta :¿Qué son las páginas sucias y cuál es su propósito?

Siempre que el proceso de aplicación/base de datos necesite agregar una página virtual a la memoria física pero no queden páginas físicas libres, el sistema operativo debe borrar las páginas antiguas restantes.

Ahora, si la página anterior no se ha escrito en absoluto, no es necesario guardar esta, simplemente se puede recuperar del archivo de datos. Pero si la página anterior ya se ha modificado, debe conservarse en algún lugar para que la aplicación/base de datos pueda reutilizarse más adelante; esto se denomina página sucia.

El sistema operativo almacena tales páginas sucias en archivos de intercambio (para que se puedan eliminar de la memoria física y se pueda almacenar otra página 'nueva' en la memoria física). cuello de botella si el dispositivo de intercambio real se encuentra en el disco local (sda) y, además, causa más problemas si el disco raíz local (SO) también utiliza el disco local.

El caché de página en Linux es solo un caché de disco que brinda un rendimiento adicional al sistema operativo que ayuda con lecturas/escrituras intensivas en archivos.

Como el 'subproducto' de la memoria caché de la página es una página sucia, lo cual se explicó en el caso de ejemplo anterior. Las páginas sucias también se pueden observar siempre que la aplicación escriba en el archivo o cree un archivo; la primera escritura se realizará en el área de caché de la página; por lo tanto, la creación de un archivo de 10 MB puede ser realmente rápida:

# dd if=/dev/zero of=testfile.txt bs=1M count=100
10+0 records in
10+0 records out
10485760 bytes (100 MB) copied, 0,1121043 s, 866 MB/s

Es porque ese archivo se crea en la región de la memoria, no en el disco real, por lo que el tiempo de respuesta es realmente rápido. En el sistema operativo, tal cosa se anotará en /proc/meminfo y más en 'Dirty:

Antes de que se ejecute el comando anterior, anote /proc/meminfo y la fila 'Dirty':

# more /proc/meminfo | grep -i dirty
Dirty: 96 kB

Después de ejecutar el comando:

# more /proc/meminfo | grep -i dirty
Dirty: 102516 kB

Periódicamente, el sistema operativo o la aplicación o la base de datos iniciarán una sincronización que escribirá el archivo de prueba real.txt en el disco:

# more /proc/meminfo | grep -i dirty
Dirty: 76 kB

Ahora Oracle Database, por ejemplo, no permite realizar tales escrituras en la región de la memoria como si el sistema operativo fallara o si SAN LUn fallara:los datos se verán comprometidos. Es por eso que Oracle Database requiere que los datos estén "sincronizados", por lo que todas las escrituras deben ser confirmadas por backend como disk/lun antes de que la base de datos genere más solicitudes de escritura.

Normalmente, las bases de datos/aplicaciones sueltan caché periódicamente, por lo que las páginas sucias se escriben en el disco en pequeños fragmentos. En algunos casos, las páginas sucias pueden aumentar de tamaño, ya que tal vez la aplicación/base de datos no configuró correctamente el mecanismo de caché de la página.

Entonces, las páginas sucias pueden escribir en archivos de intercambio (área de intercambio), pero también en una región especial en el disco (LUN/sistema de archivos). Si, por ejemplo, creamos un archivo de intercambio de más de 100 MB que se reutilizará más tarde a partir del archivo de intercambio, podríamos causar problemas de E/S innecesarios en el dispositivo de intercambio. Los sistemas empresariales almacenan archivos de intercambio y áreas de intercambio en el sistema operativo en unidades de estado sólido (SSD) o LUN dedicados, por lo que el rendimiento del disco local no se verá afectado (ya que normalmente la región de intercambio se crea en el disco local)

En algunos casos, la aplicación o la base de datos pueden tener problemas internos y las páginas sucias se escribirán como archivos de intercambio, pero nunca se reutilizarán. /P>

Para averiguar en qué etapa el sistema operativo intentará volcar las páginas sucias en la capa del disco, consulte la documentación oficial del kernel sobre la memoria virtual aquí y busque configuraciones como:

vm.dirty_background_ratio
vm.dirty_ratio
vm.swappiness

y

dirty_background_ratio
dirty_ratio
dirty_background_bytes
dirty_expire_centisecs

La configuración anterior debe ajustarse según el requisito de la base de datos/aplicación, ya que el sistema operativo no tiene ninguna configuración de "mejores prácticas" para ellos:se ajustan según la carga/configuración de DB/APP.

Siempre que la aplicación/base de datos exija que las páginas de memoria estén libres en la memoria física, el sistema operativo tiende a mantener todo en la memoria caché de la página, por lo tanto, el sistema operativo deberá reasignar algunas de las páginas y marcarlas como sucias. Este proceso funciona bien si el extremo de la aplicación/base de datos está correctamente ajustado y escalado; de lo contrario, provocará un intercambio realmente agresivo, ya que el sistema operativo deberá volver a escribir todas las páginas sucias en el disco de intercambio; esto se puede controlar a través de la configuración vm.swappiness.

Si la aplicación/base de datos realiza un intercambio adecuado, podría causar escrituras de E/S graves en el dispositivo de intercambio y provocar graves bloqueos del sistema; asegúrese siempre de que la aplicación/base de datos esté configurada correctamente en términos de administración de memoria.

Como se explicó, no todas las páginas se marcarán como sucias:la mayoría de las páginas no utilizadas se descartarán en lugar de marcarse como sucias (todo depende de si las páginas que ya están asignadas se modificaron o no)

Para verificar qué PID están usando el área de intercambio, se puede usar el siguiente comando:

for file in /proc/*/status
do 
    awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file
done | sort -k 2 -n -r

La liberación de espacio de intercambio "consumido" es realmente limitada, normalmente si PID sale correctamente o simplemente se apaga, el espacio de intercambio se recuperará, pero matará a PID o si termina anormalmente como segfault aún podría dejar espacio de intercambio consumido. Otra opción es reiniciar, ya que los comandos swapoff y swapon pueden causar problemas graves o incluso provocar un estado de pánico en el sistema.


Cent OS
  1. ¿Qué son los usuarios de SELinux y cómo asignar usuarios de Linux a usuarios de SELinux?

  2. UNIX/Linux:¿Qué es un shell? ¿Cuáles son las diferentes conchas?

  3. ¿Qué son los tipos de servidores de nombres DNS en Linux?

  4. ¿Cuáles son las desventajas de las colas de mensajes de Linux?

  5. Limite el vaciado de fondo de Linux (páginas sucias)

Cómo encontrar qué dispositivos están conectados a la red en Linux

¿Qué son los puertos? ¿Cómo verificar los puertos abiertos de Linux?

Cómo encontrar qué direcciones IP están conectadas a Linux

¿Cuáles son los diferentes tipos de shells en Linux?

¿Qué son los inodos en Linux?

¿Qué aplicaciones de edición de video están disponibles en Linux?