Perché free + active + inactive + speculative + wired non è uguale alla RAM totale?

5

Quando eseguo vm_stat sul mio MacBook Pro 10.6.8 con 2 GB di RAM ottengo il seguente:

Mach Virtual Memory Statistics: (page size of 4096 bytes)
Pages free:                          90518.
Pages active:                       205479.
Pages inactive:                      32417.
Pages speculative:                  134461.
Pages wired down:                    61009.
"Translation faults":             26323651.
Pages copy-on-write:                177180.
Pages zero filled:                15230394.
Pages reactivated:                       3.
Pageins:                            388108.
Pageouts:                                0.
Object cache: 14 hits of 797355 lookups (0% hit rate)

Se si sommano la memoria libera, attiva, inattiva, speculativa e cablata e si moltiplica per 4096 (per trasformare le pagine in byte), si ottengono 2.145.828.864 anziché il previsto 2.147.483.648. Ci sono 1.654.784 byte mancanti (o 404 pagine). Questo non è un numero costante, tuttavia fluttua:

$ vm_stat 1 | perl -MList::Util=sum -nle 'next unless /^\s*\d/; print 524288-sum((split)[0 .. 4])'
193
147
146
60
57
220
215
385
379
285
283
194

Queste pagine mancanti sono solo un'annotazione dei rapporti perché la quantità di un tipo di pagina è cambiata al momento in cui vm_stat stampa il prossimo tipo di pagina? O c'è qualche altro tipo di memoria che mi manca?

    
posta Chas. Owens 09.02.2013 - 13:56
fonte

2 risposte

2

Risposta breve: la funzione host_statistics64() restituisce i dati non validi .

Stai ancora cercando il motivo per cui questo è il caso, ma il bug (se si tratta di un bug) è nella libreria vm_stat utilizza, non in vm_stat stesso.

    
risposta data 09.02.2013 - 16:43
fonte
2

Dopo aver dedicato un po 'di tempo a questa domanda e a una domanda SO uscendo da esso, penso di averlo inchiodato.

Prima di iniziare, desidero sottolineare il dibattito filosofico che Apple deve aver avuto quando hanno cercato di rispondere alla domanda Che cosa viene utilizzata la memoria? Se si guarda il monitor dell'attività su OSX Pre-Yosemite (puoi vedere questo nella mia domanda I link e sotto) vedrai che Memoria utilizzata è composto da quattro parti; App Memory, File Cache, Wired Memory e Memoria compressa. Ora, se guardi il monitor dell'attività qui sotto, da OSX Yosemite, vedrai che File Cache è mancante. Non sono sicuro del perché ci sia stato un cambio tra i sistemi operativi, ma ce n'è uno in meno. Dal momento che stai usando un sistema operativo pre-Yosemite nella domanda, ti rimanderò alla precedente definizione.

Torniamo al business, calcolando la memoria totale, in particolare Memoria utilizzata poiché Memoria libera ci viene fornita utilizzando vm_stat .

Per calcolare questo, dobbiamo mappare le quattro parti di Memoria usata alle diverse statistiche che ci sono state date da vm_stat . Alcuni di questi sono piuttosto semplici.

Monitoraggio attività su Mappature vm_stat

  • File Cache: - > Pagine supportate da file
  • Memoria cablata: - > Pagine cablate
  • Compresso: - > Pagine occupate dal compressore
  • Memoria dell'app: - > Pagine attive + pagine speculative

Capire la Memoria di app è difficile e, sinceramente, non capisco perché la memoria speculativa sia separata da essa, ma la matematica è indiscutibile.

Math inappuntabile (con OSX Pre-Yosemtie Activity Monitor)

                  vm_stat       Activity Monitor
------------------------------------------------
Free Mem.         9.97 GB       9.85 GB
Pages Active      2.38 GB       xxx
Pages Speculative 0.57 GB       xxx
App Mem.          xxx           2.95                       
Cached Files      1.24 GB       1.22 GB
Wired Mem.        1.43 GB       1.41 GB
Compressed        0.57 GB       0.58 GB
------------------------------------------------
Total Mem.       16.16 GB       16.01 GB
                 (keep in mind rounding error)

Monitoraggio attività Pre-Yosemite OS X

MonitoraggioattivitàOSXYosemite

    
risposta data 22.07.2015 - 07:11
fonte

Leggi altre domande sui tag