FR3027128A1 - - Google Patents

Download PDF

Info

Publication number
FR3027128A1
FR3027128A1 FR1559545A FR1559545A FR3027128A1 FR 3027128 A1 FR3027128 A1 FR 3027128A1 FR 1559545 A FR1559545 A FR 1559545A FR 1559545 A FR1559545 A FR 1559545A FR 3027128 A1 FR3027128 A1 FR 3027128A1
Authority
FR
France
Prior art keywords
memory
transaction count
blocks
access request
memory controller
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
FR1559545A
Other languages
English (en)
Other versions
FR3027128B1 (fr
Inventor
Kanishk Rastogi
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Western Digital Technologies Inc
Original Assignee
HGST Netherlands BV
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by HGST Netherlands BV filed Critical HGST Netherlands BV
Publication of FR3027128A1 publication Critical patent/FR3027128A1/fr
Application granted granted Critical
Publication of FR3027128B1 publication Critical patent/FR3027128B1/fr
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0871Allocation or management of cache space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0868Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/122Replacement control using replacement algorithms of the least frequently used [LFU] type, e.g. with individual count value
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/123Replacement control using replacement algorithms with age lists, e.g. queue, most recently used [MRU] list or least recently used [LRU] list
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/126Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning
    • G06F12/127Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning using additional replacement algorithms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • G06F9/467Transactional memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/22Employing cache memory using specific memory technology
    • G06F2212/225Hybrid cache memory, e.g. having both volatile and non-volatile portions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/31Providing disk cache in a specific location of a storage system
    • G06F2212/313In storage device

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

La présente invention concerne un appareil, des systèmes et des procédés mettant en œuvre un mécanisme de suppression des données moins fréquemment utilisées pour identifier un bloc de mémoire d'une mémoire cache en vue de le supprimer. Le mécanisme moins fréquemment utilisé peut présenter un mode de fonctionnement similaire au mécanisme de suppression des données les moins récemment utilisées tout en nécessitant l'utilisation d'un mémoire moindre. Un contrôleur de mémoire peut mettre en œuvre le mécanisme de suppression des données moins récemment utilisées par la sélection d'un bloc de mémoire et la détermination de si oui ou non le bloc de mémoire est un des blocs de mémoire moins récemment utilisés. Si c'est le cas, le contrôleur de mémoire peut supprimer les données dans le bloc de mémoire sélectionné ; si ce n'est pas le cas, le contrôleur de mémoire peut poursuivre pour sélectionner d'autres blocs de mémoire jusqu'à ce que le contrôleur de mémoire sélectionne un des blocs de mémoire moins récemment utilisés.

Description

APPAREIL, SYSTÈMES ET PROCEDES POUR FOURNIR UNE MÉMOIRE CACHE À GESTION EFFICACE DE LA MÉMOIRE CONTEXTE Domaine de l'invention [0001] La présente invention concerne un appareil, des systèmes et des procédés pour fournir une mémoire cache à gestion efficace de la mémoire. Invention associée [0002] Un système informatique peut comprendre un système de stockage pouvant maintenir des données. Un système de stockage peut comprendre un ou plusieurs types de dispositifs de stockage tels que, par exemple, les lecteurs de disque dur (HDDs) et les lecteurs optiques. Ces types de dispositifs de stockage sont peu coûteux et peuvent contenir une grande quantité de données. Cependant, ils sont lents par rapport à d'autres éléments utilisés dans un système informatique. Par exemple, un lecteur de disque dur de consommateur peut stocker des téraoctets de données sur puce mais a une vitesse de transfert théorique maximale de 300 mégaoctets (MB) par seconde. [0003] D'autres types de dispositifs de stockage sont plus rapides que les HDDs et les lecteurs optiques. Par exemple, une mémoire à accès aléatoire (RAM) a une vitesse de transfert théorique maximale de, par exemple, 12,8 gigaoctets (GO) par seconde. Même un lecteur à état solide (SSD) est plus rapide que les HDDs et les lecteurs optiques. Cependant, ces dispositifs tendent à être plus coûteux. [0004] Certains dispositifs de mémoire intégrés peuvent même être plus rapides que les RAMs ou les SSDs. Par exemple, une mémoire sur puce spécialisée contenue dans une unité de traitement centrale (CPU) peut exposer une performance encore meilleure, avec une vitesse de transfert de 16 GO par seconde plus de cinquante fois plus rapide que les dispositifs de stockage hors puce. Cependant, une mémoire sur puce est souvent extrêmement coûteuse. [0005] Parce que les dispositifs de mémoire doivent effectuer ce compromis entre prix et performance, une technique connue comme mise en mémoire cache peut être utilisée pour augmenter ou accélérer la performance d'ensemble d'un système de stockage. La mise en - 1 - 3027128 mémoire cache se base sur une observation que des données identiques peuvent être réutilisées à maintes reprises sur une courte période de temps par un dispositif hôte, tel qu'une application logicielle et/ou un système d'exploitation tournant sur le dispositif hôte, ou par un autre composant matériel. C'est pourquoi un système de stockage peut utiliser une petite quantité de 5 mémoire à accès rapide (appelée mémoire cache) pour mémoriser les données auxquelles on accède régulièrement de sorte que les données auxquelles on accède régulièrement peuvent facilement être amenées aux systèmes informatiques. RÉSUMÉ [0006] Les modes de réalisation de la présente invention concernent un appareil, des 10 systèmes et des procédés pour fournir une mémoire cache à gestion efficace de la mémoire à l'aide d'un lecteur à état solide. [0007] Certains modes de réalisation comprennent un procédé. Le procédé peut comprendre la réception, au niveau d'un contrôleur de mémoire prévu dans un système de stockage couplé à un dispositif hôte via une interface, d'une demande d'accès à la mémoire, où la demande d'accès 15 à la mémoire comprend un identifiant de bloc de mémoire qui identifie un bloc de mémoire. Le procédé peut également comprendre la détermination, au niveau du contrôleur de mémoire, du fait que les données associées à la demande d'accès à la mémoire doivent être mémorisées dans un des blocs de mémoire prévu dans la mémoire cache et que chacun des blocs de mémoire contenus dans la mémoire cache est déjà occupé avec des données valides. Le procédé peut 20 également comprendre la sélection, par le contrôleur de mémoire, d'un des blocs de mémoire et la détermination d'un premier décompte de transactions associé au bloc de mémoire sélectionné, le premier décompte de transactions indiquant les informations d'heure/de date auxquelles on a accédé au bloc de mémoire sélectionné. Lorsque le premier décompte de transactions répond à un critère prédéterminé, le procédé peut comprendre le fait d'amener, par le contrôleur de 25 mémoire, le bloc de mémoire sélectionné à mémoriser les données. Lorsque le premier décompte de transactions ne répond pas au critère prédéterminé, le procédé peut comprendre la sélection, par le contrôleur de mémoire, d'un autre des blocs de mémoire jusqu'à ce que le contrôleur de mémoire sélectionne un bloc de mémoire dont le décompte de transactions répond au critère prédéterminé. - 2 - 3027128 [0008] Dans certains modes de réalisation, la sélection d'un des blocs de mémoire peut comprendre la sélection d'un identifiant de bloc de mémoire à l'aide d'un générateur de nombre aléatoire. [0009] Dans certains modes de réalisation, le procédé peut également comprendre le 5 maintien d'un seuil de décompte de transactions et le premier décompte de transactions répondant au critère prédéterminé lorsque le premier décompte de transactions répond à une condition prédéterminée par rapport au seuil de décompte de transactions. [0010] Dans certains modes de réalisation, le premier décompte de transactions répond à la condition prédéterminée par rapport au seuil de décompte de transactions lorsque le premier 10 décompte de transactions est inférieur au seuil de décompte de transactions. [0011] Dans certains modes de réalisation, lorsqu'un nombre moyen d'itérations utilisé pour identifier le bloc de mémoire sélectionné est petit, le procédé peut comprendre le fait de susciter une modification du seuil de décompte de transactions pour réduire un nombre de blocs de mémoire répondant au critère prédéterminé, 15 [0012] Dans certains modes de réalisation, le procédé peut comprendre le maintien d'une liste de décompte de transactions ayant au moins une entrée, l'au moins une entrée indiquant un nombre de blocs de mémoire ayant un décompte de transactions compris dans une plage préconfigurée ; et la détermination du seuil de décompte de transactions sur la base du nombre de blocs de mémoire ayant un décompte de transactions compris dans la plage préconfigurée. 20 [0013] Dans certains modes de réalisation, le procédé peut comprendre la réception d'un paramètre indiquant un nombre de blocs de mémoire répondant au critère prédéterminé ; et la détermination de la plage préconfigurée sur la base du paramètre. [0014] Dans certains modes de réalisation, le procédé peut comprendre la réception, au niveau du contrôleur de mémoire, d'une première demande d'accès à la mémoire, la première 25 demande d'accès à la mémoire comprenant un premier identifiant de bloc de mémoire identifiant un premier bloc de mémoire ; la détermination, au niveau du contrôleur de mémoire, du fait que les données associées à la première demande d'accès à la mémoire sont déjà mémorisées dans un des blocs de mémoire contenus dans la mémoire cache ; et la mise à jour d'un décompte de transactions d'un des blocs de mémoire contenus dans la mémoire cache pour refléter la première 30 demande d'accès à la mémoire. - 3 - 3027128 [0015] Dans certains modes de réalisation, le procédé peut comprendre l'identification d'une entrée de la liste de décompte de transactions associée au premier bloc de mémoire et la mise à jour du nombre de blocs de mémoire dans l'entrée pour refléter la première demande d'accès à la mémoire. 5 [0016] Certains modes de réalisation comprennent un système de stockage. Le système de stockage peut comprendre une mémoire cache comprenant une pluralité de blocs de mémoire pour maintenir des données et un contrôleur de mémoire configuré pour traiter une demande d'accès à la mémoire reçue d'un dispositif hôte, la demande d'accès à la mémoire comprenant un identifiant de bloc de mémoire qui identifie un bloc de mémoire. Le contrôleur de mémoire 10 pouvant être configuré pour déterminer que les données associées à la demande d'accès à la mémoire doivent être mémorisées dans un des blocs de mémoire contenus dans la mémoire cache et que chacun des blocs de mémoire contenus dans la mémoire cache est déjà occupé avec des données valides, sélectionner un des blocs de mémoire contenus dans la mémoire cache et déterminer un premier décompte de transactions associé au bloc de mémoire sélectionné, le 15 premier décompte de transactions indiquant les informations d'heure/de date auxquelles on a accédé au bloc de mémoire sélectionné. Lorsque le premier décompte de transactions répond à un critère prédéterminé, le contrôleur de mémoire peut être configuré pour amener le bloc de mémoire sélectionné à mémoriser les données. Lorsque le premier décompte de transactions ne répond pas au critère prédéterminé, le contrôleur de mémoire peut être configuré pour 20 sélectionner un autre des blocs de mémoire jusqu'à ce que le contrôleur de mémoire sélectionne un bloc de mémoire dont le décompte de transactions répond au critère prédéterminé. [0017] Dans certains modes de réalisation, le contrôleur de mémoire est configuré pour sélectionner un identifiant de bloc de mémoire à l'aide d'un générateur de nombre aléatoire. [0018] Dans- certains modes de réalisation, le contrôleur de mémoire est configuré pour 25 maintenir un seuil de décompte de transactions et le premier décompte de transactions répondant au critère prédéterminé lorsque le premier décompte de transactions répond à une condition prédéterminée par rapport au seuil de décompte de transactions. [0019] Dans certains modes de réalisation, lorsqu'un nombre moyen d'itérations utilisé pour identifier le bloc de mémoire sélectionné est petit, le contrôleur de mémoire est configuré pour 30 susciter une modification du seuil de décompte de transactions pour réduire un nombre de blocs de mémoire répondant au critère prédéterminé. - 4 - 3027128 [0020] Dans certains modes de réalisation, le contrôleur de mémoire est configuré pour : maintenir une liste de décompte de transactions ayant au moins une entrée, l'au moins une entrée indiquant un nombre de blocs de mémoire ayant un décompte de transactions compris dans une plage préconfigurée ; et déterminer le seuil de décompte de transactions sur la base du nombre de 5 blocs de mémoire ayant un décompte de transactions compris dans la plage préconfigurée. [0021] Dans certains modes de réalisation, le contrôleur de mémoire est configuré pour recevoir un paramètre indiquant un nombre de blocs de mémoire répondant au critère prédéterminé ; et déterminer la plage préconfigurée sur la base du paramètre. [0022] Dans certains modes de réalisation, le contrôleur de mémoire est configuré pour 10 recevoir une première demande d'accès à la mémoire, la première demande d'accès à la mémoire comprenant un premier identifiant de bloc de mémoire qui identifie un premier bloc de mémoire, déterminer que les données associées à la première demande d'accès à la mémoire sont déjà mémorisées dans un des blocs de mémoire contenus dans la mémoire cache et mettre à jour un décompte de transactions d'un des blocs de mémoire contenus dans la mémoire cache pour 15 refléter la première demande d'accès à la mémoire. [0023] Certains modes de réalisation comprennent un support lisible par ordinateur non transitoire ayant des instructions exécutables. Les instructions exécutables peuvent être activées pour amener un contrôleur de mémoire à recevoir une demande d'accès à la mémoire provenant d'un dispositif hôte sur une interface, la demande d'accès à la mémoire comprenant un 20 identifiant de bloc de mémoire qui identifie un bloc de mémoire, déterminer que les données associées à la demande d'accès à la mémoire doivent être mémorisées dans un des blocs de mémoire contenus dans la mémoire cache et que chacun des blocs de mémoire contenus dans la mémoire cache est déjà occupé avec des données valides et sélectionner un des blocs de mémoire contenus dans la mémoire cache. Les instructions exécutables peuvent également être activées 25 pour amener le contrôleur de mémoire à déterminer un premier décompte de transactions associé au bloc de mémoire sélectionné, le premier décompte de transactions indiquant les informations d'heure/de date auxquelles on a accédé au bloc de mémoire sélectionné. Lorsque le premier décompte de transactions répond à un critère prédéterminé, les instructions exécutables peuvent également être activées pour amener le contrôleur de mémoire à amener le bloc de mémoire sélectionné à mémoriser les données. Lorsque le premier décompte de transactions ne répond pas au critère prédéterminé, les instructions exécutables peuvent également être activées pour amener - 5 - 3027128 le contrôleur de mémoire à sélectionner un autre des blocs de mémoire jusqu'à ce que le contrôleur de mémoire sélectionne un bloc de mémoire dont le décompte de transactions répond au critère prédéterminé. [0024] Dans certains modes de réalisation, le support lisible par ordinateur non transitoire 5 peut également comprendre des instructions exécutables pouvant être activées pour amener le contrôleur de mémoire à maintenir un seuil de décompte de transactions et le premier décompte de transactions répondant au critère prédéterminé lorsque le premier décompte de transactions répond à une condition prédéterminée par rapport au seuil de décompte de transactions. [0025] Dans certains modes de réalisation, le support lisible par ordinateur non transitoire 10 peut également comprendre des instructions exécutables pouvant être activées pour amener le contrôleur de mémoire à maintenir une liste de décompte de transactions ayant au moins une entrée, l'au moins une entrée indiquant un nombre de blocs de mémoire ayant un décompte de transactions compris dans une plage préconfigurée, et déterminer le seuil de décompte de transactions sur la base du nombre de blocs de mémoire ayant un décompte de transactions 15 compris dans la plage préconfigurée. [0026] Dans certains modes de réalisation, le support lisible par ordinateur non transitoire peut également comprendre des instructions exécutables pouvant être activées pour amener le contrôleur de mémoire à recevoir une première demande d'accès à la mémoire, la première demande d'accès à la mémoire comprenant un premier identifiant de bloc de mémoire qui 20 identifie un premier bloc de mémoire, déterminer que les données associées à la première demande d'accès à la mémoire sont déjà mémorisées dans un des blocs de mémoire contenus dans la mémoire cache et mettre à jour un décompte de transactions d'un des blocs de mémoire contenus dans la mémoire cache pour refléter la première demande d'accès à la mémoire. BRÈVE DESCRIPTION DES FIGURES 25 [0027] Divers objets, caractéristiques et avantages de la présente invention peuvent être compris de façon plus exhaustive en référence à la description détaillée suivante considérée en association avec les dessins suivants, des numéros de référence identiques identifiant des éléments identiques. Les dessins suivants ont des fins d'illustration uniquement et ne visent pas à limiter l'invention dont la portée est exposée dans les revendications suivantes. - 6 - 3027128 [0028] La figure 1 illustre un exemple de système informatique 100 ayant un système de stockage selon certains modes de réalisation de la présente invention. [0029] La figure 2 illustre une probabilité de trouver un des blocs de mémoire utilisés moins récemment à travers des requêtes aléatoires en fonction du nombre de requêtes aléatoires. 5 [0030] Les figures 3A-3B illustrent un procédé dans lequel un contrôleur de mémoire traite une demande d'accès à la mémoire selon certains modes de réalisation de la présente invention. [0031] La figure 4 illustre un procédé pour sélectionner un des blocs de mémoire utilisés moins récemment selon certains modes de réalisation de la présente invention. DESCRIPTION DÉTAILLÉE 10 [0032] Une mémoire cache peut être utilisée pour améliorer le temps d'accès moyen aux données dans un système de stockage. Cependant, une mémoire cache peut provoquer une très grande consommation de mémoire du fait qu'une mémoire cache nécessite non seulement des blocs de mémoire pour stocker des données mais aussi un contrôleur de mémoire coordonnant les opérations d'accès à la mémoire pour les blocs de mémoire contenus dans la mémoire cache. 15 [0033] Un contrôleur de mémoire est souvent configuré pour garantir que les données stockées dans les blocs de mémoire sont utilisées aussi souvent que possible. À cette fin, un contrôleur de mémoire peut être configuré pour déterminer lequel des blocs de mémoire a été utilisé le moins récemment (par exemple le bloc de mémoire auquel on n'a pas accédé pendant le temps le plus long) et provoquer l'écrasement des données du bloc de mémoire le moins 20 récemment utilisé par de données qui seront probablement utilisées plus souvent. Cette caractéristique est appelée mécanisme de suppression des données les moins récemment utilisées (LRU). [0034] Souvent, un contrôleur de mémoire met en oeuvre le mécanisme de suppression des données LRU à l'aide d'une liste à chaînon double. Par exemple, un contrôleur de mémoire peut 25 maintenir une liste à chaînon double qui comprend des noeuds représentant des blocs de mémoire dans une mémoire cache. Les noeuds contenus dans la liste à chaînon double sont ordonnés en fonction de la date/heure auxquelles les blocs de mémoire associés ont été lus ou écrits. C'est pourquoi le contrôleur de mémoire peut accéder au dernier noeud dans la liste à chaînon double pour identifier rapidement le bloc de mémoire auquel on a accédé le moins récemment. - 7 - 3027128 [0035] Ce mécanisme, cependant, peut nécessiter une quantité significative de mémoire étant donné que le contrôleur de mémoire doit maintenir une liste à chaînon double ayant le même nombre de noeuds que le nombre de blocs de mémoire, qui peut être de l'ordre du milliard (par exemple 2 milliards de blocs de mémoire pour une mémoire cache de 8 TB ayant une taille de 5 bloc de mémoire de 4KB.) Étant donné que chaque noeud dans la liste à chaînon double peut consommer 16 octets, le nombre total d'octets nécessaires au maintien de la liste à chaînon double peut être de dizaines de milliards, ce qui est significatif. Si l'on considère que la liste à chaînon double est mise en oeuvre à l'aide d'une mémoire à accès rapide, telle qu'une mémoire à accès aléatoire statique (SRAM), le coût associé au mécanisme de suppression des données LRU 10 peut être élevé. [0036] La présente invention expose un mécanisme de suppression des données LRU modifié (également appelé « mécanisme LRU modifié ») pouvant atteindre un mode de fonctionnement similaire au mécanisme de suppression des données LRU traditionnel (également appelé « mécanisme LRU traditionnel »), avec une mémoire requise sensiblement 15 moindre. Plus particulièrement, la présente invention illustre un contrôleur de mémoire configuré pour supprimer les données provenant d'un bloc de mémoire moins récemment utilisé, contrairement au bloc de mémoire utilisé le moins récemment. Par exemple, supposons qu'une mémoire cache a 10 blocs de mémoire, dont 8 auxquels on a accédé il y a moins de 100 cycles d'horloge, un auquel on a accédé il y a 150 cycles d'horloge et un auquel on a accédé il y a 160 20 cycles. Le mécanisme LRU traditionnel sélectionnera le bloc de mémoire auquel on a accédé il y a 160 cycles tandis que le mécanisme LRU modifié peut être conçu pour sélectionner un des blocs de mémoire utilisés moins récemment. C'est pourquoi, le contrôleur de mémoire, utilisant le mécanisme LRU modifié, peut sélectionner soit le bloc de mémoire auquel on a accédé il y a 150 cycles d'horloge soit celui auquel on a accédé il y a 160 cycles. Lorsqu'un nombre de blocs 25 de mémoire utilisés moins récemment (également appelé « blocs de mémoire cibles ») est petit par rapport au nombre de blocs de mémoire 112 dans la mémoire cache 106, le mode de fonctionnement du mécanisme LRU modifié peut être sensiblement similaire au mode de fonctionnement du mécanisme LRU traditionnel. [0037] Dans certains modes de réalisation, le contrôleur de mémoire est configuré pour 30 maintenir un poinçon d'entrée/sortie (« IOStamp ») pour chaque bloc de mémoire dans la mémoire cache. Le poinçon IOStamp peut indiquer un ordre dans lequel on a accédé aux blocs - 8 - 3027128 de mémoire. Par exemple, on a pu accéder à un bloc de mémoire associé à un poinçon IOStamp inférieur moins récemment qu'à un bloc de mémoire associé à un poinçon IOStamp supérieur. [0038] Le contrôleur de mémoire peut également maintenir un seuil de poinçon IOStampThreshold. Le seuil de poinçon IOStampThreshold peut être utilisé pour identifier les 5 blocs de mémoire cibles (par exemple les blocs de mémoire dont les données peuvent être supprimées pour faire place à de nouvelles données) à partir du groupe commun de blocs de mémoire contenus dans la mémoire cache. Par exemple, lorsqu'un bloc de mémoire est associé à un poinçon IOStamp inférieur au seuil de poinçon IOStampThreshold, le contrôleur de mémoire peut déterminer que le bloc de mémoire est un bloc de mémoire cible et peut supprimer les 10 données dans ce bloc de mémoire pour faire de l'espace pour de nouvelles données. [0039] Le contrôleur de mémoire peut utiliser le poinçon IOStamp et le seuil de poinçon IOStampThreshold pour identifier les blocs de mémoire cibles provenant de la mémoire cache. Lorsque le contrôleur de mémoire décide d'écrire de nouvelles données dans la mémoire cache et que tous les blocs de mémoire contenus dans la mémoire cache sont occupés, alors le contrôleur 15 de mémoire peut sélectionner un des blocs de mémoire cibles contenus dans la mémoire cache, supprimer les données provenant du bloc de mémoire cible sélectionné et écrire les nouvelles données dans le bloc de mémoire cible sélectionné. [0040] Pour sélectionner un des blocs de mémoire cibles contenus dans la mémoire cache, le contrôleur de mémoire peut sélectionner aléatoirement un bloc de mémoire et déterminer un 20 poinçon IOStamp du bloc de mémoire sélectionné aléatoirement. Si le poinçon IOStamp déterminé est inférieur au seuil de poinçon IOStampThreshold, le contrôleur de mémoire peut indiquer que le bloc de mémoire sélectionné peut être utilisé pour de nouvelles données. En revanche, si le poinçon IOStamp déterminé est supérieur au seuil de poinçon IOStampThreshold, alors le contrôleur de mémoire peut ignorer ce bloc de mémoire, sélectionner aléatoirement un 25 nouveau bloc de mémoire et répéter ce procédé jusqu'à ce que le bloc de mémoire aléatoirement sélectionné ait un poinçon IOStamp inférieur au seuil de poinçon IOStampThreshold. [0041] Dans certains modes de réalisation, le contrôleur de mémoire peut maintenir une liste de poinçons IOStamp. La liste de poinçons IOStamp peut comprendre une liste chaînée. La liste chaînée peut comprendre une pluralité de noeuds, chaque noeud indiquant un nombre de blocs de 30 mémoire associé à un poinçon IOStamp à l'intérieur d'une plage préconfigurée. Par exemple, - 9 - 3027128 supposons que Lo, L1, ..., L,i, Li, soient des nombres réels. Le premier noeud dans une liste de poinçons IOStamp peut indiquer un nombre de blocs de mémoire ayant le poinçon IOStamp à l'intérieur de la plage de 0 5 IOStamp < Lo ; le second noeud dans une liste de poinçons IOStamp peut indiquer un nombre de blocs de mémoire ayant le poinçon IOStamp à l'intérieur 5 de la plage de Lo 10Stamp < L1 ; ; et le noeud (n + 1) dans une liste de poinçons IOStamp peut indiquer un nombre de blocs de mémoire ayant le poinçon IOStamp à l'intérieur de la plage de Ln_i 10Stamp < Ln.
100421 Dans certains modes de réalisation, lorsqu'un poinçon IOStamp d'un bloc de mémoire est mis à jour, le contrôleur de mémoire peut mettre à jour de façon correspondante la 10 liste de poinçons IOStamp de sorte que la liste de poinçons IOStamp maintienne à jour des informations sur le nombre de blocs de mémoire associé à un poinçon IOStamp à l'intérieur d'une plage préconfigurée. Dans certains modes de réalisation, la liste de poinçons IOStamp peut être ordonnée de telle sorte que, par exemple, le premier noeud dans la liste est associé à la plus basse plage de poinçons IOStamps et que le dernier noeud dans la liste est associé à la plus haute 15 plage de poinçons IOStamps. [0043] Dans certains modes de réalisation, le contrôleur de mémoire peut utiliser la liste de poinçons IOStamp pour définir le seuil de poinçon IOStampThreshold de sorte qu'un rapport W entre le nombre de blocs de mémoire cibles et le nombre total de blocs de mémoire contenus dans la mémoire cache est fixe. Par exemple, le contrôleur de mémoire peut déterminer le 20 nombre de blocs de mémoire avec des poinçons IOStamps dans la plus basse plage de poinçons IOStamps (par exemple 0 5_ 10Stamp < L1), et utiliser cette information pour déterminer le seuil de poinçon IOStampThreshold de sorte que le nombre de blocs de mémoire ayant un poinçon IOStamp inférieur au seuil de poinçon IOStampThreshold est égal dans les grandes lignes aux W fois du nombre total de blocs de mémoire contenus dans la mémoire cache.
25 100441 Dans certains cas, le rapport W peut être prédéterminé par un utilisateur ; dans d'autres cas, ce rapport W peut être automatiquement défini par le contrôleur de mémoire sur la base du nombre d'itérations nécessaires pour sélectionner un bloc de mémoire cible. [0045] Le mécanisme LRU modifié a un avantage significatif dans l'utilisation de la mémoire par rapport au mécanisme LRU traditionnel. Au lieu de 16 octets par bloc de données 30 nécessaires pour maintenir la liste à chaînon double pour le mécanisme LRU traditionnel, le -10- 3027128 contrôleur de mémoire peut mettre en oeuvre le mécanisme LRU modifié à l'aide de seulement 4 octets par bloc de mémoire étant donné que le contrôleur de mémoire n'a besoin que de maintenir le poinçon IOStamp par bloc de mémoire. C'est pourquoi le contrôleur de mémoire peut mettre en oeuvre le mécanisme LRU modifié en consommant environ 25 % seulement de la 5 mémoire nécessaire au mécanisme LRU traditionnel. [0046] La figure 1 illustre un exemple de système informatique 100 ayant un système de stockage selon certains modes de réalisation de la présente invention. Le système informatique 100 peut comprendre un dispositif hôte 102 et un système de stockage 104, le système de stockage 104 comprenant une mémoire cache 106, un contrôleur de mémoire 110 et un ou 10 plusieurs dispositifs de stockage 108a-108c. La mémoire cache 106 peut, à son tour, comprendre une pluralité de blocs de mémoire 112 pour maintenir des données. Chacun des blocs de mémoire 112 dans la mémoire cache peut avoir une taille fixe. Par exemple, un bloc de mémoire 112 dans la mémoire cache 106 peut être long de 4KB. Le ou les dispositifs de stockage 108a-108c peuvent également comprendre une pluralité de blocs de mémoire pour maintenir des 15 données. Dans certains modes de réalisation, le contrôleur de mémoire 110 peut résider dans la mémoire cache 106. [0047] Le dispositif hôte 102 peut comprendre n'importe quel système informatique utilisant un système de stockage 104 et y accédant pour des opérations de lecture de données et d'écriture de données. Un tel dispositif hôte 102 peut faire tourner des applications telles que des bases de 20 données, des systèmes d'archivage et des services Web. Dans certains modes de réalisation, le dispositif hôte 102 peut être physiquement positionné avec le système de stockage 104 (par exemple positionné physiquement à proximité de lui). Dans de tels modes de réalisation, le dispositif hôte 102 peut être configuré pour communiquer avec le système de stockage 104 via un bus. Le bus peut comprendre, par exemple, PCI, PCI-Express, PCI-X, InfiniBand, 25 HyperTransport, la carte SCSI PCI-E, la carte SATA PCI-E, la carte d'adaptateur iSCSI et la carte de canal de fibre PCI-E. Dans d'autres modes de réalisation, le dispositif hôte 102 peut être physiquement séparé du système de stockage 104. Dans de tels modes de réalisation, le dispositif hôte 102 peut communiquer avec le système de stockage 104 via un réseau de communication. Le réseau peut comprendre Internet, un réseau local (LAN), un réseau de données en paquets, un 30 réseau public ou n'importe quel type de réseau capable de réaliser la communication de données entre le dispositif hôte 102 et le système de stockage 104. 3027128 [0048] La mémoire cache 106 peut comprendre un dispositif de mémoire avec un temps d'accès rapide. Dans certains modes de réalisation, le dispositif de mémoire à accès rapide dans la mémoire cache 106 peut comprendre une mémoire à accès aléatoire statique (SRAM). [0049] Dans d'autres modes de réalisation, le dispositif de mémoire à accès rapide dans la 5 mémoire cache 106 peut comprendre un lecteur à état solide (SSD) pouvant comprendre n'importe quels dispositifs de mémoire à état solide tels qu'une mémoire flash à grille NAND, une mémoire flash à grille NOR, une mémoire à changement de phase (PCM) ou n'importe quelle mémoire à état solide non volatile ayant comme propriétés, par exemple, un temps d'accès rapide. 10 [0050] Dans certains modes de réalisation, un contrôleur de mémoire 110 est mis en oeuvre sur le plan matériel. Le matériel peut comprendre des circuits logiques et/ou une mémoire pour sélectionner des blocs de mémoire cibles et pour supprimer les données provenant des blocs de mémoire cibles sélectionnés pour recevoir de nouvelles données. Dans certains modes de réalisation, le matériel utilisé pour le contrôleur de mémoire 110 peut être mis en oeuvre à l'aide 15 d'un langage de description de matériel comprenant Verilog, le langage de description de matériel VHSIC (VHDL), et BlueSpecTM (Bluespec Inc., Framingham, Massachusetts, États-Unis), et être synthétisé à l'aide d'outils de synthèse logiques comprenant Design Compiler® (Synopsis Inc., Mountain View, Californie, États-Unis), Encounter RTL compiler (Cadence Design Systems Inc., San Jose, Californie, États-Unis), RealTime Designer (Oasys Design 20 Systems, Inc., Santa Clara, Californie, États-Unis) et BooleDozer (International Business Machine, Endicott, New York, États-Unis). [0051] Dans certains modes de réalisation, un contrôleur de mémoire 110 est mis en oeuvre comme une partie de micrologiciel. Tel qu'exposé plus en détail ci-dessous, le micrologiciel peut allouer un espace de mémoire pour maintenir un tableau de poinçons IOStamp et une liste de 25 poinçons IOStamp et peut en outre comprendre des instructions pouvant être activées pour déterminer un bloc de mémoire à supprimer sur la base du mécanisme LRU modifié. [0052] Dans certains modes de réalisation, le contrôleur de mémoire 110 peut être mis en oeuvre de façon logicielle en utilisant une mémoire telle qu'un support lisible par ordinateur non transitoire, une mémoire à lecture seule programmable (PROM) ou une mémoire flash. Le 30 logiciel peut être exécuté sur un processeur pouvant être positionné dans le contrôleur de - 12 - 3027128 mémoire 110 qui exécute les instructions ou un code informatique pouvant être placé dans un support lisible par ordinateur non transitoire placé dans le contrôleur de mémoire 110. [0053] Dans certains modes de réalisation, le dispositif de stockage 108 peut être mis en oeuvre à l'aide de lecteurs de disque dur (HDDs). Dans d'autres modes de réalisation, le 5 dispositif de stockage 108 peut également être mis en oeuvre à l'aide d'une RAM non volatile (NVRAM), du stockage de systèmes microélectromécaniques (MEMS) ou d'une mémoire à accès aléatoire dynamique (DRAM) à pile de relève. [0054] Le dispositif hôte 102 peut être configuré pour transmettre des demandes de lecture et d'écriture au système de stockage 104 qui peut être reçu au niveau du contrôleur de mémoire 10 110. Par la suite, le contrôleur de mémoire 110 peut traiter les demandes de lecture et d'écriture des données sur des dispositifs de stockage 108a-108c associés. Par exemple, pour traiter une demande de lecture, le contrôleur de mémoire 110 peut déterminer si oui ou non les données correspondant à une adresse de mémoire demandée sont mémorisées dans un ou plusieurs des blocs de mémoire 112 contenus dans la mémoire cache 106 (c'est-à-dire si oui ou non l'adresse 15 de mémoire demandée est placée en mémoire cache). Si l'adresse de mémoire demandée est placée en mémoire cache, cette situation peut parfois être appelée un « succès de lecture ». Si l'adresse de mémoire demandée n'est pas placée en mémoire cache, cette situation peut être appelée « échec de lecture ». En cas de succès de lecture, le contrôleur de mémoire 110 peut renvoyer les données demandées plus rapidement directement à partir des blocs de mémoire 112.
20 Au contraire, en cas de « échec de lecture », le contrôleur de mémoire 110 peut récupérer les données demandées provenant du ou des dispositifs de stockage 108 plus lents et en option mémoriser les données récupérées dans un des blocs de mémoire 112 vides contenus dans la mémoire cache 106. [0055] De façon similaire, pour traiter une demande d'écriture, le contrôleur de mémoire 110 25 peut déterminer si oui ou non une adresse de mémoire demandée est déjà mémorisée dans un ou plusieurs des blocs de mémoire 112 dans la mémoire cache 106. Si l'adresse de mémoire demandée est placée en mémoire cache, cette situation peut parfois être appelée « succès d'écriture ». Si l'adresse de mémoire demandée n'est pas placée en mémoire cache, cette situation peut être appelée « échec d'écriture ». En cas de succès d'écriture, la mémoire cache 30 106 peut se mettre à jour elle-même ainsi que les dispositifs de stockage 108 plus lents pour - 13 - 3027128 refléter les nouvelles données pour l'adresse de mémoire demandée ; en cas d'échec d'écriture, la mémoire cache 106 peut mettre à jour les dispositifs de stockage 108 plus lents pour refléter les nouvelles données pour l'adresse de mémoire demandée. [0056] Tel qu'exposé ci-dessus, en cas d'échec de lecture, la mémoire cache 106 peut 5 mémoriser les données provenant de l'adresse de mémoire demandée dans un des blocs de mémoire vides contenus dans la mémoire cache 106. Cependant, lorsque tous les blocs de mémoire contenus dans la mémoire cache sont pleins, la mémoire cache 106 doit supprimer (ou retirer) des données dans un des blocs de mémoire pour faire de l'espace pour les nouvelles données. 10 [0057] Pour améliorer l'efficacité, dans certains modes de réalisation, le contrôleur de mémoire 110 peut être configuré pour supprimer un des blocs de mémoire utilisés moins récemment, contrairement à la suppression d'un bloc de mémoire aléatoire contenu dans la mémoire cache 106. Ce mécanisme servant à sélectionner un bloc de mémoire pour sa suppression est appelé mécanisme utilisé moins récemment. Lorsque le nombre de blocs de 15 mémoire utilisés moins récemment, également appelé blocs de mémoire cibles, est petit comparé au nombre total de blocs de mémoire, alors la performance du mécanisme moins récemment utilisé peut être sensiblement similaire à la performance du mécanisme le moins récemment utilisé. Le rapport du nombre de blocs de mémoire cibles et du nombre total de blocs de mémoire peut être appelé W. Dans certains modes de réalisation, W est défini pour être inférieur à ou égal 20 à 0,01. [0058] Pour mettre en oeuvre le mécanisme utilisé moins récemment (« mécanisme LRU modifié »), le contrôleur de mémoire 110 est configuré pour maintenir un tableau de poinçons IOStamp. Le tableau de poinçons IOStamp comprend le même nombre d'entrées que le nombre de blocs de mémoire 112. Chaque entrée dans le tableau de poinçons IOStamp correspond à un 25 bloc de mémoire particulier dans la mémoire cache et peut indiquer le poinçon IOStamp associé à ce bloc de mémoire particulier, qui, tel qu'exposé ci-dessus, peut indiquer un ordre dans lequel on a accédé aux blocs de mémoire. Le contrôleur de mémoire 110 peut être configuré pour mettre à jour le tableau de poinçons IOStamp à mesure que l'on accède aux blocs de mémoire 112 de sorte que le bloc de mémoire auquel on a accédé le plus récemment a un poinçon 30 IOStamp qui est au moins aussi élevé que le poinçon IOStamp d'autres blocs de mémoire. - 14 - 3027128 [0059] Lorsque le contrôleur de mémoire 110 reçoit une demande de données provenant d'un dispositif hôte 102, le contrôleur de mémoire 110 peut déterminer si oui ou non les données demandées sont mémorisées dans un ou plusieurs blocs de mémoire 112. Si les données demandées sont mémorisées dans un ou plusieurs blocs de mémoire 112, le contrôleur de 5 mémoire 110 peut récupérer les données provenant du ou des blocs de mémoire 112 et amener les données récupérées au dispositif hôte 102. Si les données demandées ne sont pas mémorisées dans un ou plusieurs blocs de mémoire 112, le contrôleur de mémoire 110 peut récupérer les données demandées provenant du ou des dispositifs de stockage 108 et, en option, mémoriser ces de nouvelles données dans un ou plusieurs blocs de mémoire 112 contenus dans la mémoire 10 cache 106. [0060] Pour déterminer lequel des blocs de mémoire 112 doit maintenir de nouvelles données, le contrôleur de mémoire 110 est configuré pour demander aléatoirement des entrées dans le tableau de poinçons IOStamp jusqu'à ce que le contrôleur de mémoire 110 identifie une entrée ayant un poinçon IOStamp inférieur à un seuil de poinçon IOStampThreshold 15 prédéterminé. Par exemple, le contrôleur de mémoire 110 peut utiliser un générateur de nombre aléatoire pour générer aléatoirement un nombre correspondant à un identifiant de bloc de mémoire. Le contrôleur de mémoire 110 peut utiliser l'identifiant de bloc de mémoire pour demander l'entrée dans le tableau de poinçons IOStamp correspondant à l'identifiant de bloc de mémoire, déterminant ainsi le poinçon IOStamp associé à l'identifiant de bloc de mémoire 20 sélectionné aléatoirement. [0061] Par la suite, le contrôleur de mémoire 110 peut comparer le poinçon IOStamp déterminé avec le seuil de poinçon IOStampThreshold. Si le poinçon IOStamp associé à l'entrée demandée est supérieur au seuil de poinçon IOStampThreshold prédéterminé, le contrôleur de mémoire 110 peut demander une autre entrée aléatoire dans le tableau de poinçons IOStamp et 25 répéter le procédé. Cependant, si le poinçon IOStamp associé à l'entrée demandée est inférieur ou égal au seuil de poinçon IOStampThreshold prédéterminé, alors le contrôleur de mémoire 110 peut sélectionner le bloc de mémoire associé à l'entrée demandée, supprimer les données provenant du bloc de mémoire sélectionné et écrire, dans le bloc de mémoire sélectionné, les nouvelles données récupérées du ou des dispositifs de stockage 108. - 15 - 3027128 [0062] Mathématiquement parlant, lorsque le nombre total de blocs de mémoire est de 2 milliards et que le rapport du nombre de blocs de mémoire cibles sur le nombre total de blocs de mémoire est de 0,01, la probabilité de trouver un des blocs de mémoire cibles à travers des requêtes aléatoires est suffisamment élevée avec le petit nombre de requêtes. La figure 2 illustre 5 une probabilité de trouver un des blocs de mémoire -ables -àtravers des requêtes aléatoires en fonction du nombre de requêtes aléatoires. Comme le montre la figure 2, même avec 500 requêtes, la probabilité de trouver un des blocs de mémoire cibles est supérieur à 99 %. [0063] Le mécanisme LRU modifié peut utiliser plusieurs variables pour maintenir un tableau de poinçons IOStamp mis à jour et pour mettre à jour le seuil de poinçon 10 IOStampThreshold dé sorte que le nombre de blocs de mémoire cibles est égal à WZ, où W est le rapport souhaité du nombre de blocs de mémoire cibles sur le nombre total de blocs de mémoire et Z est le nombre total de blocs de mémoire 112 dans la mémoire cache 106. [0064] Le mécanisme LRU modifié peut utiliser une ou plusieurs variables parmi les variables suivantes : IOCounter, GloballncrementalTag, BumpupCounter et IOStamp. 15 [0065] Dans certains modes de réalisation, IOCounter indique un nombre d'opérations d'entrée/sortie traitées par le contrôleur de mémoire 110 depuis le moment de la réinitialisation de IOCounter et BumpUpCounter indique un nombre d'opérations d'entrée/sortie à traiter par le contrôleur de mémoire 110 avant la réinitialisation du compteur IOCounter à 0. Chaque fois que le compteur d'entrée/sortie IOCounter atteint le compteur de majoration BumpUpCounter, le 20 contrôleur de mémoire 110 peut incrémenter la balise incrémentielle globale GloballncrementalTag de un. [0066] Dans certains modes de réalisation, le contrôleur de mémoire 110 peut utiliser la balise incrémentielle globale GloballncrementalTag pour attribuer un poinçon IOStamp aux blocs de mémoire. Par exemple, lorsqu'une nouvelle opération d'entrée/sortie est reçue, le 25 contrôleur de mémoire 110 peut attribuer un poinçon IOStamp ayant la valeur de la balise incrémentielle globale GloballncrementalTag au bloc de mémoire associé à cette nouvelle opération d'entrée/sortie, tel que décrit plus en détail ci-dessous. [0067] Dans certains modes de réalisation, les poinçons IOStamps de blocs de mémoire peuvent être mémorisés dans un tableau de poinçons IOStamp. Tel qu'exposé brièvement ci-30 dessus, le tableau de poinçons IOStamp peut comprendre le même nombre d'entrées que le - 16 - 3027128 nombre de blocs de mémoire 112 dans la mémoire cache 106 et chaque entrée contenue dans le tableau de poinçons IOStamp peut maintenir un poinçon IOStamp du bloc de mémoire associé à 1' entrée. [0068] Dans certains modes de réalisation, le contrôleur de mémoire 110 peut maintenir une 5 liste de poinçons IOStamp conçue pour indiquer un nombre de blocs de mémoire ayant un poinçon IOStamp compris dans une plage préconfigurée. Une liste de poinçons IOStamp peut comprendre un ou plusieurs noeuds et chaque noeud de la liste de poinçons IOStamp peut maintenir au moins deux variables : (1) un poinçon IOStamp et (2) un nombre de blocs NoOfBlocks. Par exemple, supposons qu'une liste de poinçons IOStamp est une rangée de cinq 10 noeuds, référencés comme I[i], i=0...4 et que les variables dans le noeud respectif sont référencées à l'aide d'un opérateur de point : I[i].IOStamp et I[i].NoOfBlocks. Alors I[i].NoOfBlocks peut être associé au nombre de blocs de mémoire 112 ayant le poinçon IOStamp entre (I[i-1].IOStamp + 1) et I[i].IOStamp, inclusif des deux. Dans le cas limite du premier noeud I[0] dans la liste de poinçons IOStamp, I[0].NoOfBlocks peut indiquer le nombre de blocs de 15 mémoire ayant un poinçon IOStamp inférieur ou égal à I[0].I0Stamp. [0069] Par exemple, supposons que Lo, L1, ..., Ln_1, Ln soient des nombres réels. I[0].NoOfBlocks peut indiquer un nombre de blocs de mémoire ayant le poinçon IOStamp à l'intérieur de la plage 0 10Stamp < Lo ; I[1].NoOfBlocks peut indiquer un nombre de blocs de mémoire ayant le poinçon IOStamp à l'intérieur de la plage Lo 10Stamp < L1 ; ; et 20 I[n].NoOfBlocks peut indiquer un nombre de blocs de mémoire ayant le poinçon IOStamp à l'intérieur de la plage de Ln_i 10Stamp < Ln, oùLo=I[0].IOStamp, Li=I[1].I0Stamp, ... Ln_ 1=I[n-1].I0Stamp, et Ln=I[n].I0Stamp. Étant donné que la longueur de la liste de poinçons IOStamp dépend du nombre de plages IOStamp distinctes, la longueur de la liste de poinçons IOStamp peut être beaucoup plus courte que le nombre total de blocs de mémoire 112 dans la 25 mémoire cache 106. [0070] Dans certains modes de réalisation, le contrôleur de mémoire 110 est configuré pour mettre à jour le compteur d'entrée/sortie IOCounter, la balise incrémentielle globale GloballncrementalTag, le compteur de majoration BumpUpCounter et la liste de poinçons IOStamp lorsque le contrôleur de mémoire traite les demandes d'accès à la mémoire. De cette 30 façon, le contrôleur de mémoire 110 peut décrire précisément l'état de flux du système de -17- 3027128 mémoire cache à l'aide du compteur d'entrée/sortie IOCounter, de la balise incrémentielle globale GlobalIncrementalTag, du compteur de majoration BumpUpCounter et de la liste de poinçons IOStamp et utiliser ces variables mises à jour pour sélectionner un des blocs de mémoire cibles pour écrire les opérations. Le procédé selon lequel le contrôleur de mémoire 110 5 met à jour le compteur d'entrée/sortie IOCounter, la balise incrémentielle globale GlobalIncrementalTag, le compteur de majoration BumpUpCounter et la liste de poinçons IOStamp selon certains modes de réalisation est exposé sur les figures 3A-3B ; le procédé selon lequel le contrôleur de mémoire 110 utilise des variables mises à jour pour sélectionner un bloc de mémoire cible pour écrire les opérations selon certains modes de réalisation est exposé sur la 10 figure 4. [0071] Les figures 3A-3B illustrent un procédé selon lequel un contrôleur de mémoire traite une demande d'accès à la mémoire selon certains modes de réalisation de la présente invention. À travers ce procédé, le contrôleur de mémoire 110 peut maintenir un tableau de poinçons IOStamp mis à jour et des données mises à jour pour les blocs de mémoire 112, ainsi que 15 maintenir des informations suffisantes pour identifier les blocs de mémoire cibles. Plus particulièrement, lorsque Z est le nombre total de blocs de mémoire 112 dans la mémoire cache 106 et W est le rapport entre le nombre de blocs de mémoire cibles et Z, ce procédé permet au contrôleur de mémoire 110 de classer 1,5WZ blocs de mémoire comme blocs de mémoire cibles (par exemple les blocs de mémoire moins récemment utilisés que les blocs de mémoire restants). 20 [0072] À l'étape 302, le contrôleur de mémoire 110 est configuré pour définir plusieurs variables à utiliser pour le mécanisme LRU modifié. Plus particulièrement, le contrôleur de mémoire 110 peut réinitialiser le compteur d'entrée/sortie IOCounter et la balise incrémentielle globale GlobalIncrementalTag à 0, placer le compteur de majoration BumpUpCounter sur WZ/2 et initialiser le tableau de poinçons IOStamp et la liste de poinçons IOStamp. La conséquence de 25 placer le compteur de majoration BumpUpCounter sur WZ/2 est expliquée plus en détail ci-dessous. L'initialisation du tableau de poinçons IOStamp peut comprendre une instanciation d'un tableau ayant le même nombre d'entrées que le nombre de blocs de mémoire 112 et la définition de la valeur des entrées à 0. L'initialisation de la liste de poinçons IOStamp peut comprendre l'instanciation d'une liste chaînée ayant zéro nombre de noeuds (par exemple l'instanciation d'un 30 pointeur pour la liste de poinçons IOStamp). -18- 3027128 [0073] À l'étape 304, le contrôleur de mémoire 110 peut recevoir une demande d'accès à la mémoire provenant d'un dispositif hôte. La demande d'accès à la mémoire peut comprendre une adresse de mémoire à laquelle la demande d'accès à la mémoire est ciblée. La demande d'accès à la mémoire peut comprendre une demande de lecture de mémoire demandant au système de 5 stockage 104 de fournir des données stockées à une adresse de mémoire particulière ou une demande d'écriture de mémoire demandant au système de stockage 104 d'écrire des données sur une adresse de mémoire particulière. À l'étape 306, le contrôleur de mémoire 110 peut augmenter le compteur d'entrée/sortie IOCounter de 1. [0074] À l'étape 308, le contrôleur de mémoire 110 peut analyser l'adresse de mémoire dans 10 la demande d'accès à la mémoire pour déterminer si oui ou non la demande d'accès à la mémoire est associée à un ou plusieurs blocs de mémoire 112 dans la mémoire cache 106. Si la demande d'accès à la mémoire est associée à un ou plusieurs blocs de mémoire contenus dans la mémoire cache 106, le contrôleur de mémoire 110 pour poursuivre aux étapes 310 et 312 ; sinon, le contrôleur de mémoire 110 pour poursuivre aux étapes 314 et 316. 15 [0075] À l'étape 310, étant donné que la demande d'accès à la mémoire est associée à un ou plusieurs blocs de mémoire contenus dans la mémoire cache 106, le contrôleur de mémoire 110 peut effectuer l'opération d'accès à la mémoire demandée sur le ou les blocs de mémoire contenus dans la mémoire cache 106. Par exemple, si la demande d'accès à la mémoire est une demande de lecture de mémoire, le contrôleur de mémoire 106 peut récupérer les données 20 provenant du ou des blocs de mémoire contenus dans la mémoire cache 106 et amener les données récupérées au dispositif hôte 102. Autre exemple : si la demande d'accès à la mémoire est une demande d'écriture de mémoire, le contrôleur de mémoire 106 peut écrire les données sur le ou les blocs de mémoire contenus dans la mémoire cache 106, ainsi que les blocs de mémoire associés dans le dispositif de stockage 108. 25 [0076] À l'étape 312, le contrôleur de mémoire 110 peut mettre à jour le poinçon IOStamp pour le bloc de mémoire associé à la demande d'accès à la mémoire. Plus particulièrement, le contrôleur de mémoire 110 peut identifier une entrée du tableau de poinçons IOStamp associée au bloc de mémoire et déterminer si oui ou non le poinçon IOStamp du bloc de mémoire est différent de la balise incrémentielle globale GloballncrementalTag actuelle. Si c'est le cas, le 30 contrôleur de mémoire 110 définit l'entrée comme égale à la balise incrémentielle globale -19- 3027128 GloballncrementalTag actuelle. De plus, le contrôleur de mémoire 110 peut diminuer, de un, la valeur du nombre de blocs « NoOfBlocks » du noeud de liste de poinçons IOStamp précédemment associé au bloc de mémoire. Plus particulièrement, le contrôleur de mémoire 110 peut identifier le poinçon IOStamp précédent du bloc de mémoire et identifier le noeud de liste de 5 poinçons IOStamp associé à ce poinçon IOStamp précédent. Pour identifier le noeud de liste de poinçons IOStamp associé à ce poinçon IOStamp précédent, le contrôleur de mémoire 110 peut balayer les noeuds dans la liste de poinçons IOStamp pour identifier le noeud I[i] de telle sorte que le poinçon IOStamp précédent est entre I[i-1].IOStamp + 1 et I[i].IOStamp, inclusif des deux. Une fois que le contrôleur de mémoire 110 identifie le noeud de liste de poinçons IOStamp 10 associé à ce poinçon IOStamp précédent, le contrôleur de mémoire 110 peut réduire la valeur du nombre de blocs « NoOfBlocks » du noeud de liste de poinçons IOStamp identifié de un. [0077] Le contrôleur de mémoire 110 peut également déterminer si oui ou non n'importe quels noeuds consécutifs dans la liste de poinçons IOStamp doivent être coïncidents. Dans certains modes de réalisation, le contrôleur de mémoire 110 peut déterminer de faire coïncider 15 deux noeuds consécutifs d'une liste de poinçons IOStamp, appelée I[i] et I[i+1], lorsque le nombre de blocs de mémoire associé aux deux noeuds consécutifs est inférieur au compteur de majoration BumpUpCounter : I[i].NoOfBlocks + I[i+1].NoOfBlocks < BumpUpCounter. Pour la condition limite de i=0, le contrôleur de mémoire 110 peut déterminer de faire coïncider 20 deux noeuds consécutifs I[0] et I[1] lorsque le nombre de blocs de mémoire dans le premier noeud de la liste de poinçons IOStamp (c'est-à-dire, I[0].NoOfBlocks) est inférieur au nombre souhaité de blocs de mémoire cibles. Par exemple, supposons que Z est le nombre total de blocs de mémoire 112 dans la mémoire cache 106 et W est le rapport du nombre de blocs de mémoire cibles sur Z. Le contrôleur de mémoire 110 est configuré pour déterminer si oui ou non le 25 nombre de blocs de mémoire dans le premier noeud de la liste de poinçons IOStamp est inférieur à WZ : I[0].IOStamp < WZ Si c'est le cas, le contrôleur de mémoire 110 peut définir le seuil de poinçon IOStampThreshold comme étant le poinçon IOStamp du second noeud (c'est-à-dire que IOStampThreshold = 30 I[1].IOStamp), et faire coïncider I[0] et I[1]. Étant donné que le contrôleur de mémoire 110 -20- 3027128 définit le compteur de majoration BumpUpCounter comme WZ/2, ce schéma de mise en coïncidence de noeud peut garantir que le nombre de blocs de mémoire avec le poinçon IOStamp inférieur à ou égal au poinçon IOStamp du premier noeud (c'est-à-dire, I[0].IOStamp) est toujours dans la plage de : 5 WZ < (nombre de blocs de mémoire avec IOStamp <= I[0].IOStamp) < 1,5 WZ Le contrôleur de mémoire 110 peut utiliser cette caractéristique pour définir le seuil de poinçon IOStampThreshold sur la base de I[0].IOStamp, tel qu'exposé plus en détail ci-dessous. [0078] Si le contrôleur de mémoire 110 décide de faire coïncider deux noeuds consécutifs d'une liste de poinçons IOStamp, appelés I[i] et I[i+1], alors le contrôleur de mémoire 110 peut 10 définir le poinçon IOStamp du noeud I'[i] coïncident (par exemple I' UPOStamp) comme étant le poinçon IOStamp le plus élevé des noeuds coïncidents (par exemple I[i+1].IOStamp,) définir le nombre de blocs NoOfBlocks du noeud I'[i] coïncident (par exemple I'[i].NoOfBlocks) comme étant la somme du nombre de blocs NoOfBlocks des noeuds coïncidents (par exemple I[i].NoOfBlocks + I[i+1].NoOfBlocks,) et réindexer les noeuds dans la liste de poinçons IOStamp 15 de sorte que, pour tous les noeuds ayant l'indice j supérieur à i, I' [j] = I[i+1]. [0079] À l'étape 314, étant donné que la demande d'accès à la mémoire n'est associée à aucun des blocs de mémoire 112 dans la mémoire cache 106, le contrôleur de mémoire 110 peut relayer la demande d'accès à la mémoire au dispositif de stockage 108 de sorte que l'opération d'accès à la mémoire demandée est effectuée au niveau du dispositif de stockage 108. 20 [0080] À l'étape 316, le contrôleur de mémoire 110 peut mettre à jour la mémoire cache 106 de sorte que la mémoire cache 106 peut maintenir les données transférées entre le dispositif hôte 102 et le dispositif de stockage 108. Par exemple, si la demande d'accès à la mémoire était une demande de lecture de mémoire, alors les données récupérées du dispositif de stockage 108 peuvent être mémorisées dans un ou plusieurs blocs de mémoire 112 de sorte que si le dispositif 25 hôte 102 redemande les mêmes données, le contrôleur de mémoire 110 peut fournir les données sans avoir à accéder au dispositif de stockage 108. De façon similaire, si la demande d'accès à la mémoire était une demande d'écriture de mémoire, alors les données écrites dans le dispositif de stockage 108 peuvent également être mémorisées dans un ou plusieurs blocs de mémoire 112 de sorte que si le dispositif hôte 102 demande ces données, le contrôleur de mémoire 110 peut 30 fournir les données sans accéder au dispositif de stockage 108. -21- 3027128 [0081] Dans certains cas, tous les blocs de mémoire 112 peuvent être pleins (par exemple tous les blocs de mémoire 112 stockent déjà des données). Dans de tels cas, le contrôleur de mémoire 110 peut sélectionner un des blocs de mémoire utilisés moins récemment (par exemple des blocs de mémoire cibles), supprimer les données provenant du bloc de mémoire sélectionné, 5 et écrire de nouvelles données (par exemple les données récupérées du dispositif de stockage 108 ou les données écrites dans le dispositif de stockage 108) dans le bloc de mémoire sélectionné. [0082] À l'étape 318, le contrôleur de mémoire 110 peut déterminer si oui ou non le compteur d'entrée/sortie IOCounter est égal au compteur de majoration BumpUpCounter. Si le compteur d'entrée/sortie IOCounter est égal au compteur de majoration BumpUpCounter, alors 10 le contrôleur de mémoire 110 est configuré pour réinitialiser le compteur d'entrée/sortie IOCounter à 0. Le contrôleur de mémoire 110 peut également être configuré pour ajouter un noeud à la liste de poinçons IOStamp correspondant à la balise incrémentielle globale GlobalIncrementalTag. Par exemple, supposons qu'une liste de poinçons IOStamp est une rangée de cinq noeuds, référencés comme I[i], i=0...4. Si le compteur d'entrée/sortie IOCounter 15 est égal au compteur de majoration BumpUpCounter, alors le contrôleur de mémoire 110 peut ajouter I[5] à la liste de poinçons IOStamp, où I[5].I0Stamp est défini comme la balise incrémentielle globale GloballncrementalTag et I[5].NoOfBlocks est défini comme le compteur de majoration BumpUpCounter (étant donné que le contrôleur de mémoire 110 a attribué la balise incrémentielle globale GlobalIncrementalTag comme poinçon IO au nombre de blocs de 20 mémoire du compteur de majoration « BumpUpCounter ».) Par la suite, le contrôleur de mémoire 110 peut augmenter la balise incrémentielle globale GlobalIncrementalTag de 1. Dans certains modes de réalisation, l'étape 318 peut être effectuée entre l'étape 306 et l'étape 308. [0083] À l'étape 320, lorsque le contrôleur de mémoire 110 supprime les données provenant d'un bloc de mémoire dans la mémoire cache, le contrôleur de mémoire 110 peut diminuer, de 25 un, la valeur du nombre de blocs « No0f13locks » du noeud de liste de poinçons IOStamp associé au bloc de mémoire. Plus particulièrement, le contrôleur de mémoire 110 peut identifier le poinçon IOStamp du bloc de mémoire et identifier le noeud de liste de poinçons IOStamp associé à ce poinçon IOStamp. Pour identifier le noeud de liste de poinçons IOStamp associé à ce poinçon IOStamp, le contrôleur de mémoire 110 peut balayer les noeuds dans la liste de poinçons 30 IOStamp pour identifier le noeud I[i] de telle sorte que le poinçon IOStamp est entre I[i- 1].I0Stamp + 1 et I[i].IOStamp, inclusif des deux. Une fois que le contrôleur de mémoire 110 -22- 3027128 identifie le noeud de liste de poinçons IOStamp associé à ce poinçon IOStamp, le contrôleur de mémoire 110 peut réduire de un la valeur du nombre de blocs « NoOfBlocks » du noeud de liste de poinçons IOStamp identifié. [0084] À l'étape 322, le contrôleur de mémoire 110 est configuré pour mettre à jour le seuil 5 de poinçon IOStampThreshold. Étant donné que le premier noeud de la liste de poinçons IOStamp peut avoir coïncidé avec le second noeud de la liste de poinçons IOStamp, le contrôleur de mémoire 110 peut mettre à jour le seuil de poinçon IOStampThreshold comme étant le poinçon IOStamp du premier noeud dans la liste de poinçons IOStamp (c'est-à-dire, I[0].I0Stamp). 10 [0085] Dans certains modes de réalisation, le contrôleur de mémoire 110 peut utiliser ces variables pour sélectionner un des blocs de mémoire cibles à travers un échantillonnage aléatoire. La figure 4 illustre un procédé pour sélectionner un des blocs de mémoire cibles selon certains modes de réalisation de la présente invention. À l'étape 402, le contrôleur de mémoire 110 peut sélectionner aléatoirement un bloc de mémoire. Par exemple, le contrôleur de 15 mémoire 110 peut utiliser un générateur de nombre aléatoire pour générer aléatoirement un identifiant de bloc de mémoire. À l'étape 404, le contrôleur de mémoire 110 peut récupérer une entrée du tableau de poinçons IOStamp associée au bloc de mémoire sélectionné pour déterminer le poinçon IOStamp du bloc de mémoire sélectionné. [0086] À l'étape 406, le contrôleur de mémoire 110 peut déterminer si oui ou non le 20 poinçon IOStamp du bloc de mémoire sélectionné est inférieur ou égal au seuil de poinçon IOStampThreshold. Si le poinçon IOStamp du bloc de mémoire sélectionné est non inférieur ou égal au seuil de poinçon IOStampThreshold, alors le contrôleur de mémoire 110 peut aller à l'étape 402 et répéter les étapes 402-406. Si le poinçon IOStamp du bloc de mémoire sélectionné est inférieur ou égal au seuil de poinçon IOStampThreshold, alors le contrôleur de 25 mémoire 110 peut aller à l'étape 408. [0087] À l'étape 408, le contrôleur de mémoire 110 peut supprimer les données provenant du bloc de mémoire sélectionné. De plus, le contrôleur de mémoire 110 peut mettre à jour la liste de poinçons IOStamp pour refléter la suppression des données dans le bloc de mémoire sélectionné. Plus particulièrement, le contrôleur de mémoire 110 peut diminuer, de un, le 30 nombre de blocs de mémoire associés au premier noeud dans la liste de poinçons IOStamp - 23 - 3027128 (c'est-à-dire, I[0].NoOfBlocks) pour refléter la suppression du bloc de mémoire sélectionné. Le contrôleur de mémoire 110 peut également déterminer s'il doit faire coïncider les premiers deux noeuds de la liste de poinçons IOStamp (c'est-à-dire, I[0] et I[1]), sur la base de la règle de mise en coïncidence exposée à l'étape 312. 5 [0088] Une fois que le contrôleur de mémoire 110 a supprimé les données provenant d'un bloc de mémoire, le contrôleur de mémoire 110 peut utiliser ce bloc de mémoire pour recevoir de nouvelles données. [0089] Dans certains modes de réalisation, la balise incrémentielle globale GloballncrementalTag a une longueur de 32 bits. Une telle balise incrémentielle globale 10 GloballncrementalTag devrait être suffisamment longue dans des scénarios pratiques. Par exemple, supposons que la taille totale des blocs de mémoire 112 est de 64GO et que la taille de bloc est de 4KB. Le nombre total de blocs de mémoire 112 est donc de 16 millions. Supposons également que le rapport entre le nombre de blocs de mémoire cibles et le nombre total de blocs de mémoire 112 (W) est de 0,01. Dans ce cas, le compteur de majoration BumpUpCounter serait 15 de 80 000. C'est pourquoi le nombre d'opérations d'entrée/sortie avant que le contrôleur de mémoire 110 dépasse la balise incrémentielle globale GloballncrementalTag de 32 bits est de 232 x 80,000 = 0,32 péta opérations d'entrée/sortie ce qui atteindraient la somme de 4092 x 0,32 pétaoctets de transfert de données. Si l'on suppose que la mémoire cache a une vitesse de 1G0 par seconde, le temps nécessaire avant que le contrôleur de mémoire 110 ne dépasse la balise 20 incrémentielle globale GlobalIncrementalTag de 32 bits est approximativement de 43 années. Étant donné que la durée de vie d'une mémoire cache 106 est probablement plus courte que 43 années, 32 bits devraient suffire pour la balise incrémentielle globale GloballncrementalTag dans des scénarios pratiques. [0090] Dans certains modes de réalisation, le rapport entre le nombre de blocs de mémoire 25 cibles et le nombre total de blocs de mémoire 112 (W) qui peut être configuré par l'opérateur de la mémoire cache 106 peut jouer un rôle important. Tel qu'exposé précédemment, W peut déterminer la valeur du compteur de majoration BumpUpCounter qui, à son tour, peut déterminer le nombre de blocs de mémoire cibles. C'est pourquoi, à mesure que W devient petit, la performance du mécanisme LRU modifié peut devenir plus similaire à celle du mécanisme 30 LRU traditionnel, mais il faudrait un nombre d'itérations plus important sur la figure 4 pour identifier un bloc de mémoire cible à supprimer. -24- 3027128 [0091] Dans certains modes de réalisation, le contrôleur de mémoire 110 peut être configuré pour ajuster automatiquement W en fonction du nombre d'itérations nécessaire pour sélectionner un bloc de mémoire cible sur la figure 4. Par exemple, lorsque le nombre d'itérations nécessaire pour sélectionner un bloc de mémoire cible est petit, le contrôleur de mémoire 110 peut réduire 5 W de sorte que la performance du mécanisme LRU modifié suive de près celle du mécanisme LRU traditionnel. Au contraire, lorsque le nombre d'itérations nécessaire pour sélectionner un bloc de mémoire cible est important, le contrôleur de mémoire 110 peut augmenter W de sorte que le contrôleur de mémoire 110 puisse sélectionner un bloc de mémoire cible en un plus petit nombre d'itérations. En effet, le réglage de W peut modifier le compteur de majoration 10 BumpUpCounter et/ou le seuil de poinçon IOStampThreshold, contrôlant ainsi le nombre d'itérations nécessaire à la sélection d'un bloc de mémoire cible. [0092] Lorsque l'on fait référence ici à un procédé comprenant deux étapes définies ou plus, les étapes définies peuvent être réalisées dans n'importe quel ordre ou simultanément (sauf si le contexte précise le contraire), et le procédé peut comprendre une ou plusieurs autres étapes 15 exécutées avant n'importe lesquelles des étapes définies, entre deux des étapes définies ou après toutes les étapes définies (sauf si le contexte fournit une indication contraire). [0093] L'homme du métier verra que les diverses illustrations décrites ici peuvent être mises en oeuvre sous la forme de matériel électronique, de logiciel informatique, de micrologiciel ou de combinaisons de deux éléments ou plus parmi un matériel électronique, un logiciel informatique 20 et un micrologiciel. Pour illustrer ce caractère interchangeable de matériel, logiciel, et/ou micrologiciel, diverses illustrations de blocs, modules, éléments, composants, procédés et algorithmes ont été décrits ci-dessus généralement en fonction de leur fonctionnalité. Qu'un mode de fonctionnement soit mis en oeuvre sous la forme de matériel, de logiciel, de micrologiciel ou d'une combinaison de ceux-ci dépend de l'application particulière et des 25 contraintes de conception imposées à l'ensemble du système. L'homme du métier pourra mettre en oeuvre le mode de fonctionnement décrit de diverses façons pour chaque application particulière. Divers composants et blocs peuvent être agencés différemment (par exemple agencés dans un ordre différent ou segmentés de façon différente) sans sortir de la portée de la technologie exposée. L'invention peut être mise en oeuvre de façon centralisée dans un système 30 informatique ou de façon répartie avec différents éléments disséminés à travers plusieurs - 25 - 3027128 systèmes informatiques interconnectés. Tout type de système informatique ou tout autre appareil conçu pour exécuter les procédés décrits ici est adapté pour exécuter les fonctions décrites ici. [0094] Une combinaison typique de matériel et de logiciel peut prendre la forme d'un système informatique généraliste avec un programme informatique qui, lorsqu'il est chargé et 5 exécuté, commande le système. informatique de telle sorte qu'il exécute les procédés décrits ici. L'élément exposé ici peut également être encastré dans un produit de programme informatique, comprenant toutes les caractéristiques permettant la mise en oeuvre des procédés et systèmes décrits ici, et qui, lorsque chargé dans un système informatique, est capable d'exécuter ces procédés. 10 [0095] Programme informatique ou application signifient dans le présent contexte n'importe quelle expression, dans n'importe quel langage, code ou notation, d'un ensemble d'instructions visant à amener un système ayant une capacité de traitement de l'information à effectuer une fonction particulière soit directement soit après un des éléments suivants soit après les deux : a) conversion dans un autre langage, code ou notation ; b) reproduction dans une forme de matériau 15 différente. Significativement, les systèmes ét procédés décrits ici peuvent également être réalisés dans d'autres formes spécifiques sans sortir de l'esprit ou des attributs essentiels de ceux-ci et il convient par conséquent de se référer aux revendications suivantes plutôt qu'à la description qui précède pour indiquer la portée des systèmes et procédés. [0096] La présente invention a été décrite en détail en faisant spécifiquement référence aux 20 modes de réalisation illustrés. Il apparaîtra cependant que diverses modifications et divers changements peuvent être apportés dans l'esprit et la portée de l'invention telle que décrite dans la description précédente et que de telles modifications et de tels changements doivent être considérés comme équivalents à la présente invention et comme en faisant partie. -26-

Claims (20)

  1. REVENDICATIONS1. Procédé comprenant : la réception, au niveau d'un contrôleur de mémoire dans un système de stockage 5 couplé à un dispositif hôte via une interface, d'une demande d'accès à la mémoire, la demande d'accès à la mémoire comprenant un identifiant de bloc de mémoire qui identifie un bloc de mémoire ; la détermination, au niveau du contrôleur de mémoire, du fait que les données associées à la demande d'accès à la mémoire doivent être mémorisées dans un des blocs de 10 mémoire contenus dans la mémoire cache et que chacun des blocs de mémoire contenus dans la mémoire cache est déjà occupé avec des données valides ; la sélection, par le contrôleur de mémoire, d'un des blocs de mémoire ; la détermination d'un premier décompte de transactions associé au bloc de mémoire sélectionné, le premier décompte de transactions indiquant les informations d'heure/de date 15 auxquelles on a accédé au bloc de mémoire sélectionné, et lorsque le premier décompte de transactions répond à un critère prédéterminé, le fait d'amener, par le contrôleur de mémoire, le bloc de mémoire sélectionné à mémoriser les données ; et lorsque le premier décompte de transactions ne répond pas au critère prédéterminé, la 20 sélection, par le contrôleur de mémoire, d'un autre des blocs de mémoire jusqu'à ce que le contrôleur de mémoire sélectionne un bloc de mémoire dont le décompte de transactions répond au critère prédéterminé.
  2. 2. Procédé selon la revendication 1, dans lequel la sélection d'un des blocs de mémoire 25 comprend la sélection d'un identifiant de bloc de mémoire à l'aide d'un générateur de nombre aléatoire.
  3. 3. Procédé selon la revendication 1, comprenant en outre le maintien d'un seuil de décompte de transactions et le premier décompte de transactions répondant au critère -27- 3027128 prédéterminé lorsque le premier décompte de transactions répond à une condition prédéterminée par rapport au seuil de décompte de transactions.
  4. 4. Procédé selon la revendication 3, le premier décompte de transactions répondant à la condition prédéterminée par rapport au seuil de décompte de transactions lorsque le premier décompte de transactions est inférieur au seuil de décompte de transactions.
  5. 5. Procédé selon la revendication 3, dans lequel, lorsqu'un nombre moyen d'itérations utilisé pour identifier le bloc de mémoire sélectionné est petit, une modification du seuil de 10 décompte de transactions est suscitée pour réduire un nombre de blocs de mémoire répondant au critère prédéterminé.
  6. 6. Procédé selon la revendication 1, comprenant en outre : le maintien d'une liste de décompte de transactions ayant au moins une entrée, l'au 15 moins une entrée indiquant un nombre de blocs de mémoire ayant un décompte de transactions compris dans une plage préconfigurée ; et la détermination du seuil de décompte de transactions sur la base du nombre de blocs de mémoire ayant un décompte de transactions compris dans la plage préconfigurée. 20
  7. 7. Procédé selon la revendication 6, comprenant en outre : la réception d'un paramètre indiquant un nombre de blocs de mémoire répondant au critère prédéterminé ; et la détermination de la plage préconfigurée sur la base du paramètre. 25
  8. 8. Procédé selon la revendication 6, comprenant en outre : la réception, au niveau du contrôleur de mémoire, d'une première demande d'accès à la mémoire, la première demande d'accès à la mémoire comprenant un premier identifiant de bloc de mémoire qui identifie un premier bloc de mémoire ; - 28 - 3027128 la détermination, au niveau du contrôleur de mémoire, du fait que les données associées à la première demande d'accès à la mémoire sont déjà mémorisées dans un des blocs de mémoire contenus dans la mémoire cache ; et la mise à jour d'un décompte de transactions d'un des blocs de mémoire contenus 5 dans la mémoire cache pour refléter la première demande d'accès à la mémoire.
  9. 9. Procédé selon la revendication 6, comprenant en outre l'identification d'une entrée de la liste de décompte de transactions associée au premier bloc de mémoire et la mise à jour du nombre de blocs de mémoire dans l'entrée pour refléter la première demande d'accès à la 10 mémoire.
  10. 10. Système de stockage comprenant : une mémoire cache comprenant une pluralité de blocs de mémoire pour maintenir des données ; et 15 un contrôleur de mémoire configuré pour traiter une demande d'accès à la mémoire reçue d'un dispositif hôte, la demande d'accès à la mémoire comprenant un identifiant de bloc de mémoire qui identifie un bloc de mémoire, le contrôleur de mémoire étant en outre configuré pour : déterminer que les données associées à la demande d'accès à la mémoire doivent être 20 mémorisées dans un des blocs de mémoire contenus dans la mémoire cache et que chacun des blocs de mémoire contenus dans la mémoire cache est déjà occupé avec des données valides ; sélectionner un des blocs de mémoire contenus dans la mémoire cache ; déterminer un premier décompte de transactions associé au bloc de mémoire 25 sélectionné, le premier décompte de transactions indiquant les informations d'heure/de date auxquelles on a accédé au bloc de mémoire sélectionné ; et lorsque le premier décompte de transactions répond à un critère prédéterminé, amener le bloc de mémoire sélectionné à mémoriser les données, et -29- 3027128 lorsque le premier décompte de transactions ne répond pas au critère prédéterminé, sélectionner un autre des blocs de mémoire jusqu'à ce que le contrôleur de mémoire sélectionne un bloc de mémoire dont le décompte de transactions répond au critère prédéterminé. 5
  11. 11. Système de stockage selon la revendication 10, dans lequel le contrôleur de mémoire est configuré pour sélectionner un identifiant de bloc de mémoire à l'aide d'un générateur de nombre aléatoire.
  12. 12. Système de stockage selon la revendication 10, dans lequel le contrôleur de mémoire est configuré pour maintenir un seuil de décompte de transactions, et dans lequel le premier décompte de transactions répond au critère prédéterminé lorsque le premier décompte de transactions répond à une condition prédéterminée par rapport au seuil de décompte de transactions.
  13. 13. Système de stockage selon la revendication 12, dans lequel lorsqu'un nombre moyen d'itérations utilisé pour identifier le bloc de mémoire sélectionné est petit, le contrôleur de mémoire est configuré pour susciter une modification du seuil de décompte de transactions pour réduire un nombre de blocs de mémoire répondant au critère prédéterminé.
  14. 14. Système de stockage selon la revendication 10, dans lequel le contrôleur de mémoire est configuré pour : maintenir une liste de décompte de transactions ayant au moins une entrée, l'au moins une entrée indiquant un nombre de blocs de mémoire ayant un décompte de transactions compris 25 dans une plage préconfigurée ; et déterminer le seuil de décompte de transactions sur la base du nombre de blocs de mémoire ayant un décompte de transactions compris dans la plage préconfigurée. -30- 3027128
  15. 15. Système de stockage selon la revendication 14, dans lequel le contrôleur de mémoire est configuré pour : recevoir un paramètre indiquant un nombre de blocs de mémoire répondant au critère prédéterminé ; et 5 déterminer la plage préconfigurée sur la base du paramètre.
  16. 16. Système de stockage selon la revendication 14, dans lequel le contrôleur de mémoire est configuré pour : recevoir une première demande d'accès à la mémoire, la première demande d'accès à 10 la mémoire comprenant un premier identifiant de bloc de mémoire qui identifie un premier bloc de mémoire ; déterminer que les données associées à la première demande, d'accès à la mémoire sont déjà mémorisées dans un des blocs de mémoire contenus dans la mémoire cache ; et mettre à jour un décompte de transactions d'un des blocs de mémoire contenus dans 15 la mémoire cache pour refléter la première demande d'accès à la mémoire.
  17. 17. Support lisible par ordinateur non transitoire ayant des instructions exécutables pouvant être activées pour amener un contrôleur de mémoire à : recevoir une demande d'accès à la mémoire provenant d'un dispositif hôte sur une 20 interface, la demande d'accès à la mémoire comprenant un identifiant de bloc de mémoire qui identifie un bloc de mémoire ; déterminer que les données associées à la demande d'accès à la mémoire doivent être mémorisées dans un des blocs de mémoire contenus dans la mémoire cache et que chacun des blocs de mémoire contenus dans la mémoire cache est déjà occupé avec des données valides ; sélectionner un des blocs de mémoire contenus dans la mémoire cache ; déterminer un premier décompte de transactions associé au bloc de mémoire sélectionné, le premier décompte de transactions indiquant les informations d'heure/de date auxquelles on a accédé au bloc de mémoire sélectionné ; et -31- 3027128 lorsque le premier décompte de transactions répond à un critère prédéterminé, amener le bloc de mémoire sélectionné à mémoriser les données, et lorsque le premier décompte de transactions ne répond pas au critère prédéterminé, sélectionner un autre des blocs de mémoire jusqu'à ce que le contrôleur de mémoire sélectionne 5 un bloc de mémoire dont le décompte de transactions répond au critère prédéterminé.
  18. 18. Support lisible par ordinateur selon la revendication 17, comprenant en outre des instructions exécutables pouvant être activées pour amener le contrôleur de mémoire à maintenir un seuil de décompte de transactions et le premier décompte de transactions répondant au critère 10 prédéterminé lorsque le premier décompte de transactions répond à une condition prédéterminée par rapport au seuil de décompte de transactions.
  19. 19. Support lisible par ordinateur selon la revendication 17, comprenant en outre des instructions exécutables pouvant être activées pour amener le contrôleur de mémoire à : 15 maintenir une liste de décompte de transactions ayant au moins une entrée, l'au moins une entrée indiquant un nombre de blocs de mémoire ayant un décompte de transactions compris dans une plage préconfigurée ; et déterminer le seuil de décompte de transactions sur la base du nombre de blocs de mémoire ayant un décompte de transactions compris dans la plage préconfigurée. 20
  20. 20. Support lisible par ordinateur selon la revendication 17, comprenant en outre des instructions exécutables pouvant être activées pour amener le contrôleur de mémoire à : recevoir une première demande d'accès à la mémoire, la première demande d'accès à la mémoire comprenant un premier identifiant de bloc de mémoire qui identifie un premier bloc 25 de mémoire ; déterminer que les données associées à la première demande d'accès à la mémoire sont déjà mémorisées dans un des blocs de mémoire contenus dans la mémoire cache ; mettre à jour un décompte de transactions d'un des blocs de mémoire contenus dans la mémoire cache pour refléter la première demande d'accès à la mémoire. -32-
FR1559545A 2014-10-08 2015-10-07 Appareil, systemes et procedes pour fournir une memoire cache a gestion efficace de la memoire Active FR3027128B1 (fr)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14509597 2014-10-08
US14/509,597 US9501419B2 (en) 2014-10-08 2014-10-08 Apparatus, systems, and methods for providing a memory efficient cache

Publications (2)

Publication Number Publication Date
FR3027128A1 true FR3027128A1 (fr) 2016-04-15
FR3027128B1 FR3027128B1 (fr) 2019-04-26

Family

ID=54606223

Family Applications (1)

Application Number Title Priority Date Filing Date
FR1559545A Active FR3027128B1 (fr) 2014-10-08 2015-10-07 Appareil, systemes et procedes pour fournir une memoire cache a gestion efficace de la memoire

Country Status (4)

Country Link
US (1) US9501419B2 (fr)
DE (1) DE102015013125A1 (fr)
FR (1) FR3027128B1 (fr)
GB (1) GB2533992B (fr)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170123796A1 (en) * 2015-10-29 2017-05-04 Intel Corporation Instruction and logic to prefetch information from a persistent memory
WO2019147288A1 (fr) * 2018-01-29 2019-08-01 Hewlett-Packard Development Company, L.P. Protection de données dans un environnement de pré-système d'exploitation
US11288211B2 (en) * 2019-11-01 2022-03-29 EMC IP Holding Company LLC Methods and systems for optimizing storage resources
US11409696B2 (en) 2019-11-01 2022-08-09 EMC IP Holding Company LLC Methods and systems for utilizing a unified namespace
US11294725B2 (en) 2019-11-01 2022-04-05 EMC IP Holding Company LLC Method and system for identifying a preferred thread pool associated with a file system
US11150845B2 (en) 2019-11-01 2021-10-19 EMC IP Holding Company LLC Methods and systems for servicing data requests in a multi-node system
US11288238B2 (en) 2019-11-01 2022-03-29 EMC IP Holding Company LLC Methods and systems for logging data transactions and managing hash tables
US11392464B2 (en) 2019-11-01 2022-07-19 EMC IP Holding Company LLC Methods and systems for mirroring and failover of nodes
US11741056B2 (en) 2019-11-01 2023-08-29 EMC IP Holding Company LLC Methods and systems for allocating free space in a sparse file system
US20210240524A1 (en) * 2020-01-31 2021-08-05 Qualcomm Incorporated Methods and apparatus to facilitate tile-based gpu machine learning acceleration
US11893279B2 (en) * 2021-08-25 2024-02-06 Micron Technology, Inc. Access tracking in memory
US20240134801A1 (en) * 2022-10-19 2024-04-25 Samsung Electronics Co., Ltd. Methods and system for efficient access to solid state drive

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5450562A (en) * 1992-10-19 1995-09-12 Hewlett-Packard Company Cache-based data compression/decompression
US5802568A (en) * 1996-06-06 1998-09-01 Sun Microsystems, Inc. Simplified least-recently-used entry replacement in associative cache memories and translation lookaside buffers
US8195878B2 (en) 2009-02-19 2012-06-05 Pmc-Sierra, Inc. Hard disk drive with attached solid state drive cache
US9582222B2 (en) 2009-04-30 2017-02-28 Western Digital Technologies, Inc. Pre-cache similarity-based delta compression for use in a data storage system
US8392658B2 (en) * 2009-07-10 2013-03-05 Apple Inc. Cache implementing multiple replacement policies
US8285936B2 (en) * 2009-10-20 2012-10-09 The Regents Of The University Of Michigan Cache memory with power saving state
US20120089781A1 (en) * 2010-10-11 2012-04-12 Sandeep Ranade Mechanism for retrieving compressed data from a storage cloud
JP5691448B2 (ja) * 2010-11-30 2015-04-01 富士ゼロックス株式会社 印刷文書処理システム、キャッシュ装置、データ処理装置及びプログラム
US8615636B2 (en) * 2011-03-03 2013-12-24 International Business Machines Corporation Multiple-class priority-based replacement policy for cache memory
US8972661B2 (en) * 2011-10-31 2015-03-03 International Business Machines Corporation Dynamically adjusted threshold for population of secondary cache
US10152423B2 (en) 2011-10-31 2018-12-11 International Business Machines Corporation Selective population of secondary cache employing heat metrics
US8966178B2 (en) 2012-01-17 2015-02-24 International Business Machines Corporation Populating a first stride of tracks from a first cache to write to a second stride in a second cache
US20130242425A1 (en) * 2012-03-16 2013-09-19 Toshiba America Electronics Components, Inc. Write reordering in a hybrid disk drive
US8732404B2 (en) 2012-03-28 2014-05-20 Altibase Corp. Method and apparatus for managing buffer cache to perform page replacement by using reference time information regarding time at which page is referred to
US9442858B2 (en) 2012-07-13 2016-09-13 Ianywhere Solutions, Inc. Solid state drives as a persistent cache for database systems
EP2706467A1 (fr) * 2012-09-05 2014-03-12 Awingu Nv Méthode d'accès à un contenu dans un système de stockage cloud et agent cloud, agent de cache cloud, et application cliente correspondants
US9053057B2 (en) * 2012-09-14 2015-06-09 Empire Technology Development Llc Cache coherence directory in multi-processor architectures
US9003126B2 (en) * 2012-09-25 2015-04-07 Intel Corporation Apparatus, system and method for adaptive cache replacement in a non-volatile main memory system
CN103150136B (zh) 2013-03-25 2014-07-23 中国人民解放军国防科学技术大学 基于ssd的大容量缓存中的lru策略实现方法

Also Published As

Publication number Publication date
GB2533992B (en) 2017-03-08
FR3027128B1 (fr) 2019-04-26
US20160103765A1 (en) 2016-04-14
DE102015013125A1 (de) 2016-04-14
GB2533992A (en) 2016-07-13
GB201517712D0 (en) 2015-11-18
US9501419B2 (en) 2016-11-22

Similar Documents

Publication Publication Date Title
FR3027128A1 (fr)
US11030131B2 (en) Data processing performance enhancement for neural networks using a virtualized data iterator
US10372723B2 (en) Efficient query processing using histograms in a columnar database
JP6373328B2 (ja) メモリ管理での重複排除のための参照ブロックの参照セットへの集約
US8224874B2 (en) Systems and methods for removing unreferenced data segments from deduplicated data systems
US8463802B2 (en) Card-based management of discardable files
FR3023030A1 (fr)
AU2011256912A1 (en) Systems and methods for providing increased scalability in deduplication storage systems
FR3026513A1 (fr)
CN103154911A (zh) 用于管理在共享的高速缓存存储系统的文件的上传的系统和方法
FR3033061A1 (fr)
CN104508666A (zh) 对备份数据进行编目
FR3020885A1 (fr)
US20200034040A1 (en) Data Architecture Based on Sub-allocation and References from Fragmented Data Blocks
US10855818B2 (en) Apparatus and methods for optimizing dirty memory pages in embedded devices
EP3264254A1 (fr) Système et procédé de simulation d&#39;un système de stockage de blocs sur un système de stockage d&#39;objets
EP3724752B1 (fr) Procede de gestion du systeme de fichiers d&#39;un terminal informatique
US10817510B1 (en) Systems and methods for navigating through a hierarchy of nodes stored in a database
US20120089651A1 (en) Download Management of Discardable Files
US20160274799A1 (en) Increase memory scalability using table-specific memory cleanup
US11847334B2 (en) Method or apparatus to integrate physical file verification and garbage collection (GC) by tracking special segments
US12039321B2 (en) Image optimization for pipeline workloads
US20240111511A1 (en) Image optimization for pipeline workloads
FR2835940A1 (fr) Procede de recherche des plus proches voisins d&#39;un vecteur requete
CN115858533A (zh) 一种基于哈希表的积点信息溯源方法、装置、设备及介质

Legal Events

Date Code Title Description
PLFP Fee payment

Year of fee payment: 2

PLFP Fee payment

Year of fee payment: 3

PLFP Fee payment

Year of fee payment: 4

PLSC Publication of the preliminary search report

Effective date: 20181102

PLFP Fee payment

Year of fee payment: 5

TP Transmission of property

Owner name: WESTERN DIGITAL TECHNOLOGIES, INC., US

Effective date: 20200319

PLFP Fee payment

Year of fee payment: 6

PLFP Fee payment

Year of fee payment: 7

PLFP Fee payment

Year of fee payment: 8

PLFP Fee payment

Year of fee payment: 9