Améliorer l'accès à la mémoire dans les systèmes cloud
Un nouveau système utilise le caching DRAM pour améliorer l'efficacité d'accès à la mémoire pour les applications cloud.
― 22 min lire
Table des matières
- L'évolution des charges de travail
- Comprendre la désagrégation de la mémoire
- La proposition de cache DRAM
- Contributions clés
- La connexion CXL
- Vue d'ensemble du préchargement de mémoire
- Détails de l'architecture système
- Le contrôleur FAM
- Compromis dans les tailles de bloc
- Optimisation du préchargement
- Configuration du système simulé
- Métriques de performance
- Résultats de performance avec adaptation de bande passante
- Examen de l'effet de la WFQ
- Analyse de performance multi-nœuds
- Conclusion
- Source originale
L'agrégation de mémoire devient de plus en plus courante chez les fournisseurs de cloud et les constructeurs de systèmes. Cette approche permet aux systèmes de partager des ressources mémoire, ce qui peut faire économiser de l'argent. Cependant, ce partage peut ralentir les temps d'accès à la mémoire. Pour pallier ce problème, la DRAM locale (Dynamic Random Access Memory) peut être utilisée comme cache pour la mémoire attachée au fabric (FAM). En utilisant des techniques de préchargement de données, on peut réduire le temps d'attente causé par l'accès à la FAM.
Cet article présente un système qui précharge des petits blocs de données de la FAM dans un cache DRAM pour améliorer la rapidité d'accès aux données. Le système proposé réduit les délais d'accès aux données et augmente la performance des applications. Pour améliorer encore ce processus, des étapes sont ajoutées pour minimiser les problèmes liés à la concurrence pour la bande passante au niveau de la FAM. L'objectif est de mieux gérer la façon dont les demandes de données sont traitées dans un nœud mémoire, en équilibrant les besoins des demandes et des Préchargements, tout en ajustant le taux de préchargement en fonction des délais observés.
Dans notre évaluation, nous examinons comment ce système fonctionne dans des configurations à nœud unique et multiple en utilisant différents benchmarks d'application. Les résultats indiquent que l'utilisation du préchargement de cache DRAM peut améliorer la performance d'environ 7 % en termes d'instructions par cycle (IPC). D'autres optimisations peuvent mener à des améliorations supplémentaires de 7 à 10 %.
L'évolution des charges de travail
Les applications modernes évoluent rapidement, surtout avec la montée des méthodes d'apprentissage machine (ML). Ces méthodes nécessitent de grands ensembles de données, que ce soit pour former des modèles ou récupérer des informations. Dans les centres de données, les charges de travail peuvent référencer des téraoctets de données, imposant de fortes exigences sur les systèmes mémoire.
Avec le temps, la différence de vitesse entre la DRAM et les disques s'est élargie, incitant les concepteurs de systèmes à privilégier des capacités DRAM plus grandes plutôt que d'utiliser des disques pour un stockage supplémentaire. Plusieurs techniques ont été suggérées pour réduire les coûts liés au mouvement des données et les retards causés par les fautes de page. Certaines de ces méthodes consistent à utiliser de plus grandes quantités de DRAM, à faire fonctionner des applications exclusivement en mémoire, à précharger des blocs de données ou à utiliser de la mémoire distante.
Les serveurs des centres de données exécutent souvent des applications avec des besoins mémoire différents. Lorsque les serveurs ont plus de DRAM que nécessaire, certaines applications pourraient ne pas utiliser entièrement la mémoire disponible. Ce problème de sous-utilisation de la mémoire est devenu répandu, avec des données de Google et d'Alibaba montrant qu'une part significative de la mémoire allouée est souvent inutilisée.
Le coût de la DRAM s'est stabilisé, donc l'expansion de la capacité mémoire dans les serveurs est devenue de plus en plus coûteuse. En fait, la mémoire représente souvent une grande part du coût total de possession des parcs de serveurs. La mémoire sous-utilisée peut entraîner des coûts substantiels lors de la gestion de grands centres de données.
Comprendre la désagrégation de la mémoire
La désagrégation de la mémoire permet aux applications d'accéder à la mémoire à partir d'un pool centralisé selon les besoins, au lieu d'être liées à un serveur spécifique. Les nouveaux serveurs de centre de données explorent la mémoire désagrégée pour trouver des moyens moins coûteux de fournir des ressources mémoire. Il existe deux approches principales explorées :
- Les méthodes RDMA (Remote Direct Memory Access) permettent d'accéder à la mémoire d'un autre serveur comme mémoire distante en utilisant des méthodes de pagination standard de l'OS.
- La deuxième approche consiste à utiliser CXL (Compute Express Link) pour créer un pool de mémoire partagé entre les serveurs.
Ces approches ajoutent de nouvelles couches à la hiérarchie mémoire, introduisant une DRAM partagée à travers les interconnexions. À mesure que ces nouveaux types de mémoire, comme les mémoires désagrégées ou non volatiles, se rapprochent de la vitesse de la mémoire conventionnelle, il est nécessaire de trouver des moyens plus rapides d'accéder aux données depuis ces niveaux de mémoire.
Cet article discute d'une méthode de préchargement qui transfère des données entre la DRAM et des niveaux de mémoire inférieurs comme la mémoire désagrégée via des interconnexions similaires à CXL.
La proposition de cache DRAM
Cette proposition suggère d'utiliser les échecs du cache LLC (Last Level Cache) détectés au niveau du complexe racine pour former un mécanisme de préchargement entre la mémoire attachée au fabric (FAM) et la DRAM. L'idée est d'utiliser une partie de la DRAM locale comme cache pour la FAM, que nous appellerons le cache DRAM.
Pour illustrer les avantages de cette approche, nous utiliserons le préchargeur de chemin de signature (SPP) comme exemple de technique de préchargement. Ce préchargeur peut aider à montrer les améliorations de performance obtenues grâce à l'utilisation d'un cache DRAM, bien que d'autres préchargeurs puissent également être adaptés à cet effet. Le préchargeur de cache DRAM suivra les métadonnées pour les données de la FAM qui ont été mises en cache. Lorsqu'il y a une demande de données déjà mises en cache, elle sera traitée avec les Latences de la DRAM plutôt que les latences plus longues rencontrées lors de l'accès à la FAM.
Contrairement aux systèmes précédents qui fonctionnaient avec des transferts au niveau de la page entre la DRAM et d'autres mémoires, cette proposition est axée sur la facilitation du préchargement au niveau sub-page directement dans le matériel.
Étant donné que plusieurs nœuds peuvent puiser dans la FAM, il est crucial de s'assurer que la bande passante de la FAM est utilisée efficacement entre ces nœuds. Des études antérieures indiquent que le ralentissement du préchargement peut aider à optimiser la bande passante mémoire. Par conséquent, notre proposition intègre un ralentissement du préchargement pour gérer la bande passante de la FAM entre les flux de demande et de préchargement provenant de plusieurs nœuds.
Contributions clés
Cette étude offre plusieurs contributions clés au domaine :
- Elle propose une architecture système qui met en cache et précharge des données de la FAM dans la DRAM locale, gérant le cache à des niveaux de bloc sub-page.
- Elle introduit un mécanisme de préchargement adaptatif qui ajuste le taux de préchargements de cache DRAM en fonction du niveau de congestion à la FAM.
- Elle suggère d'utiliser une stratégie de file d'attente équitable pondérée (WFQ) au niveau du nœud mémoire, en comparant son efficacité aux méthodes de ralentissement du préchargement.
- Elle évalue le mécanisme de préchargement proposé dans des configurations à nœud unique et multiple.
La connexion CXL
CXL est une norme qui garantit la cohérence du cache et permet aux processeurs de communiquer avec divers dispositifs comme des accélérateurs et des expanseurs de mémoire. Elle s'appuie sur la couche physique PCIe existante et propose trois protocoles différents : CXL.cache, CXL.mem, et CXL.io. Les dispositifs qui se connectent aux processeurs via CXL peuvent utiliser un ou plusieurs de ces protocoles.
Cet article discute principalement des systèmes qui utilisent le protocole CXL.mem pour le pooling de mémoire. La figure de cette section illustre les nœuds de calcul qui poolent de la mémoire d'un nœud mémoire partagé, appelant cette mémoire mémoire attachée au fabric (FAM).
Le complexe racine CXL comprend un agent qui implémente le protocole CXL.mem. Cet agent communique au nom du CPU, gérant tous les transferts de données avec le point de terminaison CXL. Dans ce système, le point de terminaison est constitué d'un dispositif FAM et de son contrôleur. Le contrôleur FAM traduit les commandes CXL en demandes que le dispositif FAM peut comprendre.
Lorsqu'il y a des échecs de cache et des écritures, ils sont gérés par le contrôleur mémoire local ou le complexe racine CXL en fonction de l'adresse physique impliquée, nécessitant un décodage d'adresse géré par des décodeurs spécifiques dans la mémoire gérée par l'hôte.
Vue d'ensemble du préchargement de mémoire
Le préchargement de données est une technique utilisée pour cacher les délais d'accès à différents niveaux de mémoire. Les préchargeurs prédisent les futures adresses mémoire en se basant sur des modèles d'accès passés. Les stratégies courantes incluent l'analyse des deltas d'adresse, des compteurs de programme causant des échecs de cache et des historiques d'accès. Les avancées récentes ont inclus l'utilisation de réseaux neuronaux et de l'apprentissage par renforcement pour le préchargement.
Dans ce travail, le SPP sert d'architecture de référence pour notre préchargeur de cache DRAM. Ce préchargeur suit les modèles d'accès mémoire en utilisant des signatures, qui sont des représentations compactes des comportements d'accès passés. Le SPP se compose de deux tables : la table de signatures et la table de modèles.
Lorsqu'un échec de cache se produit, l'adresse physique de cet échec est utilisée pour consulter la table de signatures afin de trouver la dernière adresse d'échec de cache et la signature actuelle. Cet état permet de calculer le prochain modèle d'accès attendu et de faire des prédictions sur les accès futurs.
Le SPP maintient une table d'historique global qui aide à construire un contexte lorsque le flux d'accès change d'une page mémoire à une autre. Les entrées de cette table sont mises à jour à chaque accès, lui permettant d'apprendre et de s'adapter au fil du temps.
Détails de l'architecture système
Cette section décrit les composants de l'architecture système qui permettent le mécanisme de cache et de préchargement DRAM. Tout au long, nous discuterons des demandes de demande et des demandes de préchargement de cache DRAM. Notez que les préchargements de cache DRAM sont distincts des demandes de préchargement émises par les préchargeurs de cache par cœur. Cependant, notre système traite toutes les demandes qui échouent dans le LLC comme des demandes de demande. Ainsi, les demandes de préchargement du cœur qui échouent dans le LLC contribuent également à l'entraînement du préchargeur de cache DRAM.
Complexe racine amélioré
Le mécanisme de cache et de préchargement DRAM est soutenu par des améliorations apportées au complexe racine. Cela inclut l'ajout d'un préchargeur et d'une file de préchargement, permettant le traitement simultané des demandes de demande et des demandes de préchargement envoyées à la FAM.
Notre préchargeur de cache DRAM est basé sur l'architecture SPP mais modifié pour fonctionner avec des blocs sub-page plus petits plutôt qu'avec des tailles de blocs de cache standard. Le préchargeur entraîne ses algorithmes en fonction des adresses physiques des échecs de LLC, générant des adresses préchargées correctement alignées.
Pour compléter un accès mémoire, les adresses physiques doivent être traduites en adresses FAM locales. Nous supposons que ce processus de traduction est géré par d'autres composants de la hiérarchie mémoire. Les besoins de stockage pour mettre en œuvre notre préchargeur sont d'environ 11 Ko.
La file de préchargement
En plus du préchargeur, une file de préchargement de longueur fixe a été ajoutée au complexe racine. Pour chaque échec de lecture dans le LLC visant la FAM, le préchargeur générera un nombre défini de demandes de préchargement, appelées le degré de préchargement. Chaque demande de préchargement a besoin d'espace dans la file de préchargement avant de pouvoir être envoyée à la FAM.
Les demandes qui sont actuellement en cours de traitement sont stockées dans cette file, ce qui facilite la vérification de l'appartenance d'une adresse de demande à un préchargement actif. La fonctionnalité de la file de préchargement est similaire à celle d'un registre de gestion des statuts d'échec (MSHR) utilisé dans les caches des processeurs. Lorsque la file est pleine, aucune nouvelle demande de préchargement ne peut être émise tant que des réponses aux demandes précédentes n'ont pas été reçues.
La file de préchargement peut contrôler efficacement le taux des demandes de préchargement émises en raison de sa longueur fixe. Bien que cette méthode statique puisse bien fonctionner pour certaines applications, elle peut conduire à un préchargement inefficace pour d'autres. Par conséquent, notre conception inclut également des mécanismes pour adapter les taux de préchargement au-delà de la simple dépendance à la file de préchargement.
Le cache DRAM
Le cache DRAM est géré par le matériel plutôt que par le système d'exploitation. L'OS joue un rôle uniquement pendant le processus de configuration, partitionnant la mémoire physique et désignant une plage pour une utilisation en tant que cache DRAM. Notre système gère le cache DRAM comme un cache associatif à ensembles, utilisant une politique de remplacement la moins récemment utilisée (LRU).
Étant donné que la FAM peut avoir un grand espace d'adresses comparé au cache DRAM, nous gérons les métadonnées pour le cache DRAM en hachant les adresses FAM dans un nombre limité de slots. Pour minimiser les collisions d'adresses, le nombre de slots peut dépasser le nombre de blocs FAM disponibles, ou d'autres techniques comme le hachage de type Cuckoo peuvent être envisagées.
Gestion des demandes de demande et de préchargement
Le flux des demandes de demande à travers le système implique une consultation avec le préchargeur pour vérifier si les blocs demandés sont déjà dans le cache DRAM. Si un bloc de données est présent, une demande avec l'adresse du bloc du cache DRAM est envoyée au contrôleur mémoire local. La demande d'origine va attendre que cette nouvelle demande retourne avec les données nécessaires.
Lorsque le bloc demandé n'est pas trouvé dans le cache DRAM, la demande d'origine passe directement à la FAM comme un accès habituel. Qu'il y ait un hit ou un miss dans le cache DRAM, le préchargeur génère des adresses de préchargement pour toutes les demandes de demande sortantes, vérifiant la file de préchargement et les métadonnées du cache DRAM pour éviter les demandes redondantes.
Une fois les demandes de préchargement émises, le préchargeur vérifie les métadonnées pour espace disponible dans le cache DRAM. Si de l'espace est disponible, le bloc préchargé entrant est envoyé directement dans le cache. Sinon, le préchargeur expulse le bloc le moins récemment utilisé pour faire de la place pour les nouvelles données.
Le contrôleur FAM
Le contrôleur FAM est responsable de la conversion des demandes entrantes utilisant le protocole CXL.mem en demandes DDR que la FAM peut gérer. Dans une mise en œuvre réelle, il pourrait avoir plusieurs ports supportant une gamme de lignes PCIe/CXL tout en gérant plusieurs canaux de mémoire DDR en arrière-plan.
Le contrôleur organise les demandes entrantes dans une file d'attente d'entrée et doit être conscient de la bande passante mémoire maximale disponible à travers ses canaux DDR. Il dirige les demandes provenant à la fois des sources de demande et de préchargement selon un système FIFO (premier entré, premier sorti).
Ce design permet au contrôleur FAM de gérer deux classes de demandes : les demandes de demande et les demandes de préchargement. Comme dans tout système, la façon dont ces demandes sont programmées peut impacter la performance globale.
Compromis dans les tailles de bloc
Pour analyser la relation entre les tailles de bloc et les latences, nous avons examiné plusieurs configurations. Il a été constaté que l'IPC restait relativement stable lorsque les tailles de bloc de cache DRAM augmentaient de 64 à 512 octets, avec de légères améliorations à 128 et 256 octets. Cependant, augmenter au-delà de 512 octets a conduit à une diminution de l'IPC en raison de l'augmentation des latences.
Par conséquent, des choix appropriés pour les tailles de bloc de cache DRAM sont fixés à 128, 256 et 512 octets. L'utilisation de valeurs qui sont des multiples de la taille de bloc de cache CPU (64 octets) aide à diminuer les délais liés à l'emballage des données au niveau du fabric, tout en minimisant également les frais généraux associés à la gestion des métadonnées.
Optimisation du préchargement
Notre objectif d'optimisation du préchargeur de cache DRAM vise à améliorer la façon dont les demandes de demande et de préchargement interagissent, maximisant l'efficacité des accès à la FAM. Les stratégies proposées incluent l'adoption d'une file d'attente équitable pondérée (WFQ) au niveau du nœud mémoire et l'adaptation de la bande passante de préchargement au niveau du nœud de calcul.
File d'attente équitable pondérée (WFQ)
La WFQ est appliquée comme méthode pour prioriser les demandes de demande par rapport aux demandes de préchargement au sein de la FAM. En allouant une tranche de bande passante plus élevée aux demandes de demande, la WFQ réduit les délais causés par les demandes de préchargement pendant les périodes de congestion.
L'implémentation de base pour le contrôleur FAM est améliorée par l'ajout de files séparées pour les demandes de demande et de préchargement. Cela permet à chaque type de demande d'être émis indépendamment. Le préchargeur étiquette les demandes, permettant au contrôleur de les placer dans la file respective.
En utilisant un ordonnanceur WFQ, les demandes des deux files sont traitées selon leurs poids. Pour chaque cycle, les demandes de demande sont prioritaires, mais les demandes de préchargement peuvent toujours être traitées si les demandes de demande ne sont pas disponibles.
Adaptation de la bande passante
Dans les préchargeurs traditionnels, un nombre fixe de demandes de préchargement sont générées pour chaque échec de LLC. S'il y a beaucoup de demandes de demande causant une saturation dans le dispositif FAM, l'envoi de demandes de préchargement supplémentaires peut augmenter les délais et nuire à la performance. Ainsi, le taux de demande de préchargement doit être ajusté en fonction de l'état actuel du système.
Notre approche utilise des compteurs pour recueillir des données sur l'état des demandes de demande. Nous surveillons les latences de ces demandes et réduisons le taux de préchargement lorsque les latences dépassent un certain seuil. Au fil du temps, nous pouvons ainsi ajuster le taux de préchargement pour optimiser la performance.
Configuration du système simulé
Pour évaluer l'efficacité du préchargeur de cache DRAM et des optimisations associées, nous avons réalisé des simulations à travers divers workloads de benchmark. Nous avons utilisé des outils qui simulent à la fois des nœuds de calcul et des dispositifs mémoire, tout en imitant comment le système d'exploitation alloue la mémoire.
Nous avons évalué un ensemble diversifié de charges de travail intensives en mémoire, adoptant une configuration réduite pour des vitesses de simulation pratiques. La configuration a permis d'analyser à la fois des systèmes à nœud unique et multiple, en examinant comment divers mélanges de workloads se disputent la bande passante.
Métriques de performance
Pour analyser et comparer les résultats de différentes configurations, nous avons défini plusieurs métriques :
- Gain IPC : Le rapport de l'IPC pour une configuration de workload comparée à une configuration de workload de référence. Des ratios plus élevés indiquent une meilleure performance.
- Latence FAM relative : Le rapport de la latence d'accès moyenne FAM pour une configuration de workload spécifique comparée à la référence. Des ratios plus bas indiquent une meilleure performance.
- Demandes de préchargement DRAM relatives émises : Le rapport des demandes de préchargement pour une configuration donnée comparée aux demandes émises sans optimisations.
- Fraction de hits de demande : La portion de demandes de demande qui échouent dans le LLC mais qui réussissent dans le cache DRAM.
Résultats de performance avec adaptation de bande passante
Dans notre analyse, nous avons exécuté diverses charges de travail sur plusieurs nœuds tout en comparant les performances des configurations de préchargement adaptatif contre des configurations traditionnelles. Les résultats ont indiqué que l'introduction du préchargeur de cache DRAM et de l'adaptation de bande passante a amélioré l'IPC dans l'ensemble, particulièrement dans les configurations multi-nœuds.
Gains de performance en IPC
L'introduction du préchargement DRAM a systématiquement conduit à des améliorations de performance à travers tous les benchmarks comparé à l'utilisation uniquement du préchargement de cœur. Notamment, à mesure que nous ajoutions des mécanismes de préchargement adaptatifs, nous observions encore plus d'améliorations de l'IPC. Par exemple, dans une configuration à deux nœuds, le gain IPC a augmenté d'environ 4 %, et dans une configuration à quatre nœuds, il était de 8 %.
Impact sur la latence d'accès FAM
La réduction globale de la latence d'accès moyenne à la FAM a contribué de manière significative à ces améliorations de performance. En utilisant le préchargement de cache DRAM, cette latence a chuté d'environ 29 % et 34 % dans les configurations à deux nœuds et à quatre nœuds respectivement.
Examen de l'effet de la WFQ
Nous avons également évalué l'impact de l'algorithme d'ordonnancement WFQ sur la performance. Les tests ont montré que la WFQ améliorait l'IPC par rapport à un ordonnancement FIFO simple à travers diverses configurations de nœuds. Les résultats ont indiqué qu'avec des poids assignés aux demandes de demande par rapport aux demandes de préchargement, le débit global du système s'est amélioré grâce à la réduction des latences d'accès FAM.
Résultats à travers différents workloads de benchmark
Différents benchmarks ont montré des niveaux de sensibilité variés aux ajustements effectués par les deux approches (adaptation de bande passante et WFQ). Certains workloads ont bénéficié considérablement de la WFQ tandis que d'autres ont vu des améliorations modestes.
Analyse de performance multi-nœuds
En examinant la performance cumulative de diverses configurations à travers sept mélanges de workloads multi-nœuds distincts, les deux stratégies de préchargement adaptatif ont montré leur potentiel pour améliorer l'IPC. Néanmoins, les gains spécifiques ont été influencés par à la fois les types de workloads et leurs interactions.
Allocation des ratios de mémoire
Lorsque nous avons analysé l'impact de divers ratios d'allocation de mémoire sur la performance, il est devenu évident que l'efficacité du préchargement de cœur diminuait à mesure que l'utilisation des ressources FAM augmentait. Cependant, les approches adaptatives ont aidé à combler les lacunes de performance causées par les configurations de mémoire agrégée.
Conclusion
Cet article présente une stratégie de préchargement qui met en cache de petits blocs de données à partir de la mémoire attachée au fabric dans la DRAM locale pour réduire la latence d'accès. La mise en œuvre de mécanismes adaptatifs maximise encore l'utilité et la performance au sein de la hiérarchie mémoire dans les systèmes informatiques modernes. Nos résultats démontrent l'efficacité de ces approches, soulignant leur potentiel à résoudre des défis liés à la mémoire dans des workloads de plus en plus complexes. Dans l'ensemble, les techniques de préchargement adaptatif et de gestion de files d'attente mises en avant dans ce travail offrent des solutions précieuses pour améliorer la performance des systèmes dans des contextes de mémoire partagée.
Titre: Exploring DRAM Cache Prefetching for Pooled Memory
Résumé: 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%.
Auteurs: Chandrahas Tirumalasetty, Narasimha Annapreddy
Dernière mise à jour: 2024-06-20 00:00:00
Langue: English
Source URL: https://arxiv.org/abs/2406.14778
Source PDF: https://arxiv.org/pdf/2406.14778
Licence: https://creativecommons.org/licenses/by/4.0/
Changements: Ce résumé a été créé avec l'aide de l'IA et peut contenir des inexactitudes. Pour obtenir des informations précises, veuillez vous référer aux documents sources originaux dont les liens figurent ici.
Merci à arxiv pour l'utilisation de son interopérabilité en libre accès.