Simple Science

Ciencia de vanguardia explicada de forma sencilla

# Informática# Arquitectura de hardware

Mejorando el Acceso a la Memoria en Sistemas Cloud

Un nuevo sistema usa caché DRAM para mejorar la eficiencia del acceso a la memoria en aplicaciones en la nube.

― 20 minilectura


Mejorando el Acceso a laMejorando el Acceso a laMemoria en la Nubeeficiencia de las aplicaciones.Nuevo sistema de caché DRAM mejora la
Tabla de contenidos

La agrupación de memoria se está volviendo más común entre los proveedores de la nube y los creadores de sistemas. Este enfoque permite que los sistemas compartan recursos de memoria, lo que puede ahorrar dinero. Sin embargo, este compartimiento puede ralentizar los tiempos de acceso a la memoria. Para solucionar este problema, se puede usar DRAM local (Memoria de Acceso Aleatorio Dinámico) como una caché para la memoria conectada a la tela (FAM). Al utilizar técnicas de Prefetching de datos, podemos reducir el tiempo de espera causado por el acceso a la FAM.

Este artículo presenta un sistema que prefetches pequeños bloques de datos de la FAM a una caché DRAM para mejorar la rapidez del acceso a datos. El sistema propuesto reduce los retrasos en el acceso a datos y aumenta el rendimiento de la aplicación. Para mejorar aún más este proceso, se añaden pasos para minimizar los problemas relacionados con la competencia por el ancho de banda en la FAM. El objetivo es gestionar mejor cómo se manejan las solicitudes de datos dentro de un nodo de memoria, equilibrando las necesidades de las solicitudes de demanda y de prefetch, mientras se ajusta la tasa de prefetch según los retrasos observados.

En nuestra evaluación, examinamos cómo se desempeña este sistema en configuraciones de nodo único y multi-nodo utilizando diferentes benchmarks de aplicación. Los resultados indican que el uso del prefetching en la caché DRAM puede mejorar el rendimiento en aproximadamente un 7% en términos de instrucciones por ciclo (IPC). Las optimizaciones adicionales pueden llevar a mejoras adicionales de 7-10%.

La Evolución de las Cargas de Trabajo

Las aplicaciones modernas están cambiando rápidamente, especialmente con el aumento de los métodos de aprendizaje automático (ML). Estos métodos requieren grandes conjuntos de datos, ya sea para entrenar modelos o recuperar información. En los centros de datos, las cargas de trabajo pueden referirse a terabytes de datos, lo que plantea altas demandas a los sistemas de memoria.

Con el tiempo, la diferencia de velocidad entre DRAM y discos se ha ampliado, lo que ha llevado a los diseñadores de sistemas a favorecer capacidades de DRAM más grandes en lugar de usar discos para almacenamiento adicional. Se han sugerido diversas técnicas para reducir los costos relacionados con el movimiento de datos y los retrasos causados por fallos de página. Algunos de estos métodos implican el uso de mayores cantidades de DRAM, ejecutar aplicaciones exclusivamente en memoria, prefetching de bloques de datos o utilizar memoria remota.

Los servidores de centros de datos a menudo ejecutan aplicaciones con diferentes necesidades de memoria. Cuando los servidores tienen más DRAM de la necesaria, algunas aplicaciones pueden no utilizar toda la memoria disponible. Este problema de subutilización de memoria se ha vuelto generalizado, con datos de Google y Alibaba que muestran que una parte significativa de la memoria asignada a menudo no se utiliza.

El costo de DRAM se ha estabilizado, por lo que ampliar la capacidad de memoria en los servidores se ha vuelto cada vez más costoso. De hecho, la memoria a menudo representa una gran parte del costo total de poseer flotas de servidores. La memoria subutilizada puede llevar a costos sustanciales al gestionar grandes centros de datos.

Entendiendo la Desagregación de Memoria

La desagregación de memoria permite que las aplicaciones accedan a la memoria de un grupo centralizado según sea necesario, en lugar de estar atadas a un servidor específico. Los nuevos servidores de centros de datos están explorando la memoria desagregada para encontrar formas más baratas de proporcionar recursos de memoria. Hay dos enfoques principales que se están explorando:

  1. Los métodos RDMA (Acceso Directo a Memoria Remota) permiten acceder a la memoria de otro servidor como memoria remota utilizando métodos estándar de paginación de OS.
  2. El segundo enfoque es usar CXL (Compute Express Link) para crear un grupo de memoria compartida entre servidores.

Estos enfoques añaden nuevas capas a la jerarquía de memoria, introduciendo DRAM compartido a través de interconexiones. A medida que estos nuevos tipos de memoria, como la desagregada o memorias no volátiles, se acercan en velocidad a la memoria convencional, hay una necesidad de encontrar formas más rápidas de acceder a los datos desde estos niveles de memoria.

Este artículo discute un método de prefetching que transfiere datos entre DRAM y niveles de memoria más bajos como la memoria desagregada a través de interconexiones similares a CXL.

La Propuesta de Caché DRAM

Esta propuesta sugiere usar fallos de LLC (Caché de Último Nivel) que se detectan a nivel de complejo raíz para formar un mecanismo de prefetch entre la memoria conectada a la tela (FAM) y DRAM. La idea es usar una parte de DRAM local como caché para FAM, que llamaremos caché DRAM.

Para ilustrar los beneficios de este enfoque, utilizaremos el Prefetcher de Ruta de Firma (SPP) como una técnica de prefetching de ejemplo. Este prefetcher puede ayudar a mostrar las mejoras de rendimiento obtenidas al usar una caché DRAM, aunque otros prefetchers también se pueden adaptar para este propósito. El prefetcher de caché DRAM llevará un seguimiento de los metadatos para los datos de FAM que se han almacenado en caché. Cuando hay una solicitud de datos que ya está en caché, se procesará con Latencias de DRAM en lugar de las latencias más largas encontradas al acceder a FAM.

A diferencia de los sistemas anteriores que trabajaban con transferencias a nivel de página entre DRAM y otras memorias, esta propuesta se centra en facilitar el prefetching a nivel de subpágina directamente dentro del hardware.

Dado que múltiples nodos pueden extraer de FAM, es crítico asegurar que el ancho de banda de FAM se utilice de manera efectiva entre estos nodos. Estudios previos indican que la limitación del prefetching puede ayudar a optimizar el ancho de banda de la memoria. Por lo tanto, nuestra propuesta integra la limitación del prefetching para gestionar el ancho de banda de FAM entre flujos de demanda y prefetch de múltiples nodos.

Contribuciones Clave

Este estudio ofrece varias contribuciones clave al campo:

  • Propone una arquitectura de sistema que almacena en caché y prefetches datos de FAM a DRAM local, gestionando la caché a niveles de bloque de subpágina.
  • Introduce un mecanismo de prefetching adaptativo que ajusta la tasa de prefetches de la caché DRAM según el nivel de congestión en FAM.
  • Sugiere utilizar una estrategia de Colas Justas Ponderadas (WFQ) en el nodo de memoria, comparando su eficacia con los métodos de limitación de prefetching.
  • Evalúa el mecanismo de prefetching propuesto en configuraciones de nodo único y multi-nodo.

La Conexión CXL

CXL es un estándar que asegura la coherencia de caché y permite que los procesadores se comuniquen con varios dispositivos como aceleradores y expansores de memoria. Se basa en la capa física PCIe existente y ofrece tres protocolos diferentes: CXL.cache, CXL.mem y CXL.io. Los dispositivos que se conectan a los procesadores a través de CXL pueden utilizar uno o más de estos protocolos.

Este artículo discute principalmente sistemas que utilizan el protocolo CXL.mem para la agrupación de memoria. La figura en esta sección ilustra los nodos de computación agrupando memoria de un nodo de memoria compartido, refiriéndose a esta memoria como memoria conectada a la tela (FAM).

El complejo raíz de CXL incluye un agente que implementa el protocolo CXL.mem. Este agente se comunica en nombre de la CPU, gestionando todas las transferencias de datos con el punto final CXL. En este sistema, el punto final está compuesto por un dispositivo FAM y su controlador. El controlador de FAM traduce los comandos de CXL en solicitudes que el dispositivo FAM puede entender.

Cuando ocurren fallos de caché y escrituras, son manejados por el controlador de memoria local o el complejo raíz de CXL según la dirección física involucrada, requiriendo la decodificación de direcciones manejada por decodificadores específicos en la memoria del dispositivo gestionada por el host.

Resumen del Prefetching de Memoria

El prefetching de datos es una técnica utilizada para ocultar los retrasos de acceso en diferentes niveles de memoria. Los prefetchers predicen futuras direcciones de memoria basándose en patrones de acceso pasados. Las estrategias comunes incluyen el análisis de deltas de dirección, contadores de programa que causan fallos de caché y historiales de acceso. Los avances recientes han incluido el uso de redes neuronales y aprendizaje por refuerzo para el prefetching.

En este trabajo, el SPP sirve como la arquitectura base para nuestro prefetcher de caché DRAM. Este prefetcher lleva un seguimiento de los patrones de acceso a memoria utilizando firmas, que son representaciones compactas de comportamientos de acceso pasados. El SPP consiste en dos tablas: la Tabla de Firmas y la Tabla de Patrones.

Cuando ocurre un fallo de caché, la dirección física de este fallo se utiliza para buscar en la Tabla de Firmas para encontrar la última dirección de fallo de caché y la firma actual. Este estado permite calcular el siguiente patrón de acceso esperado y hacer predicciones sobre accesos futuros.

El SPP mantiene una tabla de historia global que ayuda a construir contexto cuando el flujo de acceso cambia de una página de memoria a otra. Las entradas en esta tabla se actualizan con cada acceso, permitiendo que aprenda y se adapte con el tiempo.

Detalles de la Arquitectura del Sistema

Esta sección describe los componentes de la arquitectura del sistema que habilitan el mecanismo de caché y prefetching de DRAM. A lo largo de esto, discutiremos solicitudes de demanda y solicitudes de prefetch de caché DRAM. Cabe notar que los prefetches de caché DRAM son distintos de las solicitudes de prefetch emitidas por los prefetchers de caché por núcleo. Sin embargo, nuestro sistema trata todas las solicitudes que fallan en el LLC como solicitudes de demanda. Por lo tanto, las solicitudes de prefetch de núcleo que fallan en el LLC también contribuyen al entrenamiento del prefetcher de caché DRAM.

Complejo Raíz Mejorado

El mecanismo de caché y prefetching de DRAM se apoya en mejoras realizadas en el complejo raíz. Esto incluye la adición de un prefetcher y una cola de prefetch, permitiendo el manejo simultáneo de ambas solicitudes de demanda y de prefetch enviadas a FAM.

Nuestro prefetcher de caché DRAM se basa en la arquitectura SPP pero modificado para trabajar con bloques más pequeños, a nivel de subpágina en lugar de tamaños de bloques de caché estándar. El prefetcher entrena sus algoritmos en función de las direcciones físicas de los fallos de LLC, generando direcciones de prefetch alineadas con precisión.

Para completar un acceso a memoria, las direcciones físicas deben ser traducidas a direcciones locales de FAM. Asumimos que este proceso de traducción es gestionado por otros componentes en la jerarquía de memoria. Las necesidades de almacenamiento para implementar nuestro prefetcher son alrededor de 11KB.

La Cola de Prefetch

Además del prefetcher, se ha añadido una cola de prefetch de longitud fija al complejo raíz. Para cada fallo de lectura en el LLC dirigido a FAM, el prefetcher generará un número establecido de solicitudes de prefetch, denominado grado de prefetch. Cada solicitud de prefetch necesita espacio en la cola de prefetch antes de poder ser enviada a FAM.

Las solicitudes que están siendo procesadas actualmente se almacenan en esta cola, lo que facilita verificar si una dirección de solicitud de demanda pertenece a algún prefetch activo. La funcionalidad de la cola de prefetch es similar a la de un Registro de Manejo de Estado de Fallos (MSHR) utilizado en cachés de procesadores. Cuando la cola está llena, no se pueden emitir nuevos prefetches hasta que se reciban respuestas de solicitudes anteriores.

La cola de prefetch puede controlar efectivamente la tasa de emisión de solicitudes de prefetch debido a su longitud fija. Si bien este método estático puede funcionar bien para algunas aplicaciones, puede llevar a un prefetching ineficiente para otras. Por lo tanto, nuestro diseño también incluye mecanismos para adaptar las tasas de prefetch más allá de depender únicamente de la cola de prefetch.

La Caché DRAM

La caché DRAM es gestionada por hardware en lugar de depender del sistema operativo. El sistema operativo juega un papel solo durante el proceso de configuración, particionando la memoria física y designando un rango para su uso como caché DRAM. Nuestro sistema gestiona la caché DRAM como una caché asociativa de conjuntos, utilizando una política de reemplazo de Menos Usado Recientemente (LRU).

Dado que FAM puede tener un gran espacio de direcciones en comparación con la caché DRAM, gestionamos los metadatos de la caché DRAM mediante la hash de direcciones de FAM en un número limitado de ranuras. Para minimizar las colisiones de direcciones, el número de ranuras puede exceder el número de bloques de FAM disponibles, o se pueden considerar técnicas alternativas como hashing Cuckoo.

Manejo de Solicitudes de Demanda y Prefetch

El flujo de solicitudes de demanda a través del sistema implica la consulta con el prefetcher para verificar si los bloques solicitados ya están en la caché DRAM. Si un bloque de datos está presente, se envía una solicitud con la dirección del bloque de la caché DRAM al controlador de memoria local. La solicitud de demanda original esperará que esta nueva solicitud regrese con los datos necesarios.

Cuando un bloque solicitado no se encuentra en la caché DRAM, la solicitud de demanda original avanza directamente a FAM como un acceso habitual. Independientemente de si hay un acierto o fallo en la caché DRAM, el prefetcher genera direcciones de prefetch para todas las solicitudes de demanda salientes, verificando la cola de prefetch y los metadatos de la caché DRAM para evitar solicitudes redundantes.

Una vez que se emiten las solicitudes de prefetch, el prefetcher verifica los metadatos para encontrar espacio disponible en la caché DRAM. Si hay espacio disponible, el bloque prefetched entrante se envía directamente a la caché. Si no, el prefetcher desaloja el bloque menos usado recientemente para hacer espacio para los nuevos datos.

El Controlador FAM

El controlador FAM es responsable de convertir las solicitudes entrantes utilizando el protocolo CXL.mem en solicitudes DDR que el FAM puede manejar. En una implementación del mundo real, podría tener múltiples puertos que soportan una gama de carriles PCIe/CXL mientras también gestiona múltiples canales de memoria DDR en el backend.

El controlador organiza las solicitudes entrantes en una cola de entrada y debe ser consciente del ancho de banda de memoria máximo disponible a través de sus canales DDR. Dirige las solicitudes tanto de fuentes de demanda como de prefetch siguiendo un sistema de primero en entrar, primero en salir (FIFO).

Este diseño permite que el controlador FAM gestione dos clases de solicitudes: solicitudes de demanda y solicitudes de prefetch. Como en cualquier sistema, la forma en que se programan estas solicitudes puede impactar el rendimiento general.

Compensaciones en Tamaños de Bloques

Para analizar la relación entre los tamaños de bloques y las latencias, examinamos varias configuraciones. Se encontró que el IPC se mantenía relativamente estable a medida que los tamaños de bloques de caché DRAM aumentaban de 64 a 512 bytes, con ligeras mejoras a 128 y 256 bytes. Sin embargo, aumentar más allá de 512 bytes llevó a una disminución en el IPC debido a un aumento en las latencias.

Por lo tanto, las elecciones adecuadas para los tamaños de bloques de caché DRAM se establecen en 128, 256 y 512 bytes. Usar valores que son múltiplos del tamaño de bloque de caché de la CPU (64 bytes) ayuda a disminuir los retrasos relacionados con el empaquetado de datos en la tela, mientras que también minimiza la sobrecarga asociada con la gestión de metadatos.

Optimizando el Prefetching

Nuestro enfoque en optimizar el prefetcher de caché DRAM está dirigido a mejorar cómo interactúan las solicitudes de demanda y prefetch, maximizando la efectividad de los accesos a FAM. Las estrategias propuestas incluyen adoptar Colas Justas Ponderadas (WFQ) en el nodo de memoria y adaptar el ancho de banda de prefetch en el nodo de computación.

Colas Justas Ponderadas (WFQ)

WFQ se aplica como un método para priorizar las solicitudes de demanda sobre las solicitudes de prefetch dentro de FAM. Al asignar una mayor porción de ancho de banda a las solicitudes de demanda, WFQ reduce los retrasos causados por las solicitudes de prefetch durante épocas de congestión.

La implementación base para el controlador FAM se mejora añadiendo colas separadas para solicitudes de demanda y prefetch. Esto permite que cada tipo de solicitud sea emitida de manera independiente. El prefetcher etiqueta las solicitudes, lo que permite al controlador colocarlas en la cola respectiva.

Usando un programador WFQ, las solicitudes de ambas colas se procesan de acuerdo con sus pesos. Por cada ciclo, las solicitudes de demanda son priorizadas, pero las solicitudes de prefetch aún pueden ser procesadas si no hay solicitudes de demanda disponibles.

Adaptación del Ancho de Banda

En los prefetchers tradicionales, se generan un número fijo de solicitudes de prefetch para cada fallo de LLC. Si hay muchas solicitudes de demanda causando saturación en el dispositivo FAM, enviar solicitudes de prefetch adicionales puede aumentar los retrasos y perjudicar el rendimiento. Por lo tanto, la tasa de solicitudes de prefetch debe ajustarse según el estado actual del sistema.

Nuestro enfoque utiliza contadores para recopilar datos sobre el estado de las solicitudes de demanda. Monitoreamos las latencias de estas solicitudes y reducimos la tasa de emisión de prefetch cuando las latencias superan un cierto umbral. Con el tiempo, podemos ajustar la tasa de prefetch para optimizar el rendimiento.

Configuración del Sistema Simulado

Para evaluar la efectividad del prefetcher de caché DRAM y las optimizaciones asociadas, realizamos simulaciones a través de varias cargas de trabajo de benchmark. Utilizamos herramientas que simulan tanto nodos de computación como dispositivos de memoria, mientras también imitamos cómo el sistema operativo asigna memoria.

Evaluamos un conjunto diverso de cargas de trabajo intensivas en memoria, adoptando una configuración reducida para velocidades de simulación prácticas. La configuración nos permitió analizar tanto sistemas de nodo único como multi-nodo, examinando cómo diversas combinaciones de cargas de trabajo compiten por el ancho de banda.

Métricas de Rendimiento

Para analizar y comparar los resultados de diferentes configuraciones, definimos varias métricas:

  • Ganancia de IPC: La relación de IPC para una configuración de carga de trabajo en comparación con una carga de trabajo base. Ratios más altos indican un mejor rendimiento.
  • Latencia Relativa de Acceso a FAM: La relación de la latencia promedio de acceso a FAM para una configuración de carga de trabajo específica en comparación con la base. Ratios más bajos indican un mejor rendimiento.
  • Relación de Solicitudes de Prefetch de DRAM Emitidas: La relación de solicitudes de prefetch para una configuración dada en comparación con las solicitudes emitidas sin optimizaciones.
  • Fracción de Aciertos de Demanda: La porción de solicitudes de demanda que fallan en el LLC pero aciertan en la caché DRAM.

Resultados de Rendimiento con Adaptación de Ancho de Banda

En nuestro análisis, ejecutamos varias cargas de trabajo a través de múltiples nodos mientras comparábamos el rendimiento de configuraciones de prefetch adaptativo contra configuraciones tradicionales. Los resultados indicaron que la introducción tanto del prefetcher de caché DRAM como de la adaptación de ancho de banda mejoró el IPC en general, particularmente en configuraciones multi-nodo.

Ganancias de Rendimiento en IPC

La introducción del prefetching DRAM llevó consistentemente a mejoras de rendimiento en todos los benchmarks en comparación con el uso solo del prefetching de núcleo. Notablemente, a medida que añadimos mecanismos de prefetching adaptativos, observamos mejoras adicionales en el IPC. Por ejemplo, en una configuración de dos nodos, la ganancia de IPC aumentó alrededor del 4%, y en una configuración de cuatro nodos, fue del 8%.

Impacto en la Latencia de Acceso a FAM

La reducción general en la latencia promedio de acceso a FAM contribuyó significativamente a estas mejoras de rendimiento. Al usar el prefetching de caché DRAM, esta latencia disminuyó en alrededor del 29% y 34% en configuraciones de dos y cuatro nodos, respectivamente.

Examinando el Efecto de WFQ

También evaluamos el impacto del algoritmo de programación WFQ en el rendimiento. Las pruebas mostraron que WFQ mejoró el IPC sobre la programación FIFO simple en varias configuraciones de nodos. Los resultados indicaron que con pesos asignados a las solicitudes de demanda frente a las solicitudes de prefetch, el rendimiento general del sistema mejoró debido a las menores latencias de acceso a FAM.

Resultados en Diferentes Cargas de Trabajo de Benchmark

Diferentes benchmarks mostraron diferentes niveles de sensibilidad a los ajustes realizados por los dos enfoques (adaptación de ancho de banda y WFQ). Algunas cargas de trabajo se beneficiaron significativamente de WFQ, mientras que otras vieron mejoras modestas.

Análisis de Rendimiento Multi-Nodo

Al examinar el rendimiento acumulativo de varias configuraciones a través de siete mezclas de carga de trabajo multi-nodo distintas, ambas estrategias de prefetching adaptativo mostraron promesas en la mejora del IPC. Sin embargo, las ganancias específicas se vieron afectadas tanto por los tipos de carga de trabajo como por sus interacciones.

Asignación de Ratios de Memoria

Cuando analizamos el impacto de varios ratios de asignación de memoria en el rendimiento, se hizo evidente que la eficacia del prefetching de núcleo disminuyó a medida que aumentaba el uso de recursos de FAM. Sin embargo, los enfoques adaptativos ayudaron a cerrar las brechas de rendimiento causadas por configuraciones de memoria agrupada.

Conclusión

Este artículo presenta una estrategia de prefetching que almacena en caché pequeños bloques de datos de la memoria conectada a la tela en DRAM local para reducir la latencia de acceso. La implementación de mecanismos adaptativos maximiza aún más la utilidad y el rendimiento dentro de la jerarquía de memoria en los sistemas de computación modernos. Nuestros hallazgos demuestran la efectividad de estos enfoques, destacando su potencial para resolver desafíos relacionados con la memoria en cargas de trabajo cada vez más complejas. En general, tanto el prefetching adaptativo como las técnicas de gestión de colas enfatizadas en este trabajo ofrecen soluciones valiosas para mejorar el rendimiento del sistema en contextos de memoria compartida.

Fuente original

Título: Exploring DRAM Cache Prefetching for Pooled Memory

Resumen: Hardware based memory pooling enabled by interconnect standards like CXL have been gaining popularity amongst cloud providers and system integrators. While pooling memory resources has cost benefits, it comes at a penalty of increased memory access latency. With yet another addition to the memory hierarchy, local DRAM can be potentially used as a block cache(DRAM Cache) for fabric attached memory(FAM) and data prefetching techniques can be used to hide the FAM access latency. This paper proposes a system for prefetching sub-page blocks from FAM into DRAM cache for improving the data access latency and application performance. We further optimize our DRAM cache prefetch mechanism through enhancements that mitigate the performance degradation due to bandwidth contention at FAM. We consider the potential for providing additional functionality at the CXL-memory node through weighted fair queuing of demand and prefetch requests. We compare such a memory-node level approach to adapting prefetch rate at the compute-node based on observed latencies. We evaluate the proposed system in single node and multi-node configurations with applications from SPEC, PARSEC, Splash and GAP benchmark suites. Our evaluation suggests DRAM cache prefetching result in 7% IPC improvement and both of proposed optimizations can further increment IPC by 7-10%.

Autores: Chandrahas Tirumalasetty, Narasimha Annapreddy

Última actualización: 2024-06-20 00:00:00

Idioma: English

Fuente URL: https://arxiv.org/abs/2406.14778

Fuente PDF: https://arxiv.org/pdf/2406.14778

Licencia: https://creativecommons.org/licenses/by/4.0/

Cambios: Este resumen se ha elaborado con la ayuda de AI y puede contener imprecisiones. Para obtener información precisa, consulte los documentos originales enlazados aquí.

Gracias a arxiv por el uso de su interoperabilidad de acceso abierto.

Artículos similares