Valores de vm_compressor_mode (vm.compressor_mode) para memória compactada ativada no OS X

16

fundo

Em Superusuário, com uma resposta aceita :

Também em Superusuário:

- e desde a primeira resposta, entendemos que o valor do argumento de inicializaçãovm_compressor não corresponde ao valor da variável sysctl vm.compressor_mode .

No código-fonte aberto da Apple para OS X 10.9, Mavericks; no xnu-2422.1.72:

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

Em um MacBookPro5,2 com 8 GB de memória, encontro:

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

Perto do pé 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))

Questão

É possível ter um modo ativado diferente de 4 para memória compactada ?

Em caso afirmativo, podemos encontrar uma explicação clara dos modos em inglês?

Graham Perrin
fonte
O arquivo de cabeçalho que você cita parece indicar que ambos os modos 2 e 4 significam que o pager compactado está ativado. Portanto, estou um pouco intrigado com a sua pergunta - você quer dizer que realmente tentou o modo 2 e não habilitou a memória compactada?
Jksoegaard

Respostas:

4

Não tenho certeza absoluta das opções FREEZER, exceto uma opção FREEZER_COMPRESSOR usa swap (utiliza espaço livre em um disco) quando a RAM está baixa ou gasta, enquanto a outra não.

O que eu acho é que as opções do FREEZER são para gerenciar a memória de processos congelados. Talvez isso seja algo experimental, para ser usado em combinação com o App Nap? Eu acho que isso era algo que eles estavam testando com o iOS alguns anos atrás.

O que sei é que a opção 1 não usa compactação e é o antiquado gerenciamento de memória do OS X com o qual estamos mais familiarizados. Se você estiver tendo problemas suspeitos relacionados à compactação de memória, tente esta configuração.

A opção 2 usa memória compactada sem troca (sem gravação no disco quando a RAM está baixa ou gasta).

A opção 4 usa compactação e troca.

A opção 8 usa o que quer que o FREEZER seja, apoiado pela implementação da opção 1.

Antonio Malcolm
fonte
2
Existe documentação real sobre o que o FREEZER faz?
vy32
É interessante que a edição em apple.stackexchange.com/questions/175572 afirme que a Apple respondeu a um caso de radar, feedback ou suporte e que a opção tradicional 1 falha em alguns casos e não é mais um modo suportado.
bmike
0

Não é possível adicionar um comentário, por isso vou escrever como resposta: parece que o freezer é a tecnologia patenteada da Apple e, se você usá- VM_PAGER_FREEZER_COMPRESSOR_NO_SWAPlo, não deve usar o compressor também? (veja, o compressor está presente, mas não está ativado)

Respondendo à pergunta, você pode ter:

  1. VM_PAGER_COMPRESSOR_WITH_SWAP - memória compactada + troca
  2. VM_PAGER_COMPRESSOR_NO_SWAP - memória compactada sem troca
  3. VM_PAGER_COMPRESSOR_NO_SWAP_PLUS_FREEZER_COMPRESSOR_WITH_SWAP - memória compactada + troca do freezer
own2pwn
fonte