GNU/Linux >> Tutoriales Linux >  >> Linux

¿Es el intercambio un anacronismo?

He usado Unix durante bastante tiempo, y durante los últimos dos años he sentido que el intercambio es un anacronismo, pero me gustaría saber qué piensan otras personas.

Mi argumento es más o menos este (asumiendo que no hay un límite global o cambios en la configuración de OOM):

There is little value in swap because if you need to swap out to disk, 
odds are it's going to be a vicious cycle where an app will continue 
to eat not only real memory, but swap as well until it gets OOM 
reaped (_if_ it gets OOM reaped). 

If you have swap enabled, it will only prolong this death march to 
the detriment of other processes - and in the worst case where the
process is not OOM reaped in a timely manner, grind the system to
a halt.

Without swap, it will probably get OOM reaped sooner (if at all)

Para cualquier servicio que esté ajustado para el rendimiento, creo que comprender los límites superiores de su uso de recursos sería clave para ajustarlo en primer lugar, en cuyo caso sabrá cuánto necesita.

No puedo imaginar muchas situaciones (algunas, pero no muchas) en las que suspendería un proceso en ejecución y podría cambiarse para dejar espacio para otras cosas, pero aún así perdería sus sockets si hiciera eso, por lo que forzar un volcar el núcleo a través de gcc o copiar la memoria a mano sería funcionalmente equivalente.

Definitivamente no querría intercambiar en un sistema integrado (aunque puede tener una RAM disponible más pequeña), si se queda sin RAM, prefiero que mi proceso muera que romper una memoria flash de un millón de escrituras por sector. conduzca durante un fin de semana nivelando los sectores hasta el nudo.

¿Algún fanático de Unix tiene razones convincentes para seguir intercambiando?

ACTUALIZAR respuestas y análisis:

  • ¿CONFIRMADO? – fork() requiere la misma cantidad de memoria para el proceso hijo que el padre

    Fork moderno () es copia en escritura para niños en POSIX (en general), pero Linux y FreeBSD específicamente, y asumo OSX por extrapolación. Considero esto parte del equipaje anacrónico que lleva el intercambio.

    Curiosamente, este artículo de Solaris afirma que a pesar de que Solaris usa Copy-on-Write con fork(), debe tener al menos 2x (!) el tamaño del proceso principal en la memoria virtual libre para que el fork() no se caiga en el medio. Mientras que el elemento de Solaris algo rompe el argumento de que el intercambio es un anacronismo:creo que suficientes sistemas operativos implementan CoW correctamente de tal manera que es más importante disipar el mito que marcarlo como una justificación adicional para el intercambio. Ya que. Seamos sinceros. En este punto, las personas que realmente usan Solaris son probablemente solo gente de Oracle. ¡Sin ofender, Solaris!

  • CONFIRMADO – Los archivos tmpfs/ramfs pueden intercambiarse como conveniencia cuando tmpfs/ramfs se llena

    ¡No utilice tmpfs/ramfs sin límite! Defina siempre explícitamente la cantidad de RAM que desea que utilice tmpfs/ramfs.

  • PLAUSABLE – Tener un pequeño intercambio 'por si acaso'

    Uno de mis antiguos jefes solía tener un gran dicho:'no sabes lo que no sabes'; esencialmente, no puedes tomar una decisión con base en información que aún no tienes. Sin embargo, este es un argumento plausible para intercambiar. Sospecho que el tipo de cosas que haría para detectar si su aplicación se está intercambiando o no sería más difícil que verificar si malloc() tiene éxito o detectar la excepción de un nuevo() fallido.

    Esto puede ser útil en los casos en los que está ejecutando un escritorio y tiene un montón de cosas al azar, pero aun así, si algo se vuelve loco, prefiero que se coseche OOM que sumergirse en el infierno de intercambio. Así soy yo.

  • ¡ATRAPADO! – En Solaris , intercambiar es importante por un par de razones

    tmpfs:indica La cantidad de espacio libre disponible para tmpfs depende de la cantidad de espacio de intercambio no asignado en el sistema. El tamaño de un sistema de archivos tmpfs crece para dar cabida a los archivos escritos en él, pero existen algunas compensaciones inherentes para los grandes usuarios de tmpfs. Tmpfs comparte recursos con los datos y los segmentos de pila de los programas en ejecución. La ejecución de programas muy grandes puede verse afectada si los sistemas de archivos tmpfs están cerca de su tamaño máximo permitido. Tmpfs es libre de asignar todo menos 4 MB del espacio de intercambio del sistema.

    Hechos y mitos de Solaris sobre el intercambio:afirma La memoria virtual actual consiste en la suma total de la RAM física y el espacio de intercambio en el disco. Solaris NO requiere que se configure ningún espacio de intercambio. Si elige esta opción, una vez que la RAM esté llena, no podrá iniciar nuevos procesos. .

    No estoy seguro si esto significa que el mapa virtual máximo que puede crear es ram+swap , o si aún pudiera hacer algo como mmap() un archivo más grande que ram y confiar en la inicialización perezosa de mmap(). Si bien es probable que pueda ejecutar Solaris en estos días bien sin intercambio, parece que es menos amigable que otros sistemas operativos POSIXy.

  • ¡ATRAPADO! Las herramientas populares de hibernación de Linux parecen depender del intercambio

    De forma predeterminada, parece que TuxOnIce se basa en el intercambio para la hibernación, aunque existen otros backends. Sin embargo, si no está ejecutando un cuadro que necesita hibernar, aún respaldaría la afirmación de que 'el intercambio es anacrónico en Linux'

Relacionado:¿Se cuelga la finalización de la pestaña?

Respuesta aceptada:

No confunda (el) intercambio (como un área del disco) y (to) el intercambio (como un método para mover páginas de memoria de la RAM al disco y recíprocamente).

El intercambio excesivo es algo que debe evitarse por motivos de rendimiento, pero tener un área de intercambio no es necesariamente un problema.

En sistemas, como Linux, que comprometen en exceso la memoria, es decir, que permiten que los procesos asignen más memoria de la disponible, quedarse sin RAM sin suficiente intercambio para manejar la situación desencadenará el asesino OOM. Debe confiar en el algoritmo utilizado para seleccionar el proceso "correcto" para eliminar y aceptar que uno o más de sus procesos se eliminen sin tener la oportunidad de cerrarse correctamente. Aquí hay una famosa analogía que explica por qué el asesino OOM podría no ser una buena idea en absoluto.

En sistemas como Solaris, que no comprometen demasiado la memoria, es decir, que se aseguran de que una reserva de memoria siempre esté respaldada por memoria virtual, ya sea en RAM o en disco, es absolutamente necesario tener un área de intercambio suficiente, de lo contrario, una parte potencialmente significativa de la RAM será desperdiciado.

Relacionado:Linux:¿intercambiar tamaño de partición por 4 GB de RAM?
Linux
  1. Crear un archivo de intercambio de Linux

  2. Cómo agregar espacio de intercambio en Debian 11

  3. Cómo agregar espacio de intercambio en Linux

  4. ¿Cómo habilitar la partición de intercambio de Linux?

  5. Intercambiar alt y super

Cómo borrar la memoria de intercambio en Linux

Cómo verificar el espacio de intercambio en Linux

Cómo deshabilitar el intercambio en Linux

Cómo agregar un archivo de intercambio en Ubuntu 20.04

¿Es zswap elegible para reducir swap IO?

Archivo de intercambio de crecimiento dinámico en Debian