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

16

Antecedentes

En Superusuario, con una respuesta aceptada :

También en Super Usuario:

- y de la primera respuesta allí entendemos que el valor del argumento de arranquevm_compressor no se corresponde con el valor de la variable sysctl vm.compressor_mode .

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

En vm_compressor.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?

Graham Perrin
fuente
El archivo de encabezado que cita parece indicar que ambos modos 2 y 4 significan que el localizador comprimido está habilitado. Por lo tanto, estoy un poco desconcertado por su pregunta: ¿quiere decir que realmente ha probado el modo 2 y no habilitó la memoria comprimida?
jksoegaard

Respuestas:

4

No estoy completamente seguro de las opciones de FREEZER, aparte de una opción FREEZER_COMPRESSOR utiliza swap (utiliza espacio libre en un disco) cuando la memoria RAM es baja o se gasta, mientras que la otra no.

Lo que creo es que las opciones de FREEZER son para administrar memoria para procesos congelados. ¿Quizás esto es algo experimental, para ser usado en combinación con App Nap? Creo que esto fue 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 administración de memoria 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 usa memoria comprimida sin intercambio (sin escritura en el disco cuando la RAM es baja o está agotada).

La opción 4 usa tanto compresión como intercambio.

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

Antonio Malcolm
fuente
2
¿Existe documentación real sobre lo que hace el CONGELADOR?
vy32
Es interesante que la edición de apple.stackexchange.com/questions/175572 diga que Apple respondió a un caso de radar o retroalimentación o soporte y que la opción tradicional 1 falla en algunos casos y ya no es un modo compatible.
bmike
0

No puedo agregar un comentario, así que escribiré como respuesta: Parece que el congelador es la tecnología patentada de Apple y, si lo usa 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 del congelador
own2pwn
fuente