FR 3066842 A1 20181130 FR 1770532 A 20170524 B16077FR 1 LOGIQUE DE CORRECTION DE ROW HAMMER POUR DRAM AVEC PROCESSEUR INTEGRE Domaine de l'invention La présente description concerne le domaine des circuits DRAM (dynamic random access 5 memory) avec processeurs intégrés. Exposé de l'art antérieur L'effet Row Hammer (« martelage de rang ») est le fait que, à l'intérieur d'un banc (« bank ») mémoire DRAM donné, activer de manière répétée un rang (« row ») DRAM donné puisse causer aux rangs physiquement adjacents l'inversion de la valeur de certains 10 de leurs bits. Le rang qui est trop activé sera appelé « rang agresseur » et ses deux rangs adjacents seront appelés « rangs victimes ». En particulier, l'activation d'un rang mémoire à l'intérieur d'un banc DRAM implique d'avoir ce banc dans un état préchargé, cet état ayant été préalablement atteint à travers une commande de pré-chargement, puis en jouant une commande d'activation. Une fois 15 activé, le rang peut être accédé pour les besoins d'une opération de lecture ou d'écriture. Si on compte les activations qui visent un rang donné, alors quand ce comptage atteint une certaine valeur, le rang devient un agresseur et les 2 rangs adjacents deviennent ses victimes. La solution à ce problème consiste à détecter qu'un rang est sur le point de devenir un 20 agresseur, et, avant que ce ne soit le cas, à rafraîchir les deux rangs adjacents (ses victimes potentielles), de tels rafraîchissements étant appelés dans ce document des « rafraîchissements préventifs ». Ce faisant, et du point de vue de l'effet Row Hammer, rafraîchir deux rangs adjacents « réinitialise » le nombre d'activations de l'agresseur potentiel. 25 Indépendamment du problème de Row Hammer, la mémoire DRAM nécessite d'être rafraîchie de toutes les manières. La spécification DDR4 indique que tous les rangs d'un banc DDR4 doivent être rafraichis toutes les 64 ms, les rafraîchissements correspondants étant appelés « rafraîchissements périodiques ». 3066842 B 16077FR 2 Par conséquent, le problème du Row Hammer ne peut arriver que si, à l'intérieur d'une fenêtre temporelle de 64 ms, un rang donné est activé suffisamment de fois pour devenir un agresseur. Les études sur le phénomène du Row Hammer montrent que l'agression d'un rang victime est le résultat de la somme des agressions des deux rangs adjacents. Par exemple, s'il faut 250000 activations pour qu'un rang devienne un agresseur, la logique de mitigation du Row Hammer devrait considérer 125000 activations comme valeur de déclenchement, puisque deux agresseurs peuvent « coopérer » pour agresser un même rang victime. Pour résumer, une valeur de déclenchement du Row Hammer intrinsèque, qui prend en compte les pires cas possibles, comme la co-agression, est maintenant un paramètre additionnel qui fait partie de la description de tout procédé DRAM récent. Si, à l'intérieur d'une fenêtre de rafraîchissement, le nombre d'activations d'un rang donné est sur le point d'atteindre cette valeur de déclenchement du Row Hammer 15 intrinsèque, alors les deux rangs adjacents doivent être préventivement rafraîchis. Le brevet décrit une solution pour mitiger l'effet Row Hammer, mais il a les inconvénients suivants : - La méthode ne convient pas pour la mémoire DRAM intégrant un processeur, - La méthode complètement détaillée (et aucune autre méthode ne peut être 20 directement inférée de ce texte,) ne permet pas de détecter des conditions du Row Hammer dans des scénarios relativement simples, quand les paramètres sont calculés tels qu'expliqué par cette méthode précise, - La méthode détaillée nécessite complètement, pour chaque commande d'activation, le classement des entrées d'une table, avec quelques dizaines 25 d'entrées. Un tel classement constitue un processus consommateur de temps qu'il serait difficile de réaliser en moins de 45 ns, le temps minimal séparant deux activations de rang à l'intérieur d'un même banc DDR4. L'un des objectifs de réalisation de la présente description est de remédier au moins partiellement à l'une ou plusieurs de ces limitations. 30 ne convient pas pour une DRAM intégrant un processeur 3066842 B16077FR 3 La soumission du brevet publié sous WO 2017/055732 expose comment il est faisable d'avoir un processeur intégré à l'intérieur d'une puce DRAM compatible DDR4. Le brevet n'est pas adapté à une DRAM avec un processeur interne, puisque le contrôleur de mémoire externe ne connaît pas les activations générées 5 par le processeur interne de la DRAM, alors que la possibilité pour qu'un rang donné devienne un agresseur résulte de la somme : - des activations générées par le contrôleur de mémoire externe visant ce rang donné, - et des activations générées par le processeur interne de la mémoire DRAM visant 10 ce rang donné. ne fonctionne pas dans certains scenarios simples La valeur de déclenchement intrinsèque considérée est 125000 activations de rang, et tous les paramètres significatifs sont calculés suivant la méthode exposée dans La fenêtre temporelle N commence au temps T. La rangée 20000 est rafraîchie entre T+16 ms et T+32 ms. Entre les temps T+32 ms et T+64 ms, le rang 20000 est activé 120000 fois, soit moins que la valeur de déclenchement intrinsèque 125000, donc aucun rafraîchissement préventif n'est initié pour ses rangs voisins. Suivant la fenêtre temporelle N, la nouvelle fenêtre temporelle N+1 commence à T+64 ms, et la table de logique de détection est initialisée, puisque initialisée au commencement de chaque fenêtre temporelle (comme expliqué dans ), cette initialisation conduisant en particulier à la mise à zéro du compteur d'activations associé au rang 20000. Entre les temps T+64 ms et T+80 ms, le rang 20000 n'est pas encore rafraîchi (il sera rafraîchi entre 64+16 ms et 64+32 ms), et le rang 20000 est activé 10000 fois de plus, donc : Le rang 20 000 a été activé plus de 125 000 fois (130 000 fois) sur une période de temps inférieure à 64 ms (de T+32 ms à T+80 ms) et pourtant, le besoin de rafraîchissements 3066842 B16077FR 4 préventifs pour ses deux voisins n'a pas été découvert par la logique proposée par ne convient pas à l'intégration à une DRAM Un contrôleur DRAM externe fera typiquement partie d'un ASIC fabriqué sur un 5 processus adapté pour créer de la logique rapide, un tel processus étant appelé processus logique (« logic process »). Les DRAM sont fabriqués avec des processus spécialisés, permettant aux condensateurs utilisés pour les cellules mémoire d'être construits, et la logique construite en utilisant de tels processus est bien plus lente que si elle l'était en utilisant un processus logique. 10 Par conséquent, un algorithme implémenté dans une DRAM sera typiquement bien plus lent que le même algorithme implémenté dans un ASIC. La seule méthode expliquée dans ... nécessite le tri d'une table de comptages d'activations de rang (il n'y a nulle part d'explication pratique expliquant comment se débarrasser du tri de la table). 15 Trier est une procédure coûteuse, qui peut être suffisamment rapide si elle est implémentée sur un processus logique, mais elle n'est probablement pas assez rapide quand elle est implémentée sur un processus DRAM, en particulier en considérant que l'ensemble de l'algorithme doit être exécuté en moins de 45 ns, le temps minimum séparant deux commandes d'activations visant un même banc. 20 Résumé L'une des concrétisations de la description présentée est de solutionner au moins partiellement l'un ou plus des problèmes de l'art antérieur. Selon un des aspects, il est fourni un dispositif mémoire comprenant un ou plusieurs bancs, chaque banc comprenant une pluralité de rangs mémoire, le dispositif mémoire 25 comprenant par ailleurs : un port d'accès externe configuré pour permettre à un contrôleur mémoire externe d'activer, puis d'accéder aux rangs mémoire de chaque banc ; un ou plusieurs processeurs internes capables d'activer, puis d'accéder aux rangs mémoire de chaque banc ; une logique de détection de déclenchement du Row Hammer configurée pour surveiller, pour chaque banc, les commandes de activations provenant d'une part du contrôleur mémoire externe et d'autre part d'un ou plusieurs processeurs internes, la 3066842 B 16077FR 5 logique de détection de déclenchement comprenant du stockage mémoire : une ou plusieurs tables indiquant, pour chaque rang d'un sous-ensemble de rangs de chaque banc, une valeur de comptage basée sur le nombre de commandes d'activations visant le rang, où le sous-ensemble de rangs associé à la valeur de comptage dans une ou plusieurs 5 tables est variable dynamiquement, pour indiquer les rangs les plus fréquemment activés, basé sur la détection des commandes d'activations visant chaque rang de chaque banc ; une valeur de comptage supplémentaire indiquant le nombre maximum de commandes d'activations qui auraient pu viser l'un des rangs ne faisant pas partie à ce moment du dit sous-ensemble de rangs ; et dans lequel la logique de détection du déclenchement du Row 10 Hammer est configurée pour comparer chacune des dites valeurs de comptage avec un niveau de seuil afin d'identifier un ou plusieurs rangs dans le sous-ensemble de rangs, et de déclencher une opération de rafraîchissement de l'un ou plusieurs des rangs adjacents à chaque rang identifié. Suivant l'un des modes de réalisation, une ou plusieurs tables comprennent une entrée 15 associée à chaque rang du sous-ensemble de rang, chaque entrée comprenant ladite valeur de comptage, dans laquelle le nombre d'entrées dans la ou lesdites tables supplémentaires est inférieure à un centième du nombre de rang dans chaque banc. Suivant l'un des modes de réalisation, le dispositif mémoire comprend par ailleurs une logique d'envoi de rafraîchissement préventif pour un ou plusieurs rangs adjacents de 20 chaque rang identifié en émettant des requêtes de rafraîchissement à la place des requêtes de rafraîchissement périodiques générées par le contrôleur de mémoire expert, retardant de ce fait une ou plusieurs desdites requêtes de rafraîchissement périodiques. Selon l'un des modes de réalisation, la quantité de temps de laquelle les requêtes de rafraîchissement périodiques sont retardés n'excède pas une quantité maximum qui 25 permette à chaque banc mémoire de retenir correctement ces données au fil du temps. Selon l'un des modes de réalisation, la logique d'envoi de rafraîchissement préventif comprend une mémoire mémorisant une indication sur le rang, ou les rangs adjacents de chacun des rangs identifiés comme devant être rafraîchis. Selon l'un des modes de réalisation, un protocole externe utilisé par le contrôleur de 30 mémoire externe permet au dispositif mémoire de prendre l'initiative de générer des rafraîchissements. 3066842 B 16077FR 6 Selon l'un des modes de réalisation, la logique de détection de déclenchement du Row Hammer est configurée, après chaque commande d'activation provenant du contrôleur externe mémoire ou de l'un des processeurs internes : pour modifier la valeur de comptage associée au rang visé par la commande d'activation si le rang visé appartient 5 au sous-ensemble de rangs ; ou pour remplacer une entrée dans une ou plusieurs des tables par une entrée correspondant au rang visé par la commande d'activation si la valeur de comptage de cette entrée est égale à la valeur de comptage supplémentaire; ou pour modifier la valeur de comptage supplémentaire si le rang visé n'appartient pas à l'un des sous-ensembles de rangs et qu'aucune des valeurs de comptage dans l'une ou plusieurs 10 des tables n'est égale à la valeur de comptage supplémentaire. Selon un aspect supplémentaire, il est fourni une méthode pour protéger un dispositif mémoire de l'effet Row Hammer, le dispositif mémoire comprenant un ou plusieurs bancs, chacun des bancs comprenant plusieurs rangs mémoire, la méthode comprenant : surveiller, par de la logique de détection de déclenchement du Row Hammer et pour 15 chaque banc, les commandes d'activation de rang générée par d'une part un contrôleur externe mémoire et d'autre part un ou plusieurs processeurs internes ; mémoriser, par de la logique de détection de déclenchement du Row Hammer, une ou plusieurs tables indiquant, pour chaque rang d'un sous-ensemble de rangs de chaque banc, une valeur de comptage basée sur le nombre de commandes d'activation visant le rang, dans lequel le 20 sous-ensemble de rangs associé à la valeur de comptage dans une ou plusieurs tables est dynamiquement variable pour indiquer les rangs les plus fréquemment activés basée sur une détection des commandes d'activation visant chaque rang de chaque banc ; mémoriser, par une logique de détection de déclenchement du Row Hammer, une valeur de comptage supplémentaire indiquant le nombre maximum de commandes d'activation 25 qui pourrait avoir visé n'importe lequel des rangs ne faisant pas à ce moment partie dudit sous-ensemble de rangs ; comparer, par une logique de détection de déclenchement du Row Hammer, chacune des valeurs de comptage avec un niveau de seuil afin d'identifier un ou plusieurs rangs dans une ou plusieurs tables ; et déclencher, par une logique de détection de déclenchement, une opération de rafraîchissement de l'un ou plusieurs rangs 30 adjacents à chacun des rangs identifiés. Selon l'un des modes de réalisation, la méthode comprend aussi l'implémentation, par une logique d'envoi de rafraîchissement préventif, une opération de rafraîchissement pour un ou plusieurs rangs adjacents à chacun des rangs identifiés en émettant des requêtes de rafraîchissement à la place des requêtes de rafraîchissement périodiques générées par le 3066842 B 16077FR 7 contrôleur externe mémoire, retardant par là une ou plusieurs desdites requêtes de rafraîchissement périodique. Selon l'un des modes de réalisation, la méthode comprend aussi : après chaque commande d'activation émise par le contrôleur mémoire externe ou par un des 5 processeurs internes : modifier la valeur de comptage associée avec le rang visé par la commande d'activation si le rang visé appartient au sous-ensemble de rangs ; et remplacer une entrée dans une ou plusieurs tables par une entrée correspondant au rang visé par la commande d'activation si la valeur de comptage de cette entrée est égale à la valeur de comptage supplémentaire ; et modifier la valeur de comptage supplémentaire si le rang 10 visé n'appartient pas ou sous-ensemble de rangs et aucune des valeurs de comptage dans une ou plusieurs tables m'est égale à la valeur de comptage supplémentaire. Brève description des dessins Les avantages et les caractéristiques précédentes et autres vont apparaître à partir de la description détaillée suivante des modes de réalisation, fourni à titre d'exemple non 15 limitatif, avec références au dessin associé, dans lequel : La figure 1 illustre schématiquement une partie d'un système de calcul (« computing system ») comprenant un dispositif mémoire qui intègre des processeurs selon un exemple de mode de réalisation. Principes d'opération des modes de réalisation de la présente invention 20 Pour chaque banc de la DRAM, les modes de réalisation décrits ci-après par exemple comprennent deux blocs : - Une unité de détection de déclenchement, et - Une unité d'envoi de rafraîchissement où l'unité de détection de déclenchement nourrit l'unité d'envoi de rafraîchissement. 25 A chaque commande d'activation concernant le banc, l'unité de détection de déclenchement, détaillée ci-après, indique si le rang visé par cette commande d'activation a potentiellement atteint la valeur de déclenchement. Le terme « potentiellement » reflète le fait que des faux positifs sont possibles, mais sans conséquence puisque suffisamment peu fréquents, comme montré ci-après. 3066842 B 16077FR 8 L'unité d'envoi de rafraîchissement comprend par exemple une FIFO, appelée ici la FIFO de rafraîchissement préventif, et quand une commande d'activation, visant un rang donné, est marquée comme ayant atteint sa valeur de comptage de déclenchement, alors les deux index des deux rangs voisins de ce rang donné sont calculés puis poussés dans cette FIFO. 5 Quand la FIFO de rafraîchissement préventif n'est pas vide, les rafraîchissements préventifs devront être émis, mais le banc DRAM de pourra par initier ces rafraîchissements préventifs de sa propre initiative : - Du point de vue du protocole, la puce mémoire DRAM est un esclave du contrôleur externe mémoire DRAM, et avoir un banc d'une puce DRAM capable 10 d'effectuer des rafraîchissements de sa propre initiative romprait le protocole entièrement. Le contrôleur externe mémoire qui est connecté à la DRAM génère régulièrement des requêtes de rafraîchissement périodique. Un rafraîchissement périodique ne spécifie pas l'index du rang à rafraîchir : cet index étant généré par une logique DRAM interne 15 appelée logique de compteur de rafraîchissement (puisque c'est généralement juste un compteur). Donc dans les modes de réalisation de cette présente invention, chaque banc a sa propre logique de compteur de rafraîchissement et chaque fois qu'un banc DRAM reçoit une requête de rafraîchissement périodique générée par le contrôleur externe DRAM alors : 20 - si la FIFO de rafraîchissement préventif pour ce banc n'est pas vide alors l'index du rang à rafraîchir n' est pas fourni par le compteur de rafraîchissement, mais est sorti du FIFO de rafraîchissement préventif, le compteur de rafraîchissement de ce banc restant inchangé. - si la FIFO de rafraîchissement préventif est vide alors l'index du rang à rafraîchir 25 est fourni par le compteur de rafraîchissement de ce banc, celui-ci étant mis à jour. Puisque l'exécution des rafraîchissements préventifs est rythmée par les rafraîchissements périodiques, la valeur de déclenchement doit être réduite du nombre d'activations qui peuvent être faites durant le délai pire-cas entre la découverte qu'un rafraîchissement périodique est nécessaire et son exécution effective, ce délai pire-cas 30 résultant : 3066842 B 16077FR 9 - du fait que plusieurs rafraîchissements préventifs ont pu être accumulés dans la FIFO, ceci étant facilité par le fait que les rafraîchissements préventifs sont générés par paires - du besoin d'attendre pour la réalisation effective de chaque rafraîchissement 5 préventif en attente, une requête de rafraîchissement périodique. En ignorant la latence intrinsèque de la logique, le délai pire-cas est à peu près Max Triggered x 2 x Max Timed Refresh Period, où : - Max Triggered est le nombre de rangs d'un banc qui peuvent être activés suffisamment de fois pour atteindre la valeur de déclenchement dans une fenêtre 10 temporelle de 64 ms, - Max Timed Refresh Period est le temps maximum entre deux requêtes de rafraîchissement périodique. Extension de la fenêtre de rafraîchissement L'exécution effective des rafraîchissements préventifs retarde les rafraîchissements 15 périodiques, mais le délai maximum est suffisamment petit pour être sans conséquence : Un banc DRAM typique ayant 65536 rangs, le contrôleur de mémoire externe génère en moyenne, pour un banc, un rafraîchissement périodique tous les 976 ns (64 ms / 65536). Typiquement une commande d'activation peut être émise toutes les 45 ns vers un banc donné, ce qui signifie que pour une fenêtre temporelle de 64 ms, moins de 1423000 20 commandes d'activation peuvent viser un même banc, ce nombre étant appelé Max activate in window. Considérant une valeur intrinsèque de Row Hammer de 125000, cela signifie que dans une fenêtre de 64 ms, il peut y avoir un maximum de 11 agresseurs dans un banc DRAM donné. 25 Considérant l'exemple précédent, dans le pire cas, au lieu de rafraîchir 65536 rangs en 64 ms, alors 65536+(11x2) rangs peuvent être rafraîchis, ce qui conduit à l'extension de la fenêtre de rafraîchissement de 64 ms à 64,022 ms. Une si petite extension n'est absolument pas un problème puisque le chiffre de 64 ms est une valeur prudemment basse. 3066842 B16077FR 10 Figure 1 La figure 1 synthétise l'explication jusqu'ici : Un contrôleur externe mémoire 111, qui fait par exemple partie d'un ASIC 110, est couplé à un dispositif de mémoire 120 à travers un bus attaché à l'interface du dispositif mémoire 5 121 du dispositif mémoire 120. Un banc 126 peut être accédé par le contrôleur de mémoire externe 111 et par le processeur intégré 122. Une logique de détection de déclenchement 123 surveille les commandes d'activation générés par le contrôleur mémoire externe 111 et par le processeur intégré 122. 10 La logique de détection de déclenchement 123 indique, à travers l'assertion d'un signal "TRIG reached", quand l'activation du rang couramment activé implique que ce rang peut potentiellement atteindre la valeur de déclenchement. La logique d'envoi de rafraîchissement 124 reçoit le signal "TRIG reached" et détermine alors les index des deux rangs qui sont adjacents au rang « sur le point de devenir » 15 agresseur, puis par exemple pousse ces deux index dans la FIFO de la logique d'envoi de rafraîchissement 124. La FIFO est par exemple vidée en préemptant les créneaux de rafraîchissement périodique. Les rafraîchissements correspondants ne sont par exemple pas perdus mais simplement retardés, puisque la logique de compteur de rafraîchissement 125 n'est pas 20 mise à jour. L'unité de détection de déclenchement Comme il deviendra apparent plus tard, l'algorithme utilisé par l'unité de détection de déclenchement est par exemple approximatif, et pour compenser cela, la valeur de déclenchement effective retenue Trig Eff est par exemple : 25 - initialement basée sur la moitié de la valeur de déclenchement intrinsèque, la raison pour cela étant détaillé plus loin, - encore réduite pour prendre en compte le délai de pire cas pour avoir un rafraîchissement préventif effectivement réalisé, comme précédemment expliqué. Puisque le délai pire-cas dépend principalement du nombre maximum de 3066842 B16077FR 11 rafraîchissements préventifs en attente, qui dépendent de Trig Eff, la valeur Trig_Eff exacte est par exemple calculée itérativement. La conséquence pratique est que plus de rafraîchissements préventifs que strictement nécessaire pourraient être émis. Ce n'est pas un problème puisque le nombre de ces 5 rafraîchissements préventifs reste marginal par rapport au nombre de rafraîchissements périodiques : - puisque les rafraîchissements préventifs volent des créneaux de rafraîchissement périodique, il n'y a pas de pénalité de performance résultant de l'émission de rafraîchissements préventifs inutiles 10 - le seul impact pratique est que la fenêtre de 64 ms de rafraîchissement peut être étendue plus que strictement nécessaire. Ceci est sans conséquence puisque cette extension reste très petite en pourcentage. Alors qu'il génère des faux positifs, l'algorithme proposé ne génère par de faux négatifs, à la différence du système décrit dans 15 Algorithme de l'unité de détection de déclenchement L'unité de logique de détection de déclenchement comprend par exemple une table, la table RACT (Row Activate Count Table) qui a Nbr of entries entrées, où Nbr of entries est par exemple calculée comme suit : Nbr of entries = INT (Max activate in window / Trig_Eff) 20 Où la fonction INT retourne sa valeur d'entrée arrondie à la valeur entière immédiatement inférieure ou égale. Chaque entrée RACT comprend par exemple deux champs : - Un champ ROW COUNT qui est suffisamment large pour contenir une valeur jusqu'à Trig Eff, 25 - Un champ ROW INDEX qui est suffisamment large pour contenir toutes les valeurs possibles d'index de rangs, et une valeur additionnelle qui n'est jamais un index de rang, appelée no row. 3066842 B16077FR 12 De plus, la logique de détection de déclenchement comprend par exemple un registre appelé OTHER ROWS COUNT, suffisamment large pour contenir une valeur jusqu'à Trig Eff-1. N'importe quelle référence de temps périodique peut être utilisée, mais pour la simplicité 5 de l'explication, dans un banc, une fenêtre de rafraîchissement est dite commencée par exemple quand : - la logique de compteur de rafraîchissement du banc désigne à ce moment le rang 0, - une requête de rafraîchissement périodique est générée par le contrôleur de 10 mémoire externe. A chaque fois qu'une fenêtre de rafraîchissement démarre, la logique de détection du déclenchement par exemple : - met à zéro les champs ROW COUNT de toutes les entrées de RACT - initialise les champs ROW_INDEX de toutes les tables RACT à no row, 15 - met à zéro le registre OTHER_ROWS_COUNT. Chaque fois qu'une commande d'activation, visant un rang avec un index J, est exécutée par un banc, alors la logique de détection de déclenchement lit par exemple les entrées de RACT pour atteindre un premier objectif et un second objectif, le second n'étant pris en compte que si le premier n'est pas atteint : 20 - Le premier objectif est de trouver une entrée de RACT dont le champ ROW_INDEX a la valeur J, - Le second objectif est de trouver une entrée de RACT dont le champ ROW COUNT est égal à OTHER_ROWS_COUNT. Premier objectif atteint 25 Dès que le premier objectif est atteint, alors la lecture des entrées est par exemple stoppée et : - le champ ROW COUNT de l'entrée trouvée est incrémenté, 3066842 B16077FR 13 - si la valeur du champ ROW_COUNT de l'entrée trouvée est égale à Trig Eff, alors : o le champ ROW_INDEX de l'entrée trouvée est par exemple mis à no row, 5 o les index des rangs des deux voisins du rang J sont par exemple poussés dans la FIFO de rafraîchissement préventif. Premier objectif non atteint est second objectif atteint Dans l'explication suivante, l'index de la table RACT de l'entrée trouvée est appelée Fidx (Found Index), donc nous avons : 10 OTHER_ROWS_COUNT == RACT[Fidx].ROW_COUNT La logique de détection de déclenchement effectue alors : - RACT[Fidx].ROW_COUNT est incrémenté, - RACT[Fidx].ROW INDEX est mise à J. Premier et second objectifs non atteints 15 - OTHER ROW COUNT est incrémenté Dans cet algorithme, un rang est toujours associé à un compteur d'activation, un rang R par exemple étant : - soit associé au nombre d'activations contenu par le champ ROW_COUNT d'une entrée de RACT dont le champ ROW_INDEX est égal à R, 20 - ou associé au nombre d'activations contenu dans le registre OTHER_ROWS_COUNT. L'algorithme assure par exemple que le nombre couramment associé à un rang est toujours supérieur ou égal au nombre d'activations réel depuis le début de la fenêtre de rafraîchissement. 25 L'algorithme assure aussi par exemple que OTHER_ROWS_COUNT est plus petit que les champs RACT.ROW COUNT les plus petits, donc l'algorithme assure que si le 3066842 B 16077FR 14 nombre d'activations effective du rang R atteint Trig Eff, ceci arrivera dans une entrée de RACT, et non dans le registre OTHER_ROWS_COUNT. Dimensionner la FIFO de rafraîchissement préventif Puisque les rafraîchissements préventifs s'accumulent potentiellement dans la FIFO de 5 rafraîchissement préventif, dans certains modes de réalisation une limite haute aux nombres maximum de rafraîchissements préventifs qui peuvent être poussés dans cette FIFO est déterminée, afin de la dimensionner convenablement. Une entrée n'atteint la valeur Trig_Eff qu'en ayant compté Trig_Eff activations, visant potentiellement différents rangs (c'est ainsi que des faux positifs peuvent arriver) ou en 10 visant un rang unique (et c'est certainement un vrai positif). Il est donc impossible que la logique de détection au déclenchement génère plus qu'une paire de rafraîchissement préventif pas entrée de RACT. Variante d'algorithme Dans l'algorithme décrit précédemment, la valeur de registre OTHER_ROWS_COUNT 15 est par exemple nécessairement inférieure ou égale au champ ROW_COUNT le plus petit des entrées de RACT. Donc OTHER ROW COUNT ne peut atteindre Trig Eff, car sinon la valeur aurait entraîné une entrée supplémentaire RACT. La logique de détection de déclenchement est fondamentalement un cache, dont 20 l'associativité est égale au nombre d'entrées. L'algorithme précédemment expliqué a son associativité réduite chaque fois qu'une entrée atteint Trig Eff, l'entrée étant effectivement enlevée puisque : - Son ROW INDEX est initialisée à no row: aucun rang activé ne peut plus atteindre cette entrée 25 - Son champ ROW_COUNT reste à la valeur Trig_Eff : il ne peut pas être égal à OTHER_ROWS_COUNT. La variation suivante de l'algorithme initial maintient l'associativité constante en recyclant les entrées de RACT qui atteignent Trig_Eff : 3066842 B 16077FR 15 Premier objectif atteint Dès que le premier objectif est atteint, alors la lecture des entrées de RACT est par exemple stoppée et : - Si la valeur du champ ROW_COUNT de l'entrée trouvée est égale à Trig_Eff-1, 5 alors : - Le champ ROW INDEX de l'entrée trouvée est par exemple mis à no row, - Le champ ROW_COUNT l'entrée trouvée est par exemple mis à la valeur contenue par OTHER ROWS COUNT, 10 - Les index de rang des deux voisins du rang J sont par exemple poussés dans la FIFO de rafraîchissement préventif. - Sinon le champ ROW_COUNT de l'entrée trouvée est incrémenté. Premier objectif non atteint et second objectif atteint La logique de détection de déclenchement implémente alors par exemple ce qui suit : 15 - RACT[Fidx].ROW COUNT est incrémenté, - RACT[Fidx].ROW INDEX est mis à J. Premier objectif et second objectif non atteints - OTHER ROW COUNT est par exemple incrémenté Dimensionner la FIFO de rafraîchissement préventif pour la variante d'algorithme 20 Cette variante d'algorithme maintient l'associativité constante au lieu de la réduire graduellement, et conduit donc nécessairement à moins de faux positifs. Par conséquent, elle ne peut générer plus de rafraîchissements préventifs que l'algorithme initial, et donc ne peut pas générer plus de deux rafraîchissements préventifs par entrée RACT. Justification du calcul Trig_Eff 3066842 B16077FR 16 La logique exposée est capable de détecter si un rang a atteint Trig_Eff. Donc, quand une nouvelle fenêtre de rafraîchissement commence, le « passé d'activation » maximum de n'importe quel rang vaut jusqu'à Trig Eff trig-1, puisqu'une telle valeur ne génère pas encore de rafraîchissement préventif. 5 Donc, avant d'atteindre la valeur Trig_Eff dans une fenêtre de rafraîchissement donnée, un rang peut avoir accumulé en fait (Trig_Eff-1) + (Trig_Eff-1), la première valeur (Trig_Eff-1) étant héritée de la fenêtre précédente de rafraîchissement. Donc la logique détectera en fait de manière fiable seulement (Trig_Eff x 2) -1 activations, expliquant pourquoi le calcul itératif Trig_Eff par exemple commence à partir de la moitié de la 10 valeur de déclenchement intrinsèque. Généralisations Les modes de réalisation de la présente description ont été décrits dans le contexte de bancs DRAM, mais évidemment les techniques ici décrites pourraient être appliquées à n'importe quel tableau mémoire qui serait équivalent à un banc haute densité DRAM 15 (ayant une opération de rafraîchissement et souffrant de l'effet Row Hammer). Des références ont été faites au protocole DDR4, à titre d'exemple, à différents endroits de ce document. Evidemment, les techniques ici décrites pourraient être appliquée à tous les protocoles mémoire affiliés, tels que : - DDR, DDR2, DDR3, DDR4 dans leurs versions basse consommation, 20 - GDDR, GDDR2, GDDR3, GDDR4, GDDR5, - HBM. De plus les modes de réalisation ici décrits pourraient être appliqués aux dispositifs mémoire, avec des processeurs intégrés, utilisant des protocoles qui permettent à la DRAM de prendre des initiatives d'exécuter des rafraîchissements, comme le protocole 25 HMC. Dans ce cas, l'unité d'envoi de rafraîchissement préventif décrite ici peut-être omise, seule restant l'unité de détection de déclenchement. Pour simplifier, une fenêtre de rafraîchissement de 64 ms a été considérée, comme cette valeur est celle actuellement utilisée. Evidemment, les modes de réalisation ici décrits pourraient être appliqués à n'importe quelle durée de fenêtre de rafraîchissement qui 30 serait utilisée par une technologie DRAM donnée, et même à une DRAM où les durées 3066842 B 16077FR 17 de rafraîchissement s'adaptent continuellement à la variation de paramètres externes, telle la température, le voltage, le niveau de radiation, etc... De même, le nombre de rangs égal à 65536 a été donné comme un exemple parce qu'il est représentatif des DRAM actuellement fabriquées. Evidemment les modes de 5 réalisation ici décrits pourraient être appliqués indépendamment du nombre de rangs présents dans le banc. L'algorithme présenté jusqu'ici et ses variations peuvent être modifiées en de nombreuses façons tout en restant dans le cadre de l'invention. La liste suivante fournit des exemples de telles modifications qui peuvent être implémentées individuellement ou combinées 10 dans n'importe quel sous combinaison, cette liste étant donnée à titre d'exemple et non à titre de limitation : - Factoriser certaines des ressources matérielles décrites sur plusieurs bancs DRAM, - Remplacer une table avec différents champs avec différentes tables avec moins 15 de champs, - Remplacer une table par différentes tables plus petites, l'algorithme étant modifié afin de manipuler plusieurs entrées à la fois - Utiliser un bit valide à la place d'une valeur no row, ce bit valide étant positionné sur un champ additionnel de chaque entrée, ou dans une table additionnelle, 20 - Décompter les commandes d'activation au lieu de les compter, le champ ROW COUNT de RACT et le registre OTHER ROWS COUNT étant initialisés avec un nombre de commandes d'activation permise pour la fenêtre de rafraîchissement, - Grouper les rangs en paquets de rangs topologiquement adjacents, l'activation 25 étant suivi au niveau du paquet de rangs, et quand le nombre d'activation atteint Trig Eff, alors : o Tous les rangs du paquet des agresseurs sont rafraîchis 3066842 B 16077FR 18 o Les deux rangs qui sont voisins du paquet agresseur sont rafraîchis (ou les deux paquets de rangs correspondants sont rafraîchis, si les rafraîchissements sont gérés au niveau de granularité du paquet de rangs). REVENDICATIONS1. Un dispositif mémoire comprenant un ou plusieurs bancs (126), chaque banc comprenant plusieurs rangs de mémoire, le dispositif mémoire comprenant par ailleurs : un port d'accès externe (121) configuré pour permettre à un contrôleur de mémoire externe (111) d'activer, puis d'accéder, aux rangs mémoire de chaque banc ; un ou plusieurs processeurs internes (122) capables d'activer, puis d'accéder, aux rangs mémoire de chaque banc ; une logique de détection de déclenchement du Row Hammer (123) configuré pour surveiller, pour chaque banc, les commandes d'activation émises par le contrôleur de mémoire externe et par un ou plusieurs Processeurs internes, la logique de détection du déclenchement du Row Hammer comprenant de la mémoire mémorisant : une ou plusieurs tables indiquant, pour chaque rang d'un sous- ensemble de rangs de chaque banc, une valeur de comptage basée sur le nombre de commandes d'activation visant le rang, dans lequel le sous-ensemble de rangs associés à la valeur de comptage dans l'une ou plusieurs tables est dynamiquement variable pour indiquer les rangs les plus fréquemment activés basée sur une détection des commandes d'activation visant chaque rang de chaque banc ; une valeur de comptage supplémentaire indiquant le nombre maximum de commandes d'activation qui pourraient avoir visé n'importe quel rang ne faisant pas partie dudit sous-ensemble de rangs ; et dans lequel la logique de détection de déclenchement du Row Hammer est configurée pour comparer de chacune desdites valeurs de comptage avec un niveau de seuil afin d'identifier un ou plusieurs rangs dans le sous-ensemble de rangs, et de déclencher une opération de rafraîchissement d'un ou plusieurs rangs adjacents à chaque rang identifié. 3066842 B 16077FR 20 2. Le dispositif mémoire de la revendication 1, dans lequel une ou plusieurs tables comprennent une entrée associée avec chaque rang du sous-ensemble de rangs, chaque entrée comprenant ladite valeur de comptage, dans laquelle le nombre d'entrées de ladite où desdites tables est inférieur au centième du nombre de rangs de 5 chaque banc. 3. Le dispositif mémoire de la revendication 1 ou 2, comprenant par ailleurs une logique d'envoi de rafraîchissement préventif (124) configurée pour implémenter une opération de rafraîchissement pour l'un ou plusieurs des rangs adjacents de chaque rang identifié en émettant des requêtes de rafraîchissement à la place des requêtes de 10 rafraîchissement périodique générées par le contrôleur mémoire externe, retardant ce faisant une ou plusieurs desdites requêtes de rafraîchissement périodique. 4. Le dispositif mémoire de la revendication 3, dans lequel la durée de laquelle lesdites requêtes de rafraîchissement périodique sont retardées n'excède pas une durée maximum qui permette à chaque mémoire de retenir correctement ses données dans 15 le temps. 5. Le dispositif mémoire de la revendication 3 ou 4, dans lequel la logique d'envoi de rafraîchissement préventif comprend une mémoire (FIFO) stockant, pour chaque rang identifié, une indication de l'un ou plusieurs rangs adjacents à rafraîchir. 6. Le dispositif mémoire de la revendication 1 ou 2, dans lequel un protocole externe 20 utilisé par le contrôleur de mémoire externe permet aux dispositifs mémoire de prendre l'initiative de générer des rafraîchissements. 7. Le dispositif mémoire de n'importe quel des revendications 1 à 6, dans lequel la logique de détection de déclenchement du Row Hammer est configurée, après chaque commande d'activation émise par le contrôleur de mémoire externe ou par un des 25 processeurs internes, pour : - modifier la valeur de comptage associée au rang visé par la commande d'activation si le rang visé fait partie du sous-ensemble de rangs; et - remplacer une entrée dans une ou plusieurs tables par une entrée correspondant au rang visé par la commande d'activation si la valeur de comptage de cette entrée est 30 égale à la valeur de comptage supplémentaire; et 3066842 B 16077FR 21 - modifier la valeur de comptage supplémentaire si le rang visé ne fait pas partie du sous-ensemble de rangs et aucune des valeurs de comptage dans une ou plusieurs tables n'est égale à la valeur de comptage supplémentaire. 8. Une méthode de protection du dispositif mémoire de l'effet Row Hammer, le 5 dispositif mémoire comprenant un ou plusieurs bancs (126), chaque banc comprenant plusieurs rangs mémoire, la méthode comprenant : surveiller, par la logique de détection de déclenchement du Row Hammer (123) et pour chaque banc, les commandes d'activation de rang émises par le contrôleur de mémoire externe et par un ou plusieurs processeurs internes du 10 dispositif mémoire, chaque commande d'activation de rang causant au rang dudit banc d'être activé avant d'être accédé par le contrôleur mémoire externe ou par un ou plusieurs processeurs internes ; stocker, par la logique de détection de déclenchement du Row Hammer, une ou plusieurs tables indiquant pour chaque rang d'un sous-ensemble de rangs 15 de chaque banc, une valeur de comptage basée sur le nombre de commandes d'activation visant le rang, dans lequel le sous-ensemble de rangs associé à une valeur de comptage dans une ou plusieurs tables est dynamiquement variable pour indiquer les rangs les plus fréquemment activés basée sur la détection des commandes d'activation visant chaque rang de chaque banc; 20 mémoriser, par la logique de détection de déclenchement du Row Hammer, une valeur de comptage supplémentaire indiquant le nombre maximum de commandes d'activations qui ont pu viser n'importe quel rang ne faisant pas partie dudit sous-ensembles de rangs ; comparer, par la logique de détection de déclenchement du Row Hammer, 25 chacune des valeurs de comptage avec un niveau de seuil afin d'identifier un ou plusieurs rangs dans une ou plusieurs tables ; et déclencher, par la logique de détection de déclenchement du Row Hammer, une opération de rafraîchissement d'un ou plusieurs rangs adjacents au rang identifié. 30 9. La méthode de la revendication 8, comprenant par ailleurs l'implémentation, par la logique d'envoi de rafraîchissement préventif (124), d'une opération de 3066842 B 16077FR 22 rafraîchissement pour un ou plusieurs rangs adjacents de chaque rang identifié en émettant des requêtes de rafraîchissement à la place des requêtes de rafraîchissement périodique générées par le contrôleur de mémoire externe, retardant ce faisant un ou plusieurs desdites requêtes de rafraîchissement périodique. 5 10. La méthode de la revendication 8 ou 9, comprenant par ailleurs : après chaque commande d'activation émise par le contrôleur de mémoire externe ou par l'un des processeurs internes : - modifier la valeur de comptage associée au rang visé par la commande d'activation si le rang visé fait partie du sous-ensemble de rang ; et 10 - remplacer une entrée dans une ou plusieurs tables par une entrée correspondant au rang visé par la commande d'activation si la valeur de comptage de cette entrée est égale à la valeur supplémentaire de comptage ; et - modifier la valeur de comptage supplémentaire si le rang visé ne fait pas partie du sous-ensemble de rangs et aucune des valeurs de comptage dans une ou plusieurs 15 tables de n'est égale à la valeur de comptage supplémentaire.