¿Cómo asigna memoria FreeBSD?


9

Soy consciente / explicación generalizada, pero que esto se simplifica top(1)la memoria se divide en FreeBSD utilidad en seis piscinas, Active, Inactive, Wired, Cache, Buffersy Free. Ejemplo de top(1)salida:

Mem: 130M Active, 42M Inact, 51M Wired, 14M Cache, 34M Buf, 648K Free
Swap: 512M Total, 512M Free

Activese usa para ejecutar procesos y Wiredse usa principalmente para kernel. Inactivees memoria de procesos cerrados que todavía está en caché en caso de que necesite reutilizarse, Cachees información almacenada en caché, Bufferses búfer de disco (supongo que es similar a la salida de cachedLinux free(1)(?)) y Freees memoria completamente sin usar. Estoy en lo correcto que kernel de FreeBSD automáticamente asigna espacio de Inactive, Cachey Bufferspiscinas para Activeo Wiredsi es necesario?

Respuestas:


13

Para abreviar, se utiliza memoria activa y por cable que no debe o no puede intercambiarse para liberar memoria. Si bien inactivo se puede intercambiar correctamente, pero aún es propiedad (no liberado) de un proceso o del núcleo, por lo que esta no es una memoria muy utilizada, pero aún se usa.

Lo nuevo es la lavandería, que es una lista de páginas de memoria sucia, que podría necesitar escribirse en el dispositivo de intercambio. Si es necesario cambiar la memoria sucia o no, se vuelve a agregar a la cola inactiva.

Se supone que la memoria cableada no debe intercambiarse, por seguridad (en el caso del kernel) o para la optimización del proceso del usuario (como ZFS). La memoria cableada se usa para cachés de sistemas de archivos, que pueden ser liberados por el núcleo. Al menos para ZFS, esto puede verse como memoria principalmente libre.

La memoria libre es definitivamente gratis.

Caché (ahora en desuso, supongo) está listo para ser liberado, ya que ya está intercambiado y solo allí para una posible reasignación.

Buffer es utilizado como caché por la mayoría de los sistemas de archivos (UFS, FAT, ...) y es la cantidad de memoria utilizada por los sistemas de archivos. Puede ser activo, inactivo o cableado.

ARC (Adaptive Replacement Cache) es el caché utilizado por ZFS y es la memoria que se puede liberar cuando sea necesario.

Del Wiki de FreeBSD sobre memoria

Clases de memoria

Activo

  • Contiene páginas "activamente" (recientemente) referenciadas por userland
  • Contiene una mezcla de páginas limpias y sucias.
  • Las páginas son escaneadas regularmente por el demonio de página (cada página se visita una vez cada vm.pageout_update_period segundos)
  • Los escaneos verifican si la página ha sido referenciada desde el último escaneo
  • Si se completan suficientes escaneos sin ver una referencia, la página se mueve a la cola inactiva
  • Implementa pseudo-LRU

Inactivo

  • Contiene páginas caducadas de la cola activa
  • Contiene páginas expulsadas de la memoria caché del búfer.
  • Contiene una mezcla de páginas limpias y sucias.
  • Las páginas son escaneadas por el demonio de la página (comenzando desde el comienzo de la cola) cuando hay una escasez de memoria:
    • Las páginas a las que se ha hecho referencia se mueven de nuevo a la cola activa o al final de la cola inactiva
    • Las páginas que están sucias se mueven a la cola de la cola de lavandería
    • Las páginas limpias y sin referencia pueden liberarse y reutilizarse inmediatamente
  • Implementa LRU de segunda oportunidad

Lavandería

  • Cola para administrar páginas inactivas sucias, que deben limpiarse ("lavarse") antes de que puedan reutilizarse
  • Gestionado por un hilo separado, el hilo de lavandería, en lugar del demonio de página
  • El hilo de lavandería lanza una pequeña cantidad de páginas para equilibrar las colas inactivas y de lavandería
  • La frecuencia del lavado depende de:
    • Cuántas páginas limpias está liberando el demonio de página; más liberaciones contribuye a una mayor frecuencia de lavado
    • El tamaño de la cola de lavandería en relación con la cola inactiva; Si la fila de ropa está creciendo, lavaremos con más frecuencia
  • Las páginas son escaneadas por el hilo de lavado (comenzando desde el comienzo de la cola):
    • Las páginas a las que se ha hecho referencia vuelven a la cola activa o al final de la cola de lavandería
    • Las páginas sucias se lavan y luego se acercan al comienzo de la cola inactiva

Gratis

  • Memoria disponible para uso del resto del sistema.

Cableado

  • Memoria no paginable: no se puede liberar hasta que el propietario la libere explícitamente
  • La memoria de usuario puede conectarse mediante mlock (2) (sujeto a los límites del sistema y por usuario)
  • Los asignadores de memoria del núcleo devuelven memoria cableada
  • El contenido del ARC y el caché del búfer están conectados
  • Parte de la memoria está permanentemente conectada y nunca se libera (por ejemplo, el archivo del núcleo en sí)

Del diseño e implementación del sistema operativo FreeBSD capítulo 6.12 Reemplazo de página (ya no es completamente exacto, pero aquí para consultar la pregunta anterior):

El núcleo divide la memoria principal en cinco listas:

  1. Con cable : las páginas con cable están bloqueadas en la memoria y no se pueden eliminar. Por lo general, estas páginas están siendo utilizadas por el kernel o el buscapersonas de memoria física, o se han bloqueado con mlock . Además, todas las páginas que se utilizan para contener las pilas de hilos de procesos cargados (es decir, no intercambiados) también están conectadas.
  2. Activo : las páginas activas están siendo utilizadas por una o más regiones de memoria virtual. Aunque el kernel puede localizarlos, es probable que hacerlo provoque que un proceso activo los vuelva a generar fallas.
  3. Inactivo : las páginas inactivas pueden estar sucias y tener contenidos que aún se conocen, pero generalmente no forman parte de ninguna región activa. Si el contenido de la página está sucio, el contenido debe escribirse en el almacén de respaldo antes de que la página pueda reutilizarse. Una vez que la página se ha limpiado, se mueve a la lista de caché. Si el sistema se queda sin memoria, el demonio pageout puede intentar mover las páginas activas a la lista inactiva con la esperanza de encontrar páginas que realmente no están en uso. Los criterios de selección que utiliza el daemon pageout para seleccionar páginas para pasar de la lista activa a la lista inactiva se describen más adelante en esta sección. Cuando las listas de memoria libre y caché caen a un nivel bajo, el daemon pageout atraviesa la lista inactiva para crear más caché y páginas libres.
  4. Caché : las páginas de caché tienen contenidos que todavía se conocen, pero no forman parte de una asignación. Si se introducen en la región activa, no forman parte de ningún mapeo. Si tienen errores en una región activa, se moverán de la lista de caché a la lista activa. Si se usan para una lectura o una escritura, primero se moverán de la lista de caché al caché del búfer y finalmente se liberarán a la lista inactiva. Una llamada al sistema mlock puede reclamar una página de la lista de caché y conectarla. Las páginas en la lista de caché son similares a las páginas inactivas, excepto que no están sucias, ya sea porque no han sido modificadas desde que fueron paginadas o porque se han escrito en su almacén de respaldo. Se pueden reclamar para un nuevo uso cuando se necesita una página.
  5. Gratis : las páginas gratuitas no tienen contenido útil y se utilizarán para cumplir con las nuevas solicitudes de página predeterminada.

Para responder a tu pregunta original

¿Estoy en lo cierto de que el kernel de FreeBSD asigna automáticamente espacio de los grupos Inactivo, Caché y Buffers a Activo o Cableado si es necesario?

Las páginas activas pueden volverse inactivas si no se utilizaron durante algún tiempo. Si el kernel cambia una página inactiva , esta página se moverá a la lista de caché . La página en la lista de caché no forma parte de la asignación virtual de ningún proceso, pero puede recuperarse fácilmente, como activa o cableada . O cuando sea necesario para E / S como caché de búfer .

La memoria cableada no se puede cambiar de la memoria principal. Si está conectado por un proceso, debe desconectarse con la munlockllamada para volver a ser memoria activa .

El proceso o el núcleo pueden liberar la memoria activa , inactiva y cableada y agregarla a la lista gratuita .


Acabo de notar un error en mi pregunta inicial. Le pregunté "Estoy en lo correcto de que el kernel de FreeBSD automáticamente asigna espacio de Inactive, Wired, Cachey Bufferspiscinas a Active, o Wiredsi es necesario?" mientras que yo quería preguntarle "Estoy en lo correcto de que el kernel de FreeBSD automáticamente asigna espacio de Inactive, Cachey Bufferspiscinas para Activeo Wiredsi es necesario?". Actualicé mi pregunta inicial. Así, en pocas palabras, la memoria utilizada en FreeBSD es Wired+ Activey si esos dos piscinas necesitan cantidad adicional de memoria, entonces esto se toma de Inacative, Cached, Bufferso Freepiscinas?
Martin

@ Martin sí, eso suena bien. Actualicé mi respuesta a tu pregunta.
Raphael Ahrens
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.