Linux: Historias de gestión de grandes memorias

Linux: Historias de gestión de grandes memorias

  • Autor de la entrada:
  • Categoría de la entrada:Entradas

Esta entrada de blog resumirá todos los esfuerzos de la comunidad de Linux para mejorar la asignación de memoria a gran escala a lo largo del tiempo mirando la historia del desarrollo. La idea clave es recopilar todas las entradas de blog ordenadas por tiempo de la revista LWN.net que se relacionan con la gestión de la memoria.

Cuando haya alguna entrada o actualización reciente sobre este tema, la añadiré al blog y a la sección de historia editada para facilitar el seguimiento.

Introducción

Como Linux es un sistema de memoria virtual, la fragmentación normalmente no es un problema. Podemos tratar la memoria como un bloque virtualmente contiguo por el mecanismo de la memoria virtual.

Una vez que el sistema ha estado funcionando durante un tiempo, la memoria física suele estar fragmentada donde existen muy pocos grupos de páginas adyacentes y libres. Se ha trabajado mucho para evitar la necesidad de asignaciones de memoria de orden superior (multipágina). Como resultado, la mayoría de las funcionalidades del núcleo siguen funcionando normalmente cuando se produce una fragmentación externa.

Sin embargo, puede haber verdaderas ventajas de rendimiento al utilizar páginas enormes. En algunas ocasiones, el uso de páginas enormes es inevitable.

Reduce la presión sobre el cacheo del TLB (Translation Look-aside Buffer), lo que beneficia enormemente a algunas aplicaciones como las bases de datos.

grandes estructuras de datos del kernel, un enorme búfer DMA para dispositivos de gama baja …

En esos casos, el código que necesita esas asignaciones puede fallar en un sistema fragmentado. A través de muchos años de desarrollo del kernel de Linux, hay muchas contribuciones para mejorar la asignación de memoria grande en Linux.

Glosario básico

Memoria y buscapersonas virtuales

La localización es un esquema de gestión de la memoria que elimina la necesidad de una asignación contigua de la memoria física.

El sistema operativo tendrá un hardware de traducción de direcciones que utiliza para traducir de la dirección virtual a la dirección física.

Orden de bloqueo

Linux maneja las páginas virtuales agrupándolas en órdenes de bloqueo. Para cada orden, hay una lista vinculada de bloques disponibles de ese tamaño. Por ejemplo, en la parte inferior de la matriz, la lista de orden-0 contiene páginas individuales; la lista de orden-1 tiene pares de páginas, etc.

La memoria se agrupa en órdenes para facilitar la asignación

Asignación de alto orden

El intento de obtener varias páginas contiguas para una aplicación que necesita más de una página en un solo bloque físicamente contiguo.

A veces, hay suficientes páginas virtuales libres para la memoria solicitada, pero esas páginas no son físicamente contiguas y están correctamente alineadas. La memoria del sistema está fragmentada.