El intercambio aparentemente ocurrió cuando las páginas RAM inactivas estaban realmente activas.
( Actualización: como se aclaró en un comentario, este no es su caso. Por lo tanto, las personas con el mismo problema pueden pasar a la regla horizontal ).
Es decir, tenía muchos programas ejecutándose y el núcleo intercambió algunas páginas. Luego dejaste algunos programas. El núcleo marca sus páginas RAM como inactivas. Pero no cambiará las páginas a la RAM hasta que se necesiten estas páginas. Esto da como resultado tener páginas inactivas e intercambiadas.
¿Por qué no intercambiar páginas de forma preventiva? Porque eso sería apostar contra viento y marea: a la larga pierdes. Pensemos en un ejemplo simplificado: dos programas A y B que no caben en la RAM al mismo tiempo. El programa A todavía se está ejecutando y todas las páginas intercambiadas pertenecen a A. El programa B se ha cerrado y todas las páginas inactivas pertenecen a B.
Si el kernel intercambia de manera preventiva las páginas de A e inmediatamente después:
- el programa A necesita acceder a sus páginas -> Usted gana - las páginas ya están en la RAM.
- vuelve a iniciar B -> Pierdes - "pagaste" el costo de llevar las páginas a la RAM y ahora tienes que enviarlas de vuelta.
- inicias otro programa C -> Pierdes si A y C no caben en la RAM al mismo tiempo. Si encajan, eres par.
También tenga en cuenta que el intercambio (escritura en disco) es más costoso que el intercambio (lectura desde disco). Lo que hace que esta "apuesta" sea aún más poco activa.
En resumen: confíe en su núcleo y no intente burlarlo.
Actualización:
Resulta que la memoria inactiva no funciona ya que el uso del Monitor de actividad para leer el artículo de Memoria del sistema ha llevado a muchas personas a creer que funciona. La definición dada en el artículo para memoria inactiva es correcta:
Esta información está en la RAM pero no se usa activamente, se usó recientemente.
Pero el siguiente ejemplo es totalmente engañoso y demasiado simplificado (como mi ejemplo para ser franco):
Por ejemplo, si ha estado usando Mail y luego lo cerró, la RAM que estaba usando Mail está marcada como Memoria inactiva. La memoria inactiva está disponible para su uso por otra aplicación, al igual que la memoria libre. Sin embargo, si abre Mail antes de que su memoria inactiva sea utilizada por otra aplicación, Mail se abrirá más rápido porque su memoria inactiva se convierte en memoria activa, en lugar de cargarla desde la unidad más lenta.
Busqué más recursos en línea y terminé en este hilo en la lista de correo del núcleo de Darwin, que es bastante informativo. Citando a Jim Magee (del equipo de Darwin, creo):
En resumen, el sistema VM del núcleo cuando se trata con la presión de la memoria escanea las páginas en uso e intenta mantenerlas en un equilibrio entre las marcas activas e inactivas. Las páginas inactivas se escanean para su reutilización mientras están marcadas como inactivas. Si se han reutilizado, se marcan como activas y alguna otra página debe pasar del estado activo al inactivo para detectar si está en uso activo. Entonces, inactivo es un nombre inapropiado. Es la abreviatura de "posiblemente inactivo, intentemos verificar eso".
Como descubrió, el equilibrio interno que (actualmente) buscamos es de aproximadamente 2/3 activo frente a 1/3 inactivo ...
Esto explica el comportamiento que observas. Es decir, las páginas inactivas que ve pertenecen a programas en ejecución que no se han utilizado recientemente. Entonces, cuando enciende un nuevo programa, las páginas inactivas se intercambian. Al mismo tiempo, las páginas de otros programas se marcan como inactivas para mantener la relación 2/1 de activo frente a inactivo.
El hilo también contiene algunas sugerencias para aprender más sobre las partes internas de darwin. También hay algunas sugerencias en caso de que haya comenzado a investigar el uso de la memoria debido a problemas de beachball (que generalmente tienen poco que ver con eso).
La conclusión sigue siendo la misma: confíe en su núcleo y no intente burlarlo. :-)