Le cache est le roi des performances: les processeurs ont-ils besoin d'un quatrième niveau de mise en cache



L'écart entre la vitesse des processeurs au sens général et la vitesse de la DRAM principale, également au sens général, a été un problème au cours des 30 dernières années - au cours de cette période, l'écart a commencé à se creuser vraiment. Et il vaut la peine de dire honnêtement que les ingénieurs qui ont développé à la fois l'équipement et les programmes qui ont créé la hiérarchie de cache et les logiciels qui pourraient en tirer parti ont tout simplement brillamment. C'est l'une des architectures les plus difficiles jamais conçues par l'homme.

Cependant, maintenant que nous sommes au bord d'une hiérarchie de mémoire en constante expansion, lorsque la mémoire non volatile comme Optane 3D XPoint (une variante de mémoire avec changement de phase) aux formats DIMM et SSD commence à apparaître, ainsi que de nouveaux protocoles (CXL, OpenCAPI, CCIX, NVLink et Gen-Z), la question se pose: est-il temps d'ajouter un cache de quatrième niveau aux serveurs? Étant donné que le travail d'un tel nombre de périphériques dépend du complexe CPU - dont certains sont plus proches, tandis que d'autres sont plus éloignés - il est logique de se demander si nous avons besoin d'un autre niveau de cache qui masque les retards de ces autres types de mémoire et augmente le débit de l'ensemble du système.

Pour introduire les opportunités, nous avons fouillé dans notre propre mémoire, et en même temps, nous avons discuté avec des développeurs d'architecture de puce d'IBM, Intel, AMD et Marvell pour comprendre ce qu'ils pensent de l'utilisation du cache L4 dans les serveurs. Le cache L4, bien sûr, n'est pas un nouveau mot dans la vitesse, mais il n'est pas si courant dans les architectures système.

Cependant, avant de revenir sur l'histoire du problème.

L'ajout d'un cache de premier niveau aux processeurs qui n'avaient qu'un seul cœur à l'époque était un compromis dans les années 1980 qui ajoutait de la latence aux sous-systèmes de mémoire tout en réduisant la latence moyenne des demandes de données et des instructions des processeurs. Les caches L1 étaient à l'origine situés dans la mémoire SRAM externe située sur les cartes mères et connectées au complexe mémoire CPU. Un tel cache L1 était très proche du processeur, à la fois en termes de fréquence d'horloge et en termes d'espace physique sur la carte, et a permis d'augmenter la charge CPU. Ensuite, ces caches ont été divisés afin que les données fréquemment utilisées puissent être stockées dans un bloc et les instructions populaires dans le second, ce qui a légèrement augmenté les performances. À un moment donné de l'augmentation de la vitesse d'horloge du processeur et de l'écart correspondant dans la vitesse du CPU et de la DRAM, des caches L2 plus gros, mais aussi plus lents ont été ajoutés (mais moins chers en termes de bande passante), encore une fois au début, ils étaient en dehors du boîtier du CPU, mais puis intégré en elle. Et lorsque de plus en plus de cœurs ont commencé à être ajoutés au CPU, ainsi que de plus en plus de contrôleurs DRAM pour les charger, des blocs de cache L3 encore plus grands ont été ajoutés à la hiérarchie.

Pour la plupart, un tel système fonctionnait assez bien. Dans certains circuits CPU, nous voyons même certaines règles pratiques qui reflètent les niveaux de la hiérarchie de cache, ce qui nous permettra d'estimer les possibilités associées au quatrième niveau.

Chris Gianos, ingénieur en puces et architecte chez Intel qui a dirigé le développement de nombreuses générations de processeurs Xeon, explique ceci: «Avec chaque niveau de cache, nous devons généralement nous développer suffisamment fort par rapport au niveau précédent pour que tout cela en vaille la peine, car pour obtenir une augmentation notable des performances du système, vous devez atteindre une fréquence plutôt intéressante d'appels réussis. Si vous «tombez dans» des données mises en cache dans seulement quelques pour cent des cas, il sera difficile de le remarquer. Tout le reste ralentit votre vitesse, et cette augmentation sera imperceptible. Par conséquent, des caches relativement volumineux sont nécessaires, et lorsqu'il s'agit de niveaux plus élevés, des caches vraiment énormes sont nécessaires. Aujourd'hui, L2 est mesurée en mégaoctets, L3 est mesurée en dizaines ou centaines de mégaoctets. Il est donc clair que si vous commencez à penser au cache L4, alors nous parlerons de centaines de mégaoctets, sinon de gigaoctets. Et une telle taille entraînera certainement leur coût élevé. Il faut que certaines conditions existent, pour que cette option devienne intéressante, et ce ne sera certainement pas bon marché. »

Les ingénieurs d'AMD que nous avons interrogés souhaitaient rester anonymes car ils ne voulaient pas donner l'impression que la société allait ajouter le cache L4 à la gamme de processeurs Epyc - et, pour être précis, AMD n'a rien promis de tel. Cependant, la société admet toujours que c'est la prochaine étape évidente à considérer et, tout comme Intel, elle pense que tous les ingénieurs envisagent d'implémenter le cache L4. En substance, AMD dit que les compromis associés aux niveaux de cache et aux latences ont été largement étudiés à la fois dans l'industrie et dans le monde universitaire, et qu'avec chaque nouveau niveau qui est plus grand et plus lent que le précédent, il existe un compromis pour augmenter le chemin global vers la DRAM. Cela est également indiqué par Intel Gianos, parlant de la nécessité de trouver un équilibre entre les demandes de cache réussies et son volume.

IBM, bien sûr, a ajouté le cache L4 à certains de ses chipsets X86 dans les années 2000, et dans les années 2010 a ajouté L4 aux chipsets NUMA ( accès mémoire inégal ) sur les mainframes System z11. Le processeur z11 possède quatre cœurs, 64 Ko de cache L1 pour les instructions et 128 Ko de cache L1 pour les données, plus 1,5 Mo de cache L2 pour chaque cœur et 24 Mo de cache partagé L3 pour tous les cœurs. Le chipset NUMA pour z10 avait deux banques de cache L4 de 96 Mo, soit 192 Mo au total. En publiant z12, IBM a réduit la taille du cache L1 à 98 Ko par cœur, mais a augmenté le cache L2 à 2 Mo par cœur, en le divisant en deux parties, pour les instructions et les données, comme dans le cas de L1. Elle a également doublé la taille du cache L3 à 48 Mo pour six cœurs, et la taille du cache L4 a été augmentée à 384 Mo pour une paire de puces dans le chipset. Au fur et à mesure que les générations de processeurs System z changent, les tailles de cache ont augmenté et pour les processeurs z15 annoncés en septembre, une paire de caches L1 pèsera 128 Ko chacun, une paire de caches L2 pèsera 4 Mo chacun, et un cache L3 partagé pour 256 cœurs aura une capacité de 256 Mo. Le cache L4 dans chaque baie de l'ordinateur central est de 960 Mo et son volume total pour l'ensemble du système, composé de cinq baies, est de 4,68 Go.

Comme nous l'avons souligné précédemment , les processeurs Power8 et Power9 ont une mémoire tampon et IBM a ajouté 16 Mo de cache L4 à chaque tampon Centaur, soit 128 Mo de cache L4 par socket pour 32 emplacements de mémoire. Les machines Power9 les moins chères n'ont pas de mémoire tampon, et donc pas de cache L4. Les architectes qui ont développé le circuit Power10 étaient occupés à développer le circuit pour Power11, et n'ont donc pas pu répondre à nos questions, mais William Stark, qui a géré le développement de Power10, a trouvé un peu de temps pour nous et a remarqué ce qui suit:

«En général, nous sommes arrivés à la conclusion que les caches de haut niveau du dernier niveau sont utiles pour augmenter la vitesse des systèmes industriels», nous a expliqué Stark par e-mail. "La latence élevée associée à la mémoire non volatile, en particulier à la mémoire à état de phase, génère une demande de cache - éventuellement pour un cache de type L4 - dans la hiérarchie de la mémoire de stockage."

C'est exactement ce que nous pensions. Et d'ailleurs, nous ne prétendons pas que le cache L4 sera nécessairement à proximité de la mémoire tampon du futur DIMM DDR5. Il est peut-être préférable de le placer entre le PCI-Express et le cache du processeur L3, et encore mieux, dans les tampons de mémoire et entre le PCI-Express et le cache du processeur L3. Il devra peut-être être placé au-dessus du contrôleur d'E / S et de la mémoire dans la future architecture de serveur, qui est un peu comme la technologie Foveros d'Intel .

Il est possible d'envisager cela d'un point de vue différent - par exemple, IBM a eu l'occasion de modifier la taille du cristal, et les ingénieurs ont décidé d'ajouter le cache L4 au bus System z NUMA ou à la puce de mémoire tampon Power8 et Power9, non pas pour lui-même, mais simplement parce que ils avaient encore la possibilité d'ajouter des transistors après que toutes les fonctions nécessaires aient été mises en œuvre. Parfois, il nous semble que le nombre de cœurs dans les processeurs Intel X86 dépend de la taille du cache L3 qu'ils peuvent se permettre. Il semble parfois qu'Intel attribue la taille maximale du cache L3 à un cristal, puis que les cristaux Xeon de trois tailles différentes soient simplement fabriqués selon ces spécifications - dans les dernières générations, ils ont 10, 18 ou 28 cœurs sur un processus de fabrication de 14 nm.

Tous ces problèmes sont, bien sûr, purement académiques, mais ils nous donnent la motivation potentielle pour IBM et d'autres fabricants de chipsets d'ajouter le cache L4. Non seulement cela peut aider dans certains cas, c'est juste une chose assez évidente. Nous pensons que sur un monstre d'E / S tel que le mainframe System z, le cache L4 est à sa place sans aucune question et profite à tous les clients en augmentant le débit de ces machines et en leur permettant de travailler à 98-99% de charge de processeur, car combien de cœurs , et l'échelle de NUMA dans les ordinateurs centraux a beaucoup augmenté ces derniers temps.

Il n'y a aucune raison de faire le cache L4 exclusivement sur la DRAM intégrée (comme IBM le fait avec ses puces) ou sur la base d'une SRAM beaucoup plus chère - c'est ce que Rabin Sugumar, architecte de puces de Cray Research, Sun Microsystems, Oracle, Broadcom nous rappelle , Cavium et Marvell:

«Nos caches L3 sont déjà suffisamment gros», explique Sugumar. - Donc L4 dans le cas où vous êtes intéressé doit être fait en utilisant une technologie différente. Peut-être eDRAM ou même HBM ou DRAM. Dans ce contexte, une implémentation du cache L4 basé sur HBM ressemble à une option intéressante, et ce cache ne résout pas tant le problème de latence que la bande passante. Étant donné que la capacité HBM est limitée et la bande passante est grande, nous pouvons obtenir une certaine augmentation de la vitesse - et dans certains cas spéciaux, nous voyons vraiment une augmentation significative de la bande passante. " Sugumar ajoute que pour un nombre assez important d'applications, un nombre relativement important de ratés de cache est observé. Cependant, vous devez calculer si l'ajout du prochain niveau de cache en vaudra la peine.

Un autre cas d'utilisation possible pour quelque chose comme le cache L4, dit Sugumar, est d'utiliser la DRAM locale comme cache. «Nous ne menons pas de telles études en laboratoire, mais supposons que nous ayons une interface à large bande passante sur la puce, connectée à une mémoire partagée quelque part à l'autre extrémité de la boucle, à une distance de 500 ns à 1 μs. Ensuite, l'un des cas d'utilisation sera de créer un cache qui déplace ces données de la mémoire partagée vers la DRAM locale. Vous pouvez imaginer le travail de la machine d'état gérant cette mémoire, donc la plupart du temps les appels iront à la DRAM locale, et vous pouvez minimiser le nombre d'appels à la DRAM distribuée générale. "

Cette option nous semble un type de NUMA très intéressant. Soit dit en passant, Sugumar travaillait sur la mémoire distribuée pour les systèmes parallèles à grande vitesse dans Sun Microsystems avant même l'apparition de la mémoire non volatile. Et l'un des problèmes avec ces différentes variantes de la hiérarchie de la mémoire était que si l'une d'entre elles était perdue en raison d'une panne de réseau ou de bus, alors la machine entière planterait. «Sur les systèmes de mémoire distribuée, les pannes de réseau doivent être traitées avec plus d'élégance, ce qui pose de nombreux problèmes de conception.»

Un autre point est que nous voulons que tout cache de haut niveau, pas même L4, soit réalisé au maximum avec l'aide de fer et avec le minimum avec l'aide d'un logiciel. Les noyaux du système d'exploitation et les autres logiciels ont toujours besoin de temps pour rattraper le matériel, qu'il s'agisse d'ajouter de nouveaux noyaux, ou des caches L3 ou L4, ou de la mémoire non volatile adressable.

«À un moment donné, un niveau de cache supplémentaire deviendra inévitable», explique Gianos. - Nous avons obtenu le premier niveau de cache, et à un moment donné, le second est apparu. Et puis nous avons finalement ajouté un troisième. Et un jour, nous en aurons un quatrième. La seule question est de savoir quand et pourquoi. Et il me semble que vos observations concernant les capacités de ce cache sont assez intéressantes. Mais Intel n'a pas encore décidé quand ni pourquoi ces choses seront rendues publiques. D'autres entreprises étudient également cette question; il serait insensé de ne pas l'examiner. Tôt ou tard, cela se produira, mais ce sera bientôt, ou pas très - ce n'est pas encore clair. "

Source: https://habr.com/ru/post/fr485374/


All Articles