Valeurs de vm_compressor_mode (vm.compressor_mode) pour la mémoire compressée activée dans OS X

16

Contexte

Dans Super utilisateur, avec une réponse acceptée :

Également dans Super User:

- et d'après la première réponse, nous comprenons que la valeur de l' argument de démarragevm_compressor ne correspond pas à la valeur de la variable sysctl vm.compressor_mode .

Dans Apple open source pour OS X 10.9, Mavericks; dans xnu-2422.1.72:

Dans 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.
 */

Sur un MacBookPro5,2 avec 8 Go de mémoire, je trouve:

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

Près du pied 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))

Question

Est-il possible d'avoir un mode activé autre que 4 pour la mémoire compressée ?

Si oui, pouvons-nous trouver une explication simple en anglais des modes?

Graham Perrin
la source
Le fichier d'en-tête que vous citez semble indiquer que les deux modes 2 et 4 signifient que le téléavertisseur compressé est activé. Par conséquent, je suis un peu perplexe par votre question - voulez-vous dire que vous avez réellement essayé le mode 2 et qu'il n'a pas activé la mémoire compressée?
jksoegaard

Réponses:

4

Je ne suis pas complètement certain des options FREEZER, à l'exception d'une option FREEZER_COMPRESSOR qui utilise l'échange (utilise l'espace libre sur un disque) lorsque la RAM est faible ou dépensée, tandis que l'autre ne le fait pas.

Ce que je pense, c'est que les options FREEZER sont pour la gestion de la mémoire pour les processus gelés. Peut-être que c'est quelque chose d'expérimental, à utiliser en combinaison avec App Nap? Je pense que c'était quelque chose qu'ils testaient avec iOS il y a quelques années.

Ce que je sais, c'est que l'option 1 n'utilise aucune compression, et c'est l'ancienne gestion de la mémoire OS X que nous connaissons tous mieux. Si vous rencontrez des problèmes liés à la compression de la mémoire, vous pouvez essayer ce paramètre.

L'option 2 utilise de la mémoire compressée sans échange (pas d'écriture sur le disque lorsque la mémoire RAM est faible ou épuisée).

L'option 4 utilise à la fois la compression et le swap.

L'option 8 utilise quel que soit le CONGÉLATEUR, soutenue par l'implémentation de l'option 1.

Antonio Malcolm
la source
2
Existe-t-il une documentation réelle sur ce que fait le CONGÉLATEUR?
vy32
Il est intéressant de noter que la modification de apple.stackexchange.com/questions/175572 indique qu'Apple a répondu à un cas de radar ou de rétroaction ou de support et que l'option traditionnelle 1 est connue pour échouer dans certains cas et n'est plus un mode pris en charge.
bmike
0

Je ne peux pas ajouter de commentaire, donc je vais écrire comme réponse: On dirait que le congélateur est la technologie brevetée d'Apple et si vous l'utilisez VM_PAGER_FREEZER_COMPRESSOR_NO_SWAP, vous ne devriez pas utiliser le compresseur aussi? (voir, le compresseur est présent, mais n'est pas activé)

En répondant à la question, vous pouvez avoir:

  1. VM_PAGER_COMPRESSOR_WITH_SWAP - mémoire compressée + swap
  2. VM_PAGER_COMPRESSOR_NO_SWAP - mémoire compressée sans échange
  3. VM_PAGER_COMPRESSOR_NO_SWAP_PLUS_FREEZER_COMPRESSOR_WITH_SWAP - mémoire compressée + échange du congélateur
own2pwn
la source