¿Cuál es el propósito de la memoria especulativa?

0

Recientemente, he descubierto que Darwin tiene speculative memoria métrica. Pero, no sé cuál es el propósito de la memoria especulativa. La métrica de memoria se puede verificar usando vm_stat comando en la terminal.

Mach Virtual Memory Statistics: (page size of 4096 bytes)
Pages free:                              334212.
Pages active:                           1450252.
Pages inactive:                         1367584.
Pages speculative:                        81968.
Pages throttled:                              0.
Pages wired down:                        794478.
Pages purgeable:                         377078.
"Translation faults":                1584392481.
Pages copy-on-write:                  316685071.
Pages zero filled:                    358257445.
Pages reactivated:                      9976919.
Pages purged:                           2557552.
File-backed pages:                       597869.
Anonymous pages:                        2301935.
Pages stored in compressor:             1170377.
Pages occupied by compressor:            165553.
Decompressions:                         7496783.
Compressions:                          14958548.
Pageins:                               29715699.
Pageouts:                               1058099.
Swapins:                                6422438.
Swapouts:                               7169648.

Consulte la fuente de Darwin, speculative es el que se utiliza para contener páginas que se han leído desde el disco de forma especulativa y la métrica de la memoria es el número de free páginas y no se han utilizado .

No puedo encontrar ninguna información sobre speculative memoria en internet. Es muy extraño que la memoria sea una métrica oficial de la memoria de Darwin, pero nadie lo dice.

¿Cuál es el propósito de esta métrica a menos que se use para algún propósito?

mznet07
fuente

Respuestas:

0

La memoria especulativa (introducida con OS X 10.5) significa que el kernel ha marcado una página específica de la memoria como "especulativa", lo que significa que está almacenada por el kernel porque predice que probablemente se usará para algo más adelante, pero no ha aún no ha sucedido. Es decir. el núcleo está especulando que leer algo ahora lo beneficiará más tarde.

En la práctica, esto ocurre cuando el kernel macOS detecta que (debido a las solicitudes de la aplicación) están leyendo de forma secuencial desde una unidad de disco. Por ejemplo, si una aplicación lee los bloques número 1, 2 y 3, es justo suponer que existe una alta probabilidad de que el siguiente bloque que se lea sea el número 4. Puede que no lo sea, pero es probable que suceda.

La razón por la que el núcleo intenta detectar esto es que en muchos casos es "más barato" (en términos de rendimiento) leer en bloques más grandes del disco y / o emitir múltiples solicitudes a la unidad para muchos bloques al mismo tiempo: en lugar de emitirlos uno por uno. También es posible que el kernel solicite bloques del disco mientras la aplicación en sí misma está ocupada haciendo otra cosa y aún no ha solicitado el bloque.

La idea detrás de las páginas especulativas es, por lo tanto, "buscar de antemano" o "leer con anticipación" en el disco y almacenarlas en la memoria, de modo que cuando la aplicación más tarde solicita los datos, se puede proporcionar muy rápidamente. El kernel macOS actual tiene diferentes optimizaciones para las unidades de disco duro y las unidades SSD ordinarias en términos de cuándo se activa una captación previa y cuánto se obtiene previamente de forma anticipada.

El núcleo marca estas páginas como "especulativas", que es diferente del almacenamiento en caché regular del disco, porque sabe que esto es solo una optimización del rendimiento de los datos que aún no se han solicitado. Por lo tanto, si la computadora carece de memoria para otros fines, las páginas especulativas se pueden descartar con poca o ninguna penalización de rendimiento.

En la práctica, el kernel lee los datos en páginas especulativas y los marca como "protegidos", lo que significa que no se tirará tan fácilmente bajo la presión de la memoria. A medida que las páginas especulativas envejecen (es decir, el tiempo pasa), se mueven de "bin a bin" para que las páginas más antiguas se almacenen juntas. Cuando alcanzan cierta edad, ya no están protegidos, y se pueden descartar fácilmente si se necesita memoria para otros fines.

Sin embargo, si una aplicación realmente utiliza los datos que se han colocado en las páginas especulativas, se señala inmediatamente que ya no son especulativos y se coloca en una de las otras categorías según sea relevante.

Si lo desea, puede deshabilitar completamente las páginas especulativas configurando speculative_reads_disabled a 1 con sysctl.

La razón por la cual las estadísticas se hacen por separado para las páginas especulativas para que no se agrupen con páginas libres o la caché de disco normal es que puede usarla para medir si realmente se está utilizando la especulación en su máquina, y cuánto una mejor idea de la cantidad de memoria que realmente utilizan las aplicaciones, y no solo de que el núcleo intente optimizar el rendimiento.

jksoegaard
fuente
Su respuesta será realmente útil para entender la métrica. Una cosa más, ¿cómo descubrió el papel y el significado de la métrica especulativa? No pude encontrar ningún documento y sitio. ¿Podría hacerme saber cómo descubrió la información sobre la métrica de la memoria?
mznet07
Bueno, combiné los conocimientos previos de mi título de CS y trabajo con otros sistemas operativos junto con la lectura del código fuente de Darwin.
jksoegaard