Valores de vm_compressor_mode (vm.compressor_mode) para la memoria comprimida habilitada en OS X

Fondo

En Super usuario, con una respuesta aceptada :

También en Superusuario:

– y de la primera respuesta entendemos que el valor del argumento de arranque vm_compressor no se corresponde con el valor de la variable sysctl vm.compressor_mode .

En código abierto de Apple para OS X 10.9, Mavericks; en xnu-2422.1.72:

En vm_compresor.c:

/*
 * vm_compressor_mode has a heirarchy of control to set its value.
 * boot-args are checked first, then device-tree, and finally
 * the default value that is defined below. See vm_fault_init() for
 * the boot-arg & device-tree code.
 */

En un MacBookPro5,2 con 8 GB de memoria encuentro:

sh-3.2$ sysctl -a vm.compressor_mode
vm.compressor_mode: 4

Cerca del pie de vm_pageout.h:

extern int vm_compressor_mode;
extern int vm_compressor_thread_count;

#define VM_PAGER_DEFAULT                0x1 /* Use default pager. */
#define VM_PAGER_COMPRESSOR_NO_SWAP         0x2 /* In-core compressor only. */
#define VM_PAGER_COMPRESSOR_WITH_SWAP           0x4 /* In-core compressor + swap backend. */
#define VM_PAGER_FREEZER_DEFAULT            0x8 /* Freezer backed by default pager.*/
#define VM_PAGER_FREEZER_COMPRESSOR_NO_SWAP     0x10    /* Freezer backed by in-core compressor only i.e. frozen data remain in-core compressed.*/
#define VM_PAGER_FREEZER_COMPRESSOR_WITH_SWAP       0x20    /* Freezer backed by in-core compressor with swap support too.*/

#define VM_PAGER_MAX_MODES              6   /* Total number of vm compressor modes supported */

#define DEFAULT_PAGER_IS_ACTIVE     ((vm_compressor_mode & VM_PAGER_DEFAULT) == VM_PAGER_DEFAULT)

#define COMPRESSED_PAGER_IS_ACTIVE  (vm_compressor_mode & (VM_PAGER_COMPRESSOR_NO_SWAP | VM_PAGER_COMPRESSOR_WITH_SWAP))

#define DEFAULT_FREEZER_IS_ACTIVE   ((vm_compressor_mode & VM_PAGER_FREEZER_DEFAULT) == VM_PAGER_FREEZER_DEFAULT)

#define DEFAULT_FREEZER_COMPRESSED_PAGER_IS_ACTIVE      (vm_compressor_mode & (VM_PAGER_FREEZER_COMPRESSOR_NO_SWAP | VM_PAGER_FREEZER_COMPRESSOR_WITH_SWAP))

Pregunta

¿Es posible tener un modo habilitado que no sea 4 para la memoria comprimida ?

Si es así, ¿podemos encontrar una explicación sencilla en inglés de los modos?

El archivo de encabezado que cita parece indicar que los modos 2 y 4 significan que el buscapersonas comprimido está habilitado. Por lo tanto, estoy un poco desconcertado por su pregunta: ¿quiere decir que realmente probó el modo 2 y no habilitó la memoria comprimida?

Respuestas (2)

No estoy completamente seguro de las opciones de FREEZER, aparte de que una opción FREEZER_COMPRESSOR usa intercambio (utiliza espacio libre en un disco) cuando la memoria RAM está baja o gastada, mientras que la otra no.

Lo que creo es que las opciones de FREEZER son para administrar la memoria para procesos congelados. ¿Quizás esto es algo experimental, para usarse en combinación con App Nap? Creo que esto era algo que estaban probando con iOS hace unos años.

Lo que sé es que la opción 1 no usa compresión y es la gestión de memoria de OS X pasada de moda con la que todos estamos más familiarizados. Si tiene problemas que sospecha que están relacionados con la compresión de la memoria, puede probar esta configuración.

La opción 2 utiliza memoria comprimida sin intercambio (sin escritura en el disco cuando la memoria RAM está baja o agotada).

La opción 4 usa compresión e intercambio.

La opción 8 usa lo que sea el CONGELADOR, respaldado por la implementación de la opción 1.

¿Existe documentación real sobre lo que hace el CONGELADOR?
Es interesante que la edición de apple.stackexchange.com/questions/175572 diga que Apple respondió a un caso de radar, comentarios o soporte y se sabe que la opción 1 tradicional falla en algunos casos y ya no es un modo compatible.
@bmike Eso tiene sentido, dada la línea de tiempo, aquí. Desde entonces, me cambié a Linux + LXDM + Openbox, con una personalización pesada pero reutilizable, ya que quería tener más control sobre mi sistema operativo y el entorno de software de trabajo, en lugar de lo contrario.

No puedo agregar un comentario, así que escribiré como respuesta: parece que el congelador es la tecnología patentada de Apple y si lo usará VM_PAGER_FREEZER_COMPRESSOR_NO_SWAP, ¿no debería usar el compresor también? (ver, el compresor está presente, pero no está activado)

Respondiendo a la pregunta, puedes tener:

  1. VM_PAGER_COMPRESSOR_WITH_SWAP - memoria comprimida + intercambio
  2. VM_PAGER_COMPRESSOR_NO_SWAP - memoria comprimida sin intercambio
  3. VM_PAGER_COMPRESSOR_NO_SWAP_PLUS_FREEZER_COMPRESSOR_WITH_SWAP - memoria comprimida + intercambio de congelador