nilai vm_compressor_mode (vm.compressor_mode) untuk mengaktifkan memori terkompresi di OS X

16

Latar Belakang

Di Super user, dengan jawaban yang diterima :

Juga di Pengguna Super:

- dan dari jawaban pertama di sana kami memahami bahwa nilai argumen boot vm_compressor tidak sesuai dengan nilai variabel sysctl vm.compressor_mode .

Di Apple open source untuk OS X 10.9, Mavericks; dalam xnu-2422.1.72:

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

Pada MacBookPro5,2 dengan memori 8 GB saya menemukan:

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

Di dekat kaki 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))

Pertanyaan

Apakah mungkin untuk memiliki mode yang diaktifkan selain dari 4 untuk memori terkompresi ?

Jika demikian, dapatkah kita menemukan penjelasan bahasa Inggris yang sederhana tentang mode?

Graham Perrin
sumber
File header yang Anda kutip tampaknya menyatakan bahwa kedua mode 2 dan 4 berarti bahwa pager terkompresi diaktifkan. Karena itu saya agak bingung dengan pertanyaan Anda - maksud Anda bahwa Anda sebenarnya sudah mencoba mode 2, dan itu tidak mengaktifkan memori yang dikompresi?
jksoegaard

Jawaban:

4

Saya tidak sepenuhnya yakin dengan opsi FREEZER, selain satu opsi FREEZER_COMPRESSOR menggunakan swap (menggunakan ruang kosong pada disk) ketika RAM rendah atau dikeluarkan, sementara yang lain tidak.

Apa yang saya pikirkan adalah bahwa opsi FREEZER adalah untuk mengelola memori untuk proses beku. Mungkin ini sesuatu yang eksperimental, untuk digunakan dalam kombinasi dengan App Nap? Saya pikir ini adalah sesuatu yang mereka uji dengan iOS beberapa tahun yang lalu.

Yang saya tahu adalah bahwa opsi 1 tidak menggunakan kompresi, dan merupakan manajemen memori OS X kuno yang kita semua kenal. Jika Anda mengalami masalah yang Anda duga terkait dengan kompresi memori, Anda dapat mencoba pengaturan ini.

Opsi 2 menggunakan memori terkompresi tanpa swap (tidak ada penulisan ke disk saat RAM rendah atau dikeluarkan).

Opsi 4 menggunakan kompresi dan swap.

Opsi 8 menggunakan apapun FREEZER, didukung oleh implementasi opsi 1.

Antonio Malcolm
sumber
2
Apakah ada dokumentasi aktual tentang apa yang dilakukan FREEZER?
vy32
Sangat menarik bahwa hasil edit ke apple.stackexchange.com/questions/175572 mengatakan Apple merespons radar atau umpan balik atau kasus dukungan dan opsi tradisional 1 diketahui gagal dalam beberapa kasus dan tidak lagi menjadi mode yang didukung.
bmike
0

Tidak dapat menambahkan komentar, jadi saya akan menulis sebagai jawaban: Sepertinya freezer adalah teknologi yang dipatenkan Apple dan jika Anda akan menggunakannya VM_PAGER_FREEZER_COMPRESSOR_NO_SWAPjangan menggunakan kompresor juga? (lihat, kompresor ada, tetapi tidak diaktifkan)

Menjawab pertanyaan, Anda dapat memiliki:

  1. VM_PAGER_COMPRESSOR_WITH_SWAP - memori terkompresi + swap
  2. VM_PAGER_COMPRESSOR_NO_SWAP - memori terkompresi tanpa swap
  3. VM_PAGER_COMPRESSOR_NO_SWAP_PLUS_FREEZER_COMPRESSOR_WITH_SWAP - memori terkompresi + pertukaran freezer
own2pwn
sumber