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 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 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 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 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. 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 rafraîchis toutes les 64 ms, les rafraîchissements correspondants étant appelés « rafraîchissements périodiques ».
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 intrinsèque, alors les deux rangs adjacents doivent être préventivement rafraîchis.
La demande US 20140006704 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 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 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. La solution décrite par le document US 20140006704 ne convient donc pas pour un DRAM intégrant un processeur. 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.
La demande WO2017048441 et le brevet US6463001 adressent la problématique du rafraîchissement d'une mémoire DRAM conventionnelle.
La demande de brevet publiée 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 US 20140006704 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 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 ce rang donné.
US 20140006704 ne fonctionne pas dans certains scénarios 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 US 20140006704. 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+l 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 US 20140006704 ), 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
préventifs pour ses deux voisins n'a pas été découvert par la logique proposée par US 20140006704.
US20140006704 ne convient pas à l'intégration à une DRAM. Un contrôleur DRAM externe fera typiquement partie d'un ASIC fabriqué à l'aide d'un procédé adapté pour créer de la logique rapide, un tel procédé étant appelé procédé logique (« logic process »).
Les DRAM sont fabriqués avec des procédés spécialisés, permettant aux condensateurs utilisés pour les cellules mémoire d'être construits, et la logique construite en utilisant de tels procédé est bien plus lente que si elle l'était en utilisant un procédé logique.
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 US20140006704 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).
Trier est une procédure coûteuse, qui peut être suffisamment rapide si elle est implémentée sur un procédé logique, mais elle n'est probablement pas assez rapide quand elle est implémentée sur un procédé 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.
Objet de l'invention
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 DRAM, le dispositif mémoire 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 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 tables est modifié dynamiquement par la logique de détection du Row Hammer en fonction des valeurs de comptage, 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 ; dans lequel la logique de détection du déclenchement du Row 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é ; et dans lequel une logique d'envoi de rafraîchissement préventif 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 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.
Suivant l'un des modes de réalisation, une ou plusieurs tables comprennent une entrée 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.
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 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 mémoire externe permet au dispositif mémoire de prendre l'initiative de générer des rafraîchissements .
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 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 des tables n'est égale à la valeur de comptage supplémentaire.
Selon un aspect supplémentaire, il est fourni un procédé pour protéger un dispositif mémoire de l'effet Row Hammer, le dispositif mémoire comprenant un ou plusieurs bancs DRAM, 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 chaque banc, des commandes d'activation de rang générée par un contrôleur externe mémoire et/ou 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 sous-ensemble de rangs associé à la valeur de comptage dans une ou plusieurs tables est modifié dynamiquement par la logique de déclenchement du Row Hammer en fonction des valeurs de comptage, 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 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 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 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 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 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, fournie à titre d'exemple non 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.
Description détaillée
Généralités
Pour chaque banc de la DRAM, les modes de réalisation décrits ci-après par exemple comprennent deux blocs :
• Une unité (ou logique) de détection de déclenchement, et
• Une unité (ou logique) d'envoi de rafraîchissement où l'unité de détection de déclenchement nourrit l'unité d'envoi de rafraîchissement.
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 (autrement désignée « niveau de seuil »). 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.
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 déclenchement, alors les deux index des deux rangs voisins de ce rang donné sont calculés puis poussés dans cette FIFO.
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 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 appelée logique de compteur de rafraîchissement (puisque c'est généralement juste un compteur, désigné « compteur de rafraîchissement »).
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 :
• 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 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 résultant :
• 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 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 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 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 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é.
Considérant l'exemple précédent, dans le pire cas, au lieu de rafraîchir 65536 rangs en 64 ms, alors 65536+(l 1x2) 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.
Mode de réalisation de la Figure 1
La figure 1 représente un dispositif conforme à la présente invention.
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 121 du dispositif mémoire 120.
Un banc DRAM 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ées par le contrôleur mémoire externe 111 et par le processeur intégré 122.
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 » 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 mise à jour.
L'unité (ou logique) 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 :
• 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 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 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
• 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 US20140006704.
Algorithme de l'unité (ou logique) 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)
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,
• 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.
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-l .
N'importe quelle référence de temps périodique peut être utilisée, mais pour la simplicité 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 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,
• 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 :
• 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
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é,
• 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, 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 :
OTHER ROWS COUNT == RACT[ i</jt].ROW COUNT
La logique de détection de déclenchement effectue alors :
• RACï[Fidx\ .ROW COUNT est incrémenté,
• RACT[ /Î JC] .ROW INDEX est mise à /. Premier et second objectifs non atteints
• 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,
• 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.
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 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 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 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 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 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 · 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 :
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-l, 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,
• 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 :
• 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
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
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-l, puisqu'une telle valeur ne génère pas encore de rafraîchissement préventif.
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-l) + (Trig_Eff-l), la première valeur (Trig_Eff-l) é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 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 (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,
• 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 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 serait utilisée par une technologie DRAM donnée, et même à une DRAM où les durées 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 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 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 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,
• 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 étant suivi au niveau du paquet de rangs, et quand le nombre d'activation atteint Trig Eff, alors :
Tous les rangs du paquet des agresseurs sont rafraîchis
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).