He usado Unix durante bastante tiempo, y durante los últimos 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 esto (suponiendo que no haya un límite global o un giro de la configuración 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 usted sabe cuánto necesita.
No puedo imaginar muchas situaciones (algunas, pero no muchas) en las que suspenderías un proceso en ejecución y podría cambiar para dejar espacio para otras cosas, pero aún así perderías tus sockets si lo hicieras, por lo que forzarías un Core-dump a través de gcc o copiar la memoria a mano sería funcionalmente equivalente.
Definitivamente no me gustaría intercambiar en un sistema embebido (a pesar de que puede tener una memoria RAM disponible más pequeña), si te quedas sin memoria RAM preferiría que mi proceso muera antes que romper una memoria flash de un millón de escritura por sector conduzca durante un fin de semana nivelando el desgaste de los sectores hasta el fondo.
¿Alguna barba unix tiene alguna razón convincente para seguir intercambiando?
ACTUALIZAR respuestas y análisis:
¿CONFIRMADO? - fork () requiere la misma cantidad de memoria para el proceso hijo que el padre
Modern fork () es copia-en-escritura para niños en POSIX (en general), pero Linux y FreeBSD específicamente, y estoy asumiendo OSX por extrapolación. Considero esta parte del equipaje anacrónico que el intercambio lleva consigo.
Curiosamente, este artículo de Solaris afirma que a pesar de que Solaris utiliza 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 pierda en el medio. Si bien el elemento Solaris revienta un poco el argumento de que el intercambio es un anacronismo, creo que suficientes sistemas operativos implementan correctamente CoW 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 probablemente sean solo chicos de Oracle. Sin ofender Solaris!
CONFIRMADO : los archivos tmpfs / ramfs pueden intercambiarse como una conveniencia cuando tmpfs / ramfs se llena
¡No use tmpfs / ramfs sin límite! Siempre defina explícitamente la cantidad de ram que desea que tmpfs / ramfs use.
PLAUSABLE : intercambie un poco por si acaso
Uno de mis viejos jefes solía decir un gran dicho: "no sabes lo que no sabes", esencialmente, no puedes tomar una decisión basada en información que aún no tienes. Sin embargo, este es un argumento plausible para el intercambio: sospecho que los tipos de cosas que haría para detectar si su aplicación se está intercambiando o no serían más pesados que verificar si malloc () tiene éxito o detectar la excepción de Un nuevo fallido ().
Esto puede ser útil en los casos en que está ejecutando un escritorio y tiene un montón de cosas al azar, pero aún así, si algo se vuelve loco, preferiría que fuera OOM cosechado que sumergirse en el infierno de intercambio. Así soy yo.
Reventado! - En Solaris , el intercambio es importante por un par de razones
tmpfs : estados 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 acomodar los archivos escritos en él, pero hay algunas compensaciones inherentes para los grandes usuarios de tmpfs. Tmpfs comparte recursos con los segmentos de datos y pila de 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 todos menos 4 MB del espacio de intercambio del sistema.
Datos y mitos de Solaris sobre los estados de intercambio La memoria virtual actual consiste en la suma total de RAM física y 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 de si esto significa que el mapa virtual máximo que puede crear es ram + swap , o si aún podría hacer algo como mmap () un archivo más grande que ram y confiar en la inicialización perezosa de mmap (). Probablemente pueda ejecutar Solaris en estos días sin intercambio, parece que es menos amigable que otros sistemas operativos POSIXy.
Reventado! Las herramientas populares de hibernación de Linux parecen confiar en el intercambio
Por defecto, TuxOnIce parece que depende del intercambio para la hibernación, aunque existen otros backends. Sin embargo, si no está ejecutando un cuadro que necesita hibernar, aún estaría detrás de la afirmación de que 'el intercambio es anacronístico en Linux'