8 votos

¿Por qué libre + activo + inactivo + especulativo + cableado no es igual a la memoria RAM total?

Cuando corro vm_stat en mi 10.6.8 MacBook Pro con 2 GB de RAM obtengo lo siguiente:

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)

Si se suma la memoria libre, activa, inactiva, especulativa y cableada y se multiplica por 4096 (para convertir las páginas en bytes), se obtienen 2.145.828.864 en lugar de los 2.147.483.648 esperados. Faltan 1.654.784 bytes (o 404 páginas). Sin embargo, no es un número constante, sino que fluctúa:

$ 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

¿Son estas páginas perdidas sólo una inexactitud de información porque la cantidad de un tipo de página ha cambiado en el tiempo vm_stat imprime el siguiente tipo de página? ¿O hay algún otro tipo de memoria que me falta?

4voto

SuperJer Puntos 133

Después de pasar algún tiempo investigando esto y un Pregunta SO Al salir de esto, creo que lo he rooteado.

Antes de empezar, quiero señalar el debate filosófico que Apple debe haber tenido cuando trató de responder a la pregunta ¿Qué es la memoria usada? Si miras el monitor de actividad en OSX Pre-Yosemite (puedes ver esto en el enlace de mi pregunta y abajo) verás que Memoria usada se compone de cuatro partes: Memoria de aplicaciones, caché de archivos, memoria conectada y memoria comprimida. Ahora, si miras el monitor de actividad de abajo, de OSX Yosemite, verás que falta el Cache de Archivos. No estoy seguro de por qué hubo un cambio entre los sistemas operativos, pero hay uno que no es el menos. Ya que estás usando un sistema operativo anterior a Yosemite en la pregunta, me remito a la definición anterior.

Volvamos a los negocios, calculando la memoria total, más específicamente Memoria usada desde Memoria libre se nos da usando vm_stat .

Para poder calcular esto, necesitamos mapear las cuatro partes de Memoria usada a las diferentes estadísticas que se nos han dado de vm_stat . Algunos de estos son bastante fáciles.

Monitor de actividad a los mapeos de vm_stat

  • File Cache: -> Páginas respaldadas por archivos
  • Memoria conectada: -> Páginas conectadas
  • Comprimido: -> Páginas ocupadas por el compresor
  • Memoria de la aplicación: -> Páginas activas + páginas especulativas

Averiguar Memoria de la aplicación es la más difícil, y para ser honesto, no entiendo por qué la memoria especulativa es parte de ella, pero las matemáticas son incuestionables.


Matemáticas indiscutibles (va con el 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)

Monitor de actividad OSX Pre-Yosemite

enter image description here


Monitor de actividad OSX Yosemite

enter image description here

2voto

RyanKeeter Puntos 1445

Respuesta corta: el host_statistics64() La función devuelve los datos erróneos .

Todavía estoy investigando por qué es así, pero el bicho (si es un bicho) está en la biblioteca vm_stat usos, no en vm_stat en sí mismo.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X