Jerarquía de memoria
En la organización informática, la jerarquía de memoria separa el almacenamiento informático en una jerarquía basada en el tiempo de respuesta. Dado que el tiempo de respuesta, la complejidad y la capacidad están relacionados, los niveles también pueden distinguirse por su desempeño y tecnologías de control. La jerarquía de la memoria afecta el rendimiento en el diseño arquitectónico de la computadora, las predicciones de algoritmos y las construcciones de programación de nivel inferior que involucran la localidad de referencia.
Diseñar para un alto rendimiento requiere considerar las restricciones de la jerarquía de la memoria, es decir, el tamaño y las capacidades de cada componente. Cada uno de los diversos componentes puede verse como parte de una jerarquía de memorias (m1, m2,..., mn) en el que cada miembro mi suele ser más pequeño y más rápido que el siguiente miembro más alto mi+1 de la jerarquía. Para limitar la espera de los niveles más altos, un nivel más bajo responderá llenando un búfer y luego señalando para activar la transferencia.
Hay cuatro niveles principales de almacenamiento.
- Internos – Registros de procesadores y caché.
- Principal – el sistema RAM y tarjetas de controlador.
- Almacenamiento en línea de masa – Almacenamiento secundario.
- Almacenamiento a granel fuera de línea – almacenamiento terciario y sin conexión.
Esta es una estructura de jerarquía de memoria general. Muchas otras estructuras son útiles. Por ejemplo, un algoritmo de paginación se puede considerar como un nivel de memoria virtual al diseñar una arquitectura informática, y se puede incluir un nivel de almacenamiento casi en línea entre el almacenamiento en línea y fuera de línea.
Propiedades de las tecnologías en la jerarquía de memoria
- Añadiendo complejidad disminuye la jerarquía de memoria.
- La tecnología de memoria CMOx extiende el espacio Flash en la jerarquía de memoria
- Una de las principales maneras de aumentar el rendimiento del sistema es minimizar hasta qué punto la jerarquía de memoria hay que ir a manipular los datos.
- Latency and bandwidth are two metrics associated with caches. Ninguno de ellos es uniforme, pero es específico a un componente particular de la jerarquía de memoria.
- Predecir donde en la jerarquía de memoria residen los datos es difícil.
- ...la ubicación en la jerarquía de memoria dicta el tiempo requerido para que el prefetch ocurra.
Ejemplos
La cantidad de niveles en la jerarquía de memoria y el rendimiento en cada nivel ha aumentado con el tiempo. El tipo de memoria o los componentes de almacenamiento también cambian históricamente. Por ejemplo, la jerarquía de memoria de un procesador Intel Haswell Mobile alrededor de 2013 es:
- El procesador registra – el acceso más rápido posible (generalmente 1 ciclo CPU). Unos miles de bytes de tamaño
- Cache
- Nivel 0 (L0) Micro operaciones caché – 6.144 bytes (6 KiB) en tamaño
- Nivel 1 (L1) Caché de instrucciones – 128 KiB de tamaño
- Nivel 1 (L1) Caché de datos – 128 KiB de tamaño. La mejor velocidad de acceso es de alrededor de 700 GB/s
- Nivel 2 (L2) Instrucciones y datos (compartidos) – 1 MiB en tamaño. La mejor velocidad de acceso es de alrededor de 200 GB/s
- Nivel 3 (L3) Caché compartido – 6 MiB de tamaño. La mejor velocidad de acceso es de alrededor de 100 GB/s
- Nivel 4 (L4) Caché compartido – 128 MiB de tamaño. La mejor velocidad de acceso es de alrededor de 40 GB/s
- Memoria principal (Almacenamiento primario) – GiB en tamaño. La mejor velocidad de acceso es alrededor de 10 GB/s. En el caso de una máquina NUMA, los tiempos de acceso pueden no ser uniformes
- Almacenamiento de discos (Secondary storage) – Terabytes en tamaño. A partir de 2017, la mejor velocidad de acceso es de una unidad de estado sólido de consumo es alrededor de 2000 MB/s
- Almacenamiento de línea cercana (almacenamiento territorial) – Hasta exabytes en tamaño. A partir de 2013, la mejor velocidad de acceso es de unos 160 MB/s
- Almacenamiento sin conexión
Los niveles más bajos de la jerarquía, desde los discos hacia abajo, también se conocen como almacenamiento en niveles. La distinción formal entre almacenamiento en línea, casi en línea y fuera de línea es:
- El almacenamiento en línea está inmediatamente disponible para I/O.
- El almacenamiento en línea no está inmediatamente disponible, pero se puede hacer en línea rápidamente sin intervención humana.
- El almacenamiento sin conexión no está disponible inmediatamente, y requiere alguna intervención humana para traer en línea.
Por ejemplo, los discos giratorios siempre activos están en línea, mientras que los discos giratorios que giran hacia abajo, como la matriz masiva de discos inactivos (MAID), están casi en línea. Los medios extraíbles, como los cartuchos de cinta que se pueden cargar automáticamente, como en una biblioteca de cintas, están casi en línea, mientras que los cartuchos que deben cargarse manualmente están fuera de línea.
La mayoría de las CPU modernas son tan rápidas que para la mayoría de las cargas de trabajo del programa, el cuello de botella es la localidad de referencia de los accesos a la memoria y la eficiencia del almacenamiento en caché y la transferencia de memoria entre los diferentes niveles de la jerarquía. Como resultado, la CPU pasa gran parte de su tiempo inactivo, esperando que se complete la E/S de la memoria. Esto a veces se denomina costo de espacio, ya que es más probable que un objeto de memoria más grande desborde un nivel pequeño/rápido y requiera el uso de un nivel más grande/lento. La carga resultante en el uso de la memoria se conoce como presión (respectivamente presión de registro, presión de caché y (principal) presión de memoria). Los términos para la falta de datos de un nivel superior y la necesidad de obtenerlos de un nivel inferior son, respectivamente: registro derramado (debido a la presión del registro: registro en caché), pérdida de caché (caché en memoria principal) y falla de página (dura). (memoria principal a disco).
Los lenguajes de programación modernos asumen principalmente dos niveles de memoria, memoria principal y almacenamiento en disco, aunque en lenguaje ensamblador y ensambladores en línea en lenguajes como C, se puede acceder directamente a los registros. Aprovechar al máximo la jerarquía de la memoria requiere la cooperación de los programadores, el hardware y los compiladores (así como el soporte subyacente del sistema operativo):
- Programadores son responsables de mover datos entre disco y memoria a través del archivo I/O.
- Hardware es responsable de mover datos entre memoria y caches.
- Optimización de los compiladores son responsables de generar código que, cuando se ejecute, hará que el hardware use caches y registros eficientemente.
Muchos programadores asumen un nivel de memoria. Esto funciona bien hasta que la aplicación golpea un muro de rendimiento. Luego, la jerarquía de la memoria se evaluará durante la refactorización del código.
Contenido relacionado
ESPACIO P
Protección de privacidad de GNU
Calidad de servicio