CN109952565B - 内存访问技术 - Google Patents
内存访问技术 Download PDFInfo
- Publication number
- CN109952565B CN109952565B CN201680090713.9A CN201680090713A CN109952565B CN 109952565 B CN109952565 B CN 109952565B CN 201680090713 A CN201680090713 A CN 201680090713A CN 109952565 B CN109952565 B CN 109952565B
- Authority
- CN
- China
- Prior art keywords
- access
- memory
- cache line
- access request
- tag
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0888—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using selective caching, e.g. bypass
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0877—Cache access modes
- G06F12/0879—Burst mode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0891—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using clearing, invalidating or resetting means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0893—Caches characterised by their organisation or structure
- G06F12/0895—Caches characterised by their organisation or structure of parts of caches, e.g. directory or tag array
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
- G06F2212/1024—Latency reduction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/20—Employing a main memory using a specific memory technology
- G06F2212/202—Non-volatile memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/608—Details relating to cache mapping
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
一种内存访问技术,应用于包括第一级存储器、第二级存储器和内存控制器的计算机***中。第一级存储器用于缓存所述第二级存储器中的数据。所述内存访问技术中,对于访问与第一级存储器中的第一缓存行具有映射关系的不同内存块的多个访问请求,内存控制器可以将该多个访问请求的标签集中在一起与所述第一缓存行的标签进行比较,以判断所述多个访问请求是否命中所述第一级存储器。在处理所述多个访问请求的过程中,内存控制器只需要从所述第一级存储器中读取一次所述第一缓存行的标签,从而减少了从所述第一级存储器中读取所述第一缓存行的标签的次数,缩短了内存访问延时,提高了内存访问效率。
Description
技术领域
本发明涉及存储技术领域,尤其涉及一种内存访问技术。
背景技术
随着技术的发展,如相变存储器(Phase Change Memory,PCM)等非易失性存储器(None Volatile Memory,NVM)的运用越来越广泛。在***断电之后,NVM仍能保存数据,且NVM具有密度高,可扩展性好等优点,因此, NVM逐渐被作为内存来使用。
在现有的混合内存架构中,动态随机存取存储器(Dynamic Random AccessMemory,DRAM)和NVM可以一起作为计算机***的内存。然而,由于NVM的访问速率比DRAM的访问速率慢,因此通常将DRAM作为NVM的缓存来使用。换一种表达方式,现有技术中,通常将NVM作为主存来使用,将 DRAM作为主存NVM的缓存。在这种架构中,内存控制器接收到内存访问请求时,首先确定内存访问请求中待访问的地址是否命中DRAM,以确定待访问的数据是否存储于DRAM中。当确定待访问的地址命中DRAM时,内存控制器可以直接从DRAM中读取待访问的数据,以缩短访问延时。当内存控制器确定待访问的地址没有命中DRAM时,内存控制器才从NVM中获取待访问的数据。
发明内容
本申请实施例中提供了一种能够提高内存访问效率的内存访问技术。
第一方面,本申请提供一种应用于计算机***中的内存访问方法。所述计算机***包括第一级存储器、第二级存储器以及连接所述第一级存储器和所述第二级存储器的内存控制器。所述第一级存储器用于缓存所述第二级存储器中的数据。在处理内存访问请求的过程中,所述内存控制器在确定包含有多个访问请求的第一访问集合之后,所述内存控制器获取第一访问集合中每一个访问请求的目标地址中的标签。其中,所述多个访问请求分别用于访问所述第二级存储器中的多个不同的内存块,所述多个内存块与所述第一级存储器中的第一缓存行具有映射关系,每一个访问请求的目标地址中的标签用于指示待访问的内存块在所述第二级存储器中的位置。在所述内存控制器从所述第一级存储器中读取所述第一缓存行的信息之后,所述内存控制器将所述第一访问集合中每一个访问请求的目标地址中的标签分别与所述第一缓存行的标签进行比较以确定所述每一个访问请求是否命中所述第一级存储器。其中,所述第一缓存行的信息包含有所述第一缓存行的标签。
在本申请提供的内存访问方法中,对于访问与第一缓存行具有映射关系的不同内存块的多个访问请求(即,第一访问集合中的多个访问请求),内存控制器可以将该多个访问请求的tag集中在一起与所述第一缓存行的tag进行比较。在这个过程中,内存控制器只需要从所述第一级存储器中读取一次该缓存行的tag就可以完成多个访问请求的tag的比较。从而减少了读取所述第一缓存行的tag的次数,缩短了从所述第一级存储器中读取缓存行的tag的延时,提高了内存访问效率。
进一步的,在本申请提供的内存访问方法中,所述内存控制器还可以在所述第一访问集合中确定部分访问请求作为第二访问集合。并且,所述内存控制器只根据所述第二访问集合中的访问请求的请求类型以及所述第二访问集合中的访问请求对所述第一级存储器的命中情况更新所述第一缓存行的信息。根据这种方式,对于访问同一个缓存行的多个访问请求,本申请提供的内存访问方法可以只根据其中部分访问请求更新该缓存行的信息,而不需要根据每个访问请求命中缓存的情况更新该缓存行的信息。因此,本申请提供的内存访问方法能够减少缓存行的更新时间,缩短内存访问请求的访问时延,进一步提高了内存访问效率。
在一种可能的实现方式中,所述更新所述第一缓存行的信息包括:根据所述第一访问请求的目标地址的标签更新所述第一缓存行的标签。实际应用中,更新所述第一缓存行的信息还可以包括更新所述第一缓存行的有效(valid) 位、脏(dirty)位和数据(data)位中的至少一个信息。
在又一种可能的实现方式中,在更新所述第一缓存行的信息时,如果第一缓存行当前的dirty位指示第一缓存行缓存的数据为新数据,则在更新所述第一缓存行的信息前,需要先将所述第一缓存行缓存的数据写到所述第二级存储器中,再对第一缓存行的信息进行更新。根据这种方式,能够保证数据的正确性。
在一种可能的实现方式中,所述内存控制器可以根据访问队列中各个访问请求的目标地址中的集合索引set index位以及标签tag位确定所述第一访问集合。其中,setindex位用于指示访问请求的目标地址指向的内存块映射在所述第一级存储器中的哪个缓存集合,tag位用于指示访问请求的目标地址指向的内存块在所述第二级存储器中的位置。
在又一种可能的实现方式中,所述内存控制器可以将所述第一访问集合中除所述第二访问集合之外的其他访问请求的目标地址中的标签分别与所述第一缓存行的标签进行比较以确定所述其他访问请求是否命中所述第一级存储器;之后,所述内存控制器再将所述第二访问集合中的访问请求的目标地址中的标签分别与所述第一缓存行的标签进行比较以确定所述第二访问集合中的访问请求是否命中所述第一级存储器。这种方式不会影响第二访问集合之外的其他访问请求命中所述第一缓存行的概率。换一种表达方式,这种内存访问方法不会降低缓存命中率。并且,根据第二访问集合中的访问请求更新所述第一缓存行的信息,能够有效替换所述第一级存储器中的缓存数据,以提高后续访问请求对所述第一级存储器的命中率。
在又一种可能的实现方式中,当所述第二访问集合中的第一访问请求未命中所述第一级存储器,且所述第一访问请求为写请求时,所述内存控制器将所述第一访问请求中携带的待写入数据写入所述第一级存储器。在本申请提供的内存访问方法中,对于用于更新所述第一缓存行的第二访问集合中的写请求,即使在没有命中所述第一级存储器的情况下,也可以直接将待写入数据写入所述第一级存储器,从而不仅能够更新所述第一缓存行的信息,还能够快速完成访问,减少访问延时。
在又一种可能的实现方式中,当所述多个访问请求中的第二访问请求命中所述第一级存储器,且所述第二访问请求为写请求时,所述内存控制器将所述第二访问请求发送给所述第二级存储器处理,其中,所述第二访问请求不属于所述第二访问集合。换一种表达方式,对于不属于第二访问集合的第二访问请求,由于不会根据所述第二访问请求更新所述第一缓存行,因此,即使所述第二访问请求为命中所述第一级存储器的写请求,内存控制器仍然可以直接将所述第二访问请求发送给第二级存储器处理,以便能够直接将第二访问请求中的待写入数据直接写入第二级存储器。而现有技术中,在这种情况下,会将该待写入数据写到所述第一级存储器中,在后续的对第一级存储器中的数据持久化过程中,再将该数据从所述第一级存储器中写入所述第二级存储器中。由此可以看出,本申请的内存访问方法,在处理不需要更新所述第一缓存行的访问请求时,可以直接将待写入数据写入第二级存储器中,减少数据写入次数。进一步的,在这种情况下,由于所述内存控制器直接将第二访问请求中的待写入数据直接写入了第二级存储器,则第一存储器中的所述第一缓存行的数据已经与所述第二级存储器中的内存块的数据不一致。因此,所述内存控制器需要将所述第一缓存行的信息中的有效位设置为无效状态,其中,所述无效状态用于指示所述第一缓存行中的数据不可用。
在又一种可能的方式下,所述内存控制器根据第一缓存行的无效状态,确定所述第二访问集合中的第三访问请求未命中所述第一级存储器。换一种表达方式,所述内存控制器在通过比较tag以确定访问请求是否命中所述第一级存储器的过程中,需要先确定所述第一缓存行中的有效位是否指示所述第一缓存行中的数据为有效。当第一缓存行中的有效位指示所述第一缓存行中的数据为无效时,可以直接判断该访问请求未命中所述第一级存储器。在确定第一缓存行中的有效位指示所述第一缓存行中的数据为有效的情况下,所述内存控制器再根据 tag的比较结果判断访问请求是否命中所述第一级存储器。根据这种方式,能够在一定程度上提高内存访问效率。
第二方面,本申请实施例提供了一种计算机***。所述计算机***包括第一级存储器、第二级存储器以及连接所述第一级存储器和所述第二级存储器的内存控制器。所述第一级存储器用于缓存所述第二级存储器中的数据。所述内存控制器用于执行上述第一方面以及第一方面的各种可能的实现方式中的内存访问方法。
第三方面,本申请实施例提供了一种内存控制器。所述内存控制器应用于计算机***中,所述计算机***包括第一级存储器、第二级存储器以及连接所述第一级存储器和所述第二级存储器的所述内存控制器。所述第一级存储器用于缓存所述第二级存储器中的数据。所述内存控制器包括用于执行上述第一方面以及第一方面的任意一种可能的实现方式中的内存访问方法的模块。
第四方面,本申请提供了一种计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令用于执行上述第一方面及第一方面的任意一种实现方式中的至少一种内存访问方法。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是本发明的一些实施例。
图1为本发明实施例提供的一种计算机***的结构示意图;
图2为本发明实施例提供的一种缓存中的数据的组织结构示意图;
图3为本发明实施例提供的一种内存块的地址的组成示意图;
图4为本发明实施例提供的一种内存访问方法流程图;
图5为本发明实施例提供的一种内存访问示意图;
图6为本发明实施例提供的一种访问请求处理情形示意图;
图7为本发明实施例提供的一种缓存行的更新情形示意图;
图8为本发明实施例提供的又一种内存控制器的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述。显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。
图1为本发明实施例提供的一种计算机***的结构示意图。如图1 所示,计算机***100至少可以包括处理器105、内存控制器115、非易失性存储器(non-volatile memory,NVM)120以及动态随机存储器(dynamic random access memory,DRAM)125。其中,DRAM 125和NVM 120均为计算机***100 的内存。可以理解的是,图1所示的计算机***的连接关系仅仅是具有混合内存架构的计算机***的一种示例,图1中所示的DRAM 125和NVM 120仅仅是计算机***中的多级存储器的一种示例。实际应用中,并不对计算机***中的内部结构进行具体的限定,且计算机***中还可以包括除DRAM 125和NVM 120之外的其他存储器。本发明实施例中的计算机***只要包括能够作为内存的第一级存储器以及第二级存储器,且第一级存储器能够支持高速缓存访问即可。换一种表达方式,本发明实施例中的计算机***只要包含至少两级存储器,且第一级存储器为第二级存储器的缓存,用于缓存第二存储器中的部分数据即可。下面将以图1为例对本发明实施例提供的具有混合内存架构的计算机***进行介绍。
处理器105是计算机***100的核心,处理器205可以调用计算机***100中不同的软件程序实现不同的功能。例如,处理器105能够实现对 DRAM 125、NVM 120的访问。可以理解的是,处理器105可以是中央处理器 (central processing unit,CPU)。除了CPU外,处理器还可以是其他特定集成电路(application specific integrated circuit,ASIC),或者是被配置成实施本发明实施例的一个或多个集成电路。为了描述方便,本发明实施例以一个处理器为例进行示例,实际应用中,计算机***还可以包括多个处理器。另外,处理器可以是单核处理器,也可以是多核处理器。在多核处理器架构中,处理器中可以包括多个处理器核。例如,如图1所示,处理器105中可以包括一个或多个CPU核110。在本发明实施例中不对处理器的数量以及一个处理器中处理器核的数量进行限定。
内存控制器115是计算机***100内部控制内存并且使内存与处理器105(例如CPU)之间交换数据的重要组成部分。实际应用中,一种情况下,内存控制器115可以位于北桥芯片内部。在另一种情况下,可以将内存控制器 115集成在处理器105中(如图1所示),具体的,内存控制器115可以集成在处理器105的基板上。可以理解的是,当内存控制器115位于北桥芯片内部时,内存控制器需要通过北桥芯片与处理器交换数据,导致数据的延迟较大。内存控制器115可以集成在处理器105中时,内存控制115可以直接与处理器交换数据。
如图1所示,内存控制器115可以耦合NVM控制器116以及DRAM 控制器118。其中,DRAM控制器118用于控制对DRAM 125的访问,NVM控制器116用于控制对NVM 120的访问。NVM控制器116以及DRAM控制器118 又可以被称为介质控制器。可以理解的是,实际应用中,一种情况下,NVM控制器116和DRAM控制器118可以独立于内存控制器115。另一种情况下,NVM控制器116和DRAM控制器118也可以集成在内存控制器115中,在逻辑上作为内存控制器115一部分(如图1所示)。在本发明实施例中,内存控制器115 可以通过内存总线(例如,双倍速率DDR总线)连接NVM 120和DRAM 125。可以理解的是,实际应用中,NVM控制器125还可以通过PCI高速总线、桌面管理接口(DMI)总线等其他类型的总线与NVM120通信。
如前所述,在图1所示的计算机***中,动态随机存储器(dynamic random accessmemory,DRAM)125可以通过内存总线与处理器105连接。 DRAM 125具有访问速度快的优点。处理器105能够高速访问DRAM 125,对 DRAM 125进行读或写操作。通常DRAM 125用来存放操作***中各种正在运行的软件、输入和输出数据以及与外存交换的信息等。然而,DRAM125是易失性的,当关闭电源后,DRAM 125中的信息将不再保存。
由于新型NVM能够按字节(Byte)寻址,将数据以位(bit)为单位写入非易失性存储器中,因而能够作为内存使用。在本发明实施例中,NVM 120 可以与DRAM 125共同作为计算机***100的内存。与DRAM 125相比,由于 NVM 120具有非易失性的特点,从而能够更好地保存数据。在本发明实施例中,可以将能够作为内存使用的非易失性存储器称为存储级内存(storage class memory,SCM)。
需要说明的是,DRAM是易失性内存(volatile memory)的一种,实际应用中还可以采用其他的随机存储器(random access memory,RAM)作为计算机***的内存。例如,还可以采用静态随机存储器(static random access memory,SRAM)作为计算机***的内存。在本发明实施例中,图1中所示的 NVM 120可以包括:相变存储器(Phase-change RandomAccess memory,PCM),阻变存储器(resistive random access memory,RRAM)、磁性存储器(magnetic random access memory,MRAM)或铁电式存储器(ferroelectric randomaccess memory,FRAM)等新型非易失性存储器,在此不对本发明实施例中的NVM的具体类型进行限定。
由于与DRAM 125相比,NVM 120的访问速度相对较慢,因此,通常将NVM 120作为***的主存(main memory)使用,将DRAM 125作为NVM 120的缓存(Cache)使用,以弥补主存NVM 120访问速度慢的缺陷,提高内存访问速度。如图1所示,在图1所示的计算机***中,DRAM 125作为NVM 120 的缓存。当内存控制器115接收到处理器105发送的内存访问请求时,首先确定内存访问请求中待访问的地址是否命中DRAM 125,以确定待访问的数据是否存储于DRAM 125中。当确定待访问的地址命中DRAM 125时,内存控制器115 可以直接从DRAM 125中读取待访问的数据,以缩短访问延时。当内存控制器 115确定待访问的地址没有命中DRAM 125时,内存控制器115才从NVM 120 中获取待访问的数据。
本领域人员可以知道,由于Cache的容量很小,Cache保存的内容只是主存内容的一个子集,且Cache与主存的数据交换是以块为单位的。为了把主存中的数据缓存到Cache中,必须应用某种函数把主存地址定位到Cache中,这称为地址映射。在将主存中的数据按这种映射关系缓存到Cache中后,CPU执行程序时,会将程序中的主存地址变换成Cache地址。Cache的地址映射方式通常有直接映射和组相联映射。
在直接映射方式下,主存中的一个块只能映射到Cache的某一特定块中去。例如,假设主存有16个块,cache有4个块,则主存的第0块、第4 块、第8块和第12块只能映射到Cache的第0块;而主存的第1块、第5块、第9块和第13块只能映射到Cache的第1块......。直接映射是最简单的地址映射方式,它的硬件简单,成本低,地址变换速度快。但是这种方式不够灵活, Cache的存储空间得不到充分利用。由于每个内存块只能存放在Cache中的一个固定位置,容易产生冲突,使Cache效率下降。例如,如果一个程序需要重复引用主存中第0块与第4块,最好的方式是将主存中的第0块与第4块同时复制到 Cache中,但由于主存中的第0块与第4块都只能复制到Cache的第0块中去,即使Cache中别的存储空间空着也不能占用,因此这两个块会不断地交替缓存到 Cache中,导致命中率降低。为了描述方便,主存中的块也可被称为内存块。
在组相连映射方式中,将主存和Cache都分成多个组,主存中一个组(set)内的块的数量与Cache中的组的数量相同。主存中的各块与Cache的组号之间有固定的映射关系,但可自由映射到对应Cache组中的任何一块。换一种表达方式,在这种映射方式下,内存块存放到哪个组是固定的,至于存到该组哪一块则是灵活的。例如,主存分为256组,每组8块,Cache分为8组,每组2 块。主存中的第0块、第8块......均映射于Cache的第0组,但可映射到Cache 第0组中的第0块或第1块;主存的第1块、第9块......均映射于Cache的第1 组,但可映射到Cache第1组中的第2块或第3块。在采用组相连映射方式的 cache中,每组内可以有2、4、8或16块,相应的,可以分别被称为2路组相联 Cache、4路组相联Cache、8路组相联Cache或16路组相联Cache。需要说明的是,本发明实施例中的“组”也可以被称为“集合”。
在本发明实施例中,由于DRAM 125作为NVM 120的Cache,用于缓存NVM 120中的部分数据块。因此也需要将主存NVM 120中的数据按照某种映射方式映射到DRAM 125中。实际应用中,通常采用直接映射方式和组相连映射方式将NVM 120中的数据映射到DRAM 125中。为了描述方便,在本发明实施例中也可以将NVM 120中的数据块称为内存块,将DRAM 125中的数据块称为缓存块或缓存行(cache line)。通常,一个内存块的大小可以为4KB(kilobyte),一个缓存行的大小也可以为4KB。可以理解的是,实际应用中,还可以将内存块和缓存行的大小设置为其他值。内存块的大小与缓存行的大小相同。
图2示出了本发明实施例中NVM 120和DRAM 125的映射示意。如图2所示,NVM 120的存储空间可以被分成多个不同的缓存集合(set):set 1 210_1,set 2 210_2,...set N210_N。每个set被分配一条DRAM125中的缓存条目(cache entry)。例如,如图2所示,cacheentry 200_1是为与set 1 210_1中任意一个存储地址预留的cache entry。cache entry200_2是为与set 2 210_2中任意一个存储地址预留的cache entry。根据这种方式,set 1210_1中任意一个存储地址对应的内存块均可以映射到cache entry 200_1中。
图2中还示出了DRAM 125中的数据的组织结构,如图2中的DRAM 组织结构200所示,一条缓存条目(cache entry)对应一行数据。换一种表达方式,一条cache entry对应一个缓存行(cache line)。DRAM 125中可以包括多个行,每一行可以存储多个字节的数据。每一条cache entry至少包括有效位(valid bit)201、脏位(dirty bit)203、标签(tag)205以及数据(data)207。可以理解的是,实际应用中,每一条cache entry中还可以包括纠错码信息(Error Correcting Code,ECC),以保证存储的数据的准确性。其中,Tag 205为主存地址的一部分,用于指示缓存行映射的内存块在主存NVM 120中的位置。Data 207 是指缓存行中缓存的内存块的数据。
有效位(valid bit)201和脏位(dirty bit)203均为标识位(Flag bit),用来指示缓存行的状态。valid bit 201用于指示的缓存行有效性。当valid bit位指示为有效valid时,说明该缓存行中的数据可用。当valid bit位指示为无效 invalid时,说明该缓存行中的数据不可用。dirty bit 203用于指示缓存行中数据是否与对应的内存块中的数据相同。例如,当dirty bit位指示为脏时,说明缓存行中的数据部分(如图2中的Data 207)与对应的内存块中的数据不同,换一种表达方式,当dirty bit位指示为脏时,该缓存行中包含有新数据。当dirty bit位指示为干净clean时,说明该缓存行中的数据与对应的内存块中的数据相同。实际应用中,可以以某个值指示dirty bit位指示为脏或干净。例如,当dirtybit位为“1”时,dirty bit位指示为脏,表示cache line中包含有新数据;当dirty bit 位为“0”时,dirty bit位指示为干净clean,表示cache line中的数据与对应的内存块中的数据相同。可以理解的是,还可以以其他值标识dirty bit位指示为脏或干净,在此不做限定。
图2是NVM 120和DRAM 125采用直接映射方式时的映射示意。可以理解的是,在本发明实施例中,还可以按照组相连映射方式将DRAM 125中的数据按照缓存集合(set)的形式进行组织。在这种方式下,DRAM 125中可以包括多个缓存集合(set),每个缓存集合可以包括多行(line)数据。换一种表达方式,每个缓存集合中可以包括多条cache entry。例如可以将图2中所示的 DRAM 200中的cache entry 200_1和cache entry 200_2作为一个集合。NVM 210 中的Set 1 210_1可以映射到该集合中的cache entry 200_1或cache entry200_2。
在将主存中的数据映射到Cache中后,通常采用集合索引(set index) 来指示内存块映射的缓存行在缓存中的位置。可以理解的是,在直接映射方式下, set index可以用于指示一个内存块映射的一个缓存行在cache中的位置。在组映射方式下,一个set index可以用于指示一组缓存行在cache中的位置。例如,在上述实施例中,当将主存中的第0块、第8块......均映射于Cache的第0组时,则第0组的set index可以用于指示第0组的缓存行(包括第0块和第1块)在 Cache中的位置。
如前所述,内存控制器接收到内存访问请求时,首先确定内存访问请求中的目标地址(即,待访问的内存块的地址)是否命中DRAM125,以确定待访问的数据是否存储于DRAM125中。当缓存DRAM 125接收到内存控制器发送的目标地址时,DRAM 125可以通过所述目标地址中的标签(tag)来确定所述待访问的地址是否命中缓存。换一种表达方式,DRAM 125可以通过所述目标地址中的标签(tag)判断其是否缓存有该地址中的数据。具体的,如图3所示,DRAM 125可以将目标地址300分成三个部分:标签(tag)302、集合索引 (set index)304以及块偏移(block offset)306。其中,set index 304用于指示目标地址300指向的内存块映射在缓存中的哪个缓存集合;tag 302用于指示目标地址300指向的内存块在主存(例如,NVM120)中的位置。块偏移(block offset) 306用于指出待访问的数据在该行的偏移位置,也就是说,块偏移306用于确定待访问的数据在这行的哪一个位置。实际应用中,当缓存DRAM 125接收到内存控制器发送的目标地址300时,DRAM 125可以先根据目标地址300中的set index 304部分确定目标地址300属于DRAM 125中的哪一个缓存集合。由于一个缓存集合中包括至少一个cache entry。换句话说,由于一个缓存集合中包括至少一个缓存行。因此,在确定目标地址300所属的缓存集合后,DRAM 125可以将目标地址300中的tag 302部分的值与set index 304部分指向的缓存集合中的各个cache entry(例如图2中的cacheentry 200_1、cache entry 200_2等)中的 tag位(例如图2中的tag 205)进行比较,以确定目标地址300是否命中所述 DRAM 125。当目标地址300的tag与所述缓存集合中的某个cache entry中的标签(tag)相同时,说明所述内存访问请求待访问的目标数据缓存在DRAM125 中。在这种情况下,内存控制器可以直接访问DRAM 125,将DRAM 125中缓存的目标数据返回给CPU。当目标地址中的tag与所述缓存集合中的cache entry 的tag不相同时,确定所述内存访问请求未命中DRAM 125。在这种情况下,内存控制器需要访问NVM 120,从NVM 120中获取所述访问请求待访问的目标数据。通过将DRAM 125作为NVM 120的缓存,在确保主存中的数据掉电不丢失的基础上,缩短了内存访问时间,提高了内存访问速度。
实际应用中,在DRAM 125作为NVM 120的缓存的情况下,tag 也需要占用较大的存储空间。以一条cache entry的大小通常为64B(Byte)为例,tag通常占了其中的4B。若DRAM的大小为16GB,则其中tag的大小则为1GB。因此,实际应用中,通常将tag也存放在DRAM中。
如上所述,由于DRAM 125只是映射了NVM 120中的部分数据,且 NVM 120中的多个块可能映射到DRAM 125中的同一个块。例如,NVM 120中的第0块、第4块、第8块和第12块可以映射到DRAM 125的第0块,或者 NVM 120中的第0块、第8块......可以映射于DRAM 125的第0组中的缓存行中。因此,内存控制器115在处理访问能够映射到同一个缓存行的多个内存块的多个内存访问请求时,只能串行处理。例如,当第0请求、第1请求、第2请求分别为访问NVM 120中的第0块、第4块和第8块的内存访问请求,而NVM 120 的第0块、第4块和第8块均映射到DRAM 125的第0块,因此,在这种情况下,内存控制器115只能分别处理第0请求、第1请求和第2请求。具体的,内存控制器115可以先从DRAM 125中获取DRAM 125中第0块数据的tag,然后将第0请求的目标地址的tag与DRAM 125中第0块的tag相比较,以确定第0 请求是否命中DRAM 125,并根据命中情况,分别从DRAM 125或NVM 120中获取数据,以完成第0请求对内存的访问。并且,内存控制器115需要根据对第 0请求的处理情况确定是否更新DRAM125中的第0块的tag。在完成第0请求对内存的访问后,内存控制器115再处理第1请求。具体的,内存控制器115将第1请求的目标地址的tag与更新后的DRAM 125中第0块的tag相比较,以确定第1请求是否命中DRAM 125,以完成第1请求对内存的访问,并根据对第1 请求的处理情况确定是否更新DRAM 125中第0块的tag......。由于从DRAM 125 的时延较长,且访问DRAM 125中的同一个块的多个访问请求还需要串行处理,并且由于每一次对DRAM 125的访问都可能更新tag,因此导致内存访问的延时较大。
本发明实施例提供了一种应用于具有混合内存架构的计算机***中的内存访问方法,能够减少内存访问的延时,提高内存访问速度。下面将以图1 所示的计算机***为例,结合图4和图5对本发明实施例提供的内存访问方法进行详细描述。图4为本发明实施例提供的一种内存访问方法流程图,图5为本发明实施例提供的一种内存访问示意图。如图4所示,该方法可以包括下述步骤。
在步骤402中,内存控制器115从访问队列中确定第一访问集合。其中,所述缓存队列中缓存有多个内存访问请求,第一访问集合中也包含有多个内存访问请求。例如,如图5中的502所示,缓存队列中可以包括内存访问请求: A0、B1、A2、C3、B2、A5、A6等。内存控制器115可以从缓存队列502中确定第一访问集合504:A0、A2、A5和A6。在本发明实施例中,第一访问集合中的多个访问请求需要满足两个条件:1)第一访问集合504中的内存访问请求A0、A2、A5和A6中的目标地址均具有相同的set index。换一种表达方式,第一访问集合504中的A0、A2、A5和A6均是访问同一个cache set的内存访问请求。2)为了访问的数据的正确性,第一访问集合504中的多个内存访问请求的 tag各不相同。换一种表达方式,第一访问集合504中不会存在访问同一个内存块的两个内存访问请求。根据上述两个条件,在本步骤中,内存控制器115可以根据访问队列中各个访问请求的目标地址中的set index位以及tag位确定第一访问集合504。
如前所述,一个cache set中可以包括一个或多个cache entry。为描述方便,在本发明实施例中,以一个cache set中包括一个cache entry为例进行描述。在本发明实施例中,若内存控制器115根据A0、A2、A5和A6的目标地址中的set index位确定A0、A2、A5和A6均是访问同一个cache set的访问请求。例如,内存控制器115根据A0、A2、A5和A6的目标地址中的set index位A0、 A2、A5和A6访问的内存块均与cache entry 200_1对应的缓存行具有映射关系。并且,若内存控制器115根据A0、A2、A5和A6的目标地址中的tag位确定A0、 A2、A5和A6的tag均不相同,则内存控制器115可以确定第一访问集合504 中包括内存访问请求A0、A2、A5和A6。根据这种方式,第一访问集合504中包含有指向同一个缓存行且用于访问不同内存块的多个访问请求,其中,第一访问集合504中的多个访问请求所指向的同一个缓存行与所述多个访问请求待访问的内存块之间具有映射关系。为了描述方便,在本发明实施例中将cache entry 200_1对应的缓存行称为第一缓存行。类似的,若B1和B2也是访问同一个cache set的内存访问请求,且B1和B2均不是访问同一个内存块的访问请求,则内存控制器115也可以将访问请求B1和B2确定为一个访问集合(未在图5中示出)。需要说明的是,如无特别说明,本发明实施例中的访问请求均指的是内存访问请求。
在步骤404中,内存控制器115获取所述第一访问集合中每一个访问请求的目标地址中的标签。例如,如图5所示,内存控制器115可以根据第一内存访问集合504中的访问请求的目标地址获得每一个访问请求的tag。具体的,内存控制器115获取访问请求A0的tag:Tag_A0、访问请求A2的tag:Tag_A2、访问请求A5的tag:Tag_A5以及访问请求A6的tag:Tag_A6。实际应用中,内存控制器115可以根据获得的各个访问请求的tag获得tag队列506。
在步骤406中,内存控制器115在第一访问集合504中确定第二访问集合505中的访问请求为更新所述第一缓存行的访问请求。本领域技术人员可以知道,更新第一缓存行不仅包括更新第一缓存行中的数据(即前述的cache entry中的data位中的数据),还包括更新第一缓存行的有效位valid、标签tag、脏位dirty等元数据信息(如图2所示)。在本发明实施例中,由于第一访问集合中的访问请求是访问的不同的内存块,且这些不同的内存块均映射到同一个缓存行,因此,即使每处理一个内存访问请求就更新一次缓存行,也不会提高后续的访问请求命中缓存的命中率。并且,如果根据每一个内存访问请求更新一次缓存行,还会增加内存访问请求的执行时间。因此,在本发明实施例中,为了减少更新缓存行的延时,内存控制器115并不根据第一访问集合504中的每一个访问请求更新第一缓存行,而只是根据第一访问集合504中的一部分内存访问请求更新第一缓存行。具体的,内存控制器115可以在第一访问集合504中确定第二访问集合505。其中,第二访问集合505中包含有第一访问集合504中的至少一个访问请求,但不包括第一访问集合504中的所有访问请求。例如,在一种情况下,第二访问集合505可以只包括第一访问集合504中的任意一个访问请求,例如 A0或A6。在又一种情况下,第二访问集合也可以包括第一访问集合504中的多个访问请求,例如A2和A5等。可以理解的是,第二访问集合505中包含的访问请求越少,则更新第一缓存行的次数越少,访问延时越小。实际应用中,可以在第一访问集合504中确定一个访问请求为更新所述第一缓存行的访问请求。换一种表达方式,第二访问集合505中通常可以只有一个访问请求。
具体的,在直接映射方式下,内存控制器115可以根据第一访问集合504中的最后一个访问请求更新所述第一缓存行。例如,在图5所示的第一访问集合504中,内存控制器115可以将访问请求A6确定为更新cache entry 200_1 中记录的所述第一缓存行的访问请求。当然,实际应用中,内存控制器115还可以将第一访问集合504中的任意一个访问请求作为更新所述第一缓存行的访问请求。
可以理解的是,在组映射方式下,由于一个cache set包含有多个cache entry。也就是说,一个cache set中包括多个缓存行。在步骤402中,内存控制器115确定的访问集合中可以包含访问同一个cache set的多个cache entry的内存访问请求。则在本步骤中,内存控制器115需要分别确定用于更新不同的cache entry的访问请求。例如,若在步骤402中,内存控制器115确定的访问集合中包含有访问第一cache entry和第二cache entry的多个访问请求,其中,所述第一cache entry和所述第二cache entry属于同一个cacheset。则在步骤406中,内存控制器115可以分别在访问第一cache entry的多个访问请求中确定一个访问请求来更新第一cache entry,在访问第二cache entry的多个访问请求中确定一个访问请求来更新第二cache entry。
在步骤408中,内存控制器115从DRAM 125中读取所述第一缓存行的标签tag。如前所述,在直接映射方式下,一条cache entry对应一个缓存行 cache line。由于tag也存放在DRAM中,在内存控制器115判断内存访问请求是否命中缓存(如图1中的DRAM 125)时,内存控制器115需要先从DRAM 125 中读取cache line的tag,以便能够将cache line中的tag与访问请求中的tag进行比较。具体的,当内存访问请求命中某个cache entry时,内存控制器115可以从该cache entry中获取对应的cache line的tag。例如,第一访问集合504中的A0、 A2、A5和A6都是访问同一个cache entry 200_1的内存访问请求,则在本步骤中,内存控制器115可以从DRAM125中读取cache entry 200_1中记录的tag,以便能够将entry 200_1中记录的tag与各访问请求的tag进行比较。为了描述方便,本发明实施例中将cacheentry 200_1中记录的cache line称为第一cache line。
在步骤410中,内存控制器115将所述第一访问集合405中每一个访问请求的目标地址中的标签与所述第一缓存行的tag相比较,以确定所述第一访问集合405中的每一个访问请求是否命中缓存。例如,如图5所示,内存控制器115可以分别将Tag-A0、Tag-A2、Tag-A5和Tag-A6与cache entry 200_1中记录的tag进行比较。若某个访问请求的tag与cacheentry 200_1中的tag相同,则说明该访问请求命中缓存。若某个访问请求的tag与cacheentry 200_1中的tag 不同,则说明该访问请求未命中缓存。例如,若A0的tag:Tag-A0与cache entry 200_1中的tag相同,则内存控制器115确定访问请求A0命中DRAM 125。若 A1的tag:Tag-A1与cache entry 200_1中的tag不同,则内存控制器115确定访问请求A1未命中DRAM 125。
实际应用中,在比较tag的过程中,可以最后将更新所述第一缓存行的tag的访问请求的tag与所述第一缓存行的tag进行比较。例如,若在步骤406 中,内存控制器115确定访问请求A6为更新cache entry 200_1中的tag的访问请求,则在本步骤中,内存控制器115可以先分别将A0、A2、A5的tag与cache entry 200_1中的tag进行比较,最后将A6的tag与cache entry 200_1中的tag进行比较。换一种表达方式,在本步骤中,内存控制器115可以先将第一访问集合 504中除第二访问集合505之外的访问请求的tag与cache entry 200_1中的tag 进行比较,在内存控制器115将不用于更新cache entry 200_1的访问请求都处理完后,再将第二访问集合505的访问请求的tag与cache entry 200_1中的tag进行比较。这种方式不会影响第二访问集合之外的其他访问请求命中所述第一缓存行的概率。换一种表达方式,这种内存访问方法不会降低缓存命中率。并且,根据第二访问集合中的访问请求更新所述第一缓存行的信息,能够有效替换所述第一级存储器中的缓存数据,以提高后续访问请求对所述第一级存储器的命中率。
可以理解的是,在通过比较tag以确定访问请求是否命中DRAM125 的过程中,需要先确定所述第一缓存行中的有效位是否指示所述第一缓存行中的数据为有效。当第一缓存行中的有效位指示所述第一缓存行中的数据为无效时,可以直接判断该访问请求未命中DRAM 125。在确定第一缓存行中的有效位指示所述第一缓存行中的数据为有效的情况下,内存控制器125再根据tag的比较结果判断访问请求是否命中DRAM 125。例如,在内存控制器115将第二访问集合 505中的一个访问请求(例如,第三访问请求)的tag与所述第一缓存行的tag 进行比较前,若内存控制器115判断第一缓存行中的有效位指示所述第一缓存行当前为无效状态,则内存控制器115可以直接确定该访问请求未命中DRAM 125。
在步骤412中,内存控制器115分别执行所述第一访问集合中的多个访问请求。具体的,内存控制器115可以分别根据第一访问集合中的各访问请求对DRAM 125的命中情况分别处理各访问请求。在本发明实施例中,为了提高缓存命中率,可以先根据第一访问集合504中除第二访问集合505之外的访问请求的访问类型以及命中情况对第一访问集合504中除第二访问集合505之外的访问请求进行处理,再处理第二访问请求集合中的访问请求。根据这种方式,能够有效替换所述第一级存储器中的缓存数据,以提高后续访问请求对所述第一级存储器的命中率。
在本发明实施例中,在处理第一访问集合504中的访问请求时,可以根据按照下面几种情况分别处理。如图6所示。对于第二访问集合505之外的访问请求,一种情况下,当内存控制器115在确定某个访问请求未命中DRAM 125 时,内存控制器可以将该访问请求发送给NVM 125进行处理。例如,若内存控制器115确定访问请求A1未命中DRAM 125。在这种情况下,内存控制器115 可以将访问请求A1发送给NVM控制器116处理,由NVM控制器116执行访问请求A1。例如,NVM控制器116根据访问请求A1中的目标地址从NVM 120 中读取数据或将数据写入NVM 120中。又一种情况下,当内存控制器115在确定某个访问请求命中DRAM 125时,内存控制器115可以根据该访问请求的类型对该访问请求进行不同的操作。具体的,当该访问请求命中DRAM 125且该请求为读请求时,内存控制器115可以将该请求发送给DRAM125,以从DRAM 125中读取数据。例如,若内存控制器115确定访问请求A0命中DRAM 125。在这种情况下,内存控制器115可以将访问请求A0发送给DRAM控制器118, DRAM控制器118可以根据访问请求A0中的目标地址从DRAM 125中读取数据。当该访问请求命中DRAM 125且该访问请求为写请求时,内存控制器115 可以将该访问请求发送给NVM 120,以将该访问请求中携带的待写入数据直接写入NVM 120中与所述第一缓存行对应的内存块中。需要说明的是,由于在本发明实施例中,并不根据第一访问集合中除第二访问集合505之外的其他访问请求更新第一缓存行,而在这种情况下,由于该访问请求已经修改了NVM中的第一缓存行对应的内存块的数据,因此,内存控制器115可以将其读取的第一缓存行中的有效位信息设置为无效,以指示所述第一缓存行中的信息不能使用。
如上所述,在本发明实施例提供的内存访问方法中,对于不属于第二访问集合的第二访问请求,由于不会根据所述第二访问请求更新所述第一缓存行,因此,即使所述第二访问请求为命中所述第一级存储器的写请求,内存控制器仍然可以直接将所述第二访问请求发送给第二级存储器处理,以便能够直接将第二访问请求中的待写入数据直接写入第二级存储器。而现有技术中,在这种情况下,会将该待写入数据写到所述第一级存储器中,在后续的对第一级存储器中的数据持久化过程中,再将该数据从所述第一级存储器中写入所述第二级存储器中。由此可以看出,本申请的内存访问方法,在处理不需要更新所述第一缓存行的访问请求时,可以直接将待写入数据写入第二级存储器中,减少数据写入次数。
如图6所示,对于第二访问集合505中的访问请求,内存控制器115 也可以分几种情况进行处理。为了描述方便,以第二访问集合505中仅包括A6 为例进行描述。在一种情况下,当内存控制器115确定A6命中DRAM 125时,内存控制器125可以直接将访问请求A6发送给DRAM 125,以从DRAM 125中读取数据或将待写入数据写入DRAM 125。在又一种情况下,当内存控制器115 确定A6未命中DRAM 125时,内存控制器115将根据A6的请求类型对访问请求A6执行不同的操作。具体的,当内存控制器115确定A6为读请求且未A6 未命中DRAM 125时,内存控制器115可以将A6发送给NVM 120,以根据 A6中携带的目标地址从NVM 120对应的内存块中读取数据。当内存控制器115 确定A6为写请求且未A6未命中DRAM 125时,由于A6为更新第一缓存行的请求,因此,内存控制器115可以将A6发送给DRAM,以将A6中携带的数据写入DRAM 125中,以能够降低处理A6的延时。
可以理解的是,实际应用中,对于第一访问集合504中的每一个访问请求,内存控制器115可以在确定一个访问请求是否命中DRAM 125之后就根据该访问请求的命中情况将该访问请求发送给DRAM控制器118或发送给 NVM控制器116处理。换一种表达方式,对于第一访问集合504中的任意一个访问请求,内存控制器115可以在执行步骤410之后就执行步骤412。
在步骤414中,内存控制器115根据第二访问集合505中的访问请求更新所述第一缓存行的信息。具体的,内存控制器115可以根据第二访问集合 505中的访问请求的请求类型以及所述第二访问集合505中的访问请求对所述缓存的命中情况更新所述第一缓存行的信息。如前所述,为了减少访问延时,在本发明实施例中只根据第一访问集合中的部分访问请求更新所述第一缓存行。在本发明实施例中,更新所述第一缓存行的信息包括更新所述第一缓存行的标签。具体的,若第一访问请求为第二访问集合中的一个访问请求,则可以根据第一访问请求中的目标地址的标签更新所述第一缓存行的标签。实际应用中,更新所述第一缓存行的信息还可以包括更新所述第一缓存行的有效(valid)位、脏(dirty) 位和数据(data)位中的至少一个信息。
具体的,对于非用于更新所述第一缓存行的tag的访问请求,例如,对于如图5中所示的第一访问集合504中除第二访问集合505之外的访问请求,内存控制器115可以直接根据比较结果将访问请求分别发送给DRAM 125或 NVM120进行处理,而不需要根据该访问请求更新第一缓存行。换一种表达方式,即使第二访问集合505之外的其他访问请求中包括写请求或包括未命中所述第一级存储器的访问请求时,内存控制器115也不会根据第二访问集合505之外的访问请求更新所述第一缓存行。对于在步骤406确定的用于更新所述第一缓存行的第二访问集合505中的访问请求,内存控制器115则需要根据比较结果以及访问请求的请求类型更新所述第一缓存行。例如,若在步骤406中,内存控制器 115确定A6为用于更新所述第一缓存行的访问请求,在将Tag-A0、Tag-A2、 Tag-A5和Tag-A6与cache entry200_1中的tag进行比较后,内存控制器115只根据Tag-A6与cache entry 200_1中的tag的比较结果以及A6的请求类型更新 cache entry 200_1。如图5所示,假设在比较前cacheentry 200_1中的tag位的值为A,则在将Tag-A0、Tag-A2、Tag-A5和Tag-A6与cache entry200_1中的tag 进行比较后,只根据Tag-A6与cache entry 200_1中的tag的比较结果更新cache entry 200_1,在更新后的cache entry 200_1′中的tag值为Tag-A6。具体的可以参见图5中的更新前的cache entry 508以及更新后的cache entry 510。
可以理解的是,如果在步骤406中,内存控制器115确定第二访问集合505中有多个访问请求,则在本步骤中,内存控制器115需要分别根据第二访问集合505中的多个访问请求更新所述第一缓存行的信息。例如,若在步骤 406中,内存控制器115确定A5和A6为用于更新所述第一缓存行的访问请求,则在本步骤中,内存控制器115需要对第一缓存行更新两次。具体的,内存控制器115可以先根据A5的请求类型以及Tag-A5与cache entry 200_1中的tag的比较结果对cache entry 200_1进行更新,例如,更新后的cache entry 200_1为cache entry 200_1′。然后,再将Tag-A6与cache entry 200_1′中的tag进行比较,并根据A6的请求类型以及Tag-A6与cache entry 200_1′中的tag的比较结果对cache entry 200_1′再次进行更新。
下面将结合图7对内存控制器115根据第二访问集合505中的访问请求对第一缓存行cache entry 200_1进行更新的过程中的几种情况进行详细描述。需要说明的是,图7所示的情形都是在第一缓存行的有效位指示第一缓存行的数据有效的情况下进行的。为了描述方便,还是以A6为例进行描述。如图7所示,在第一种情况下,当A6为读请求且命中DRAM125时,内存控制器115不需要更新第一缓存行中的信息。在第二种情况下,当A6为读请求且未命中DRAM 125 时,内存控制器115需要将根据A6从NVM 120中读取数据写到DRAM 125中。换一种表达方式,内存控制器115可以用根据A6从NVM 120中读取的cache line 来替换DRAM 125中的cache entry 200_1的cache line。并且,内存控制器125 需要根据A6携带的目标地址更新第一缓存行中的tag位,例如,将cache entry 200_1中的tag位更新为Tag-A6。内存控制器115还需要将第一缓存行中的dirty 位设置为第一标志(例如,“0”)以指示所述第一缓存行中的数据与NVM 120中对应的内存块中的数据相同。在第三种情况下,当A6为写请求且命中DRAM 125 时,内存控制器115可以将A6中携带的待写入数据写入DRAM125,例如,将 cache entry 200_1中的data位更新为A6中携带的数据Data-A6。并且,内存控制器115可以将第一缓存行中的dirty位设置为第二标志(例如“1”)以指示所述第一缓存行中的数据与NVM 120中对应的内存块中的数据不同。在这种情况下,由于A6的Tag-A6与第一缓存行的tag相同,因此,内存控制器125不需要更新第一缓存行中的tag。在第四种情况下,当A6为写请求且A6未命中DRAM 125 时,内存控制器125需要根据A6的Tag-A6更新第一缓存行的tag。并且,内存控制器115可以将A6中携带的待写入数据写入DRAM 125,例如,将cache entry 200_1中的data位更新为A6中携带的数据Data-A6。内存控制器115可以将第一缓存行中的dirty位设置为第二标志,例如,将cache entry 200_1中的dirty位设置为1,以指示所述第一缓存行中的数据与NVM 120中对应的内存块中的数据不同。
可以理解的是,为了保证数据的正确性,在本发明实施例中,如果第一缓存行当前的dirty位指示第一缓存行缓存的数据为新数据,则在根据A6 更新第一缓存行的信息前,需要先将第一缓存行缓存的数据写到NVM 120中,再根据A6对第一缓存行的信息进行更新。
在本发明实施例中,由于内存控制器115将访问DRAM 125中同一个缓存行(cacheline)的多个访问请求的tag集中在一起与该缓存行的tag进行比较,因此,在处理所述多个访问请求的过程中,内存控制器115只需要从DRAM 125中读取一次该缓存行的tag就可以完成多个访问请求的tag的比较。从而减少了从DRAM125中读取所述第一缓存行的tag的次数,缩短了内存访问延时,提高内存访问效率。进一步的,在本发明实施例中,对于访问同一个缓存行的多个访问请求,只根据其中部分访问请求更新该缓存行的信息,而不需要根据每个访问请求命中缓存的情况更新该缓存行的信息,从而减少了缓存行的更新时间。因此,本发明实施例提供的内存访问方法能够进一步的缩短内存访问请求的访问时延。
为了更清楚的描述本发明实施例提供的内存访问方法的技术效果,下面以图5所示为例,简单对现有技术中的内存方法与本发明实施例提供的内存方法进行对比。本领域人员可以知道,现有技术中,当内存控制器115处理缓存队列502所示的内存访问请求:A0、B1、A2、C3、B2、A5、A6时。假设A0、A2、 A5、A6均是访问第一cache line(例如cache entry200_1)的内存访问请求,B1 和B2均是访问第二cache line(例如cache entry 200_2)的内存访问请求。内存控制器115会先从DRAM 125中读取cache entry 200_1的tag,将Tag-A0与cache entry 200_1的tag进行比较,确定A0是否命中DRAM 125,如果未命中,则会根据A0中的地址访问NVM,并将DRAM 125中的cache entry 200_1的tag更新为Tag-A0。然后,内存控制器115会处理访问请求B1,具体的,从DRAM 125 中读取cache entry 200_2的tag,将Tag-B1与cache entry 200_2的tag进行比较,确定B1是否命中DRAM 125。之后,内存控制器115开始处理访问请求A2,具体的,内存控制器115会再一次从DRAM 125中读取cache entry200_1的tag(此时,cache entry 200_1的tag的值为Tag-A0),将Tag-A2与Tag-A0进行比较,确定A2是否命中DRAM 125,如果A2为写请求或A2未命中DRAM 125,则内存控制器115会根据A2再一次更新cache entry 200_1的tag。
而根据本发明实施例提供的方法,内存控制器115在获得第一访问集合504(包含访问请求A0、A2、A5和A6)之后,内存控制器115会从DRAM 125中读取cache entry 200_1的tag,并集中将第一访问集合504中的访问请求的 tag与cache entry 200_1的tag进行比较。具体的,内存控制器115可以将Tag-A0、 Tag-A2、Tag-A5和Tag-A6分别与cache entry200_1的tag进行比较,以确定访问请求A0、A2、A5和A6是否命中DRAM 125。从而减少了从DRAM125中读取cache entry 200_1的tag的次数。并且内存控制器115只根据A6的命中缓存的情况更新cache entry 200_1的tag。换一种表达方式,内存控制器115只根据 A6的请求类型以及A6命中缓存的情况确定是否替换cache entry 200_1中的 cache line,从而减少了缓存行的更新时间。因此,本发明实施例提供的内存访问方法与现有技术中的内存访问方法相比,能够缩短内存访问请求的访问时延,提高内存访问效率。
进一步的,内存控制器115在按照本发明实施例提供的内存访问方法处理第一访问集合的访问请求时,由于只需要根据各访问请求对DRAM 125 的命中情况分别发送给DRAM 125或NVM 120处理,因此,内存控制器115在根据第二访问集合中的访问请求更新完第一缓存行的信息之后,即可处理下一个访问集合(例如,包含有访问请求B1和B2的访问集合)的访问请求。内存控制器115不需要等待DRAM 125和NVM 120分别处理完第一访问请求中的各个访问请求之后,例如,根据第一访问集合中的访问请求将数据写入DRAM125或 NVM120之后,再处理下一个访问集合中的访问请求。从而能够进一步提高内存访问效率。
图8为本发明实施例提供的一种内存控制器的结构示意图。图8所示的内存控制器可以为图1所示的计算机***中的内存控制器115。如图8所示,所述内存控制器800可以包括下述模块。
确定模块802,从访问队列中确定第一访问集合。其中,所述缓存队列中缓存有多个内存访问请求,第一访问集合中也包含有多个内存访问请求。
获取模块804,获取所述第一访问集合中每一个访问请求的目标地址中的标签。例如,如图5所示,内存控制器115可以根据第一内存访问集合504 中的访问请求的目标地址获得每一个访问请求的tag。具体的,内存控制器115 获取访问请求A0的tag:Tag_A0、访问请求A2的tag:Tag_A2、访问请求A5 的tag:Tag_A5以及访问请求A6的tag:Tag_A6。
所述确定模块802还用于在第一访问集合504中确定第二访问集合 505中的访问请求为更新所述第一缓存行的访问请求。其中,第二访问集合505 中包含有第一访问集合504中的至少一个访问请求,但不包括第一访问集合504 中的所有访问请求。具体的,内存控制器115可以将第一访问集合504中的任意一个访问请求作为更新所述第一缓存行的访问请求。可以理解的是,第二访问集合505中包含的访问请求越少,则更新第一缓存行的次数越少,访问延时越小。实际应用中,可以在第一访问集合504中确定一个访问请求为更新所述第一缓存行的访问请求。换一种表达方式,第二访问集合505中通常可以只有一个访问请求。例如,内存控制器115可以根据第一访问集合504中的最后一个访问请求更新所述第一缓存行。可以理解的是,在组映射方式下,内存控制器115需要分别确定用于更新不同的cache entry的访问请求。
读取模块806,用于从DRAM 125中读取所述第一缓存行的标签tag。如前所述,tag也存放在DRAM中。因此,在内存控制器115判断内存访问请求是否命中缓存(如图1中的DRAM125)时,内存控制器115需要先从DRAM 125 中读取缓存行的tag,以便能够将缓存行中的tag与访问请求中的tag进行比较。例如,第一访问集合504中的A0、A2、A5和A6都是访问同一个cache entry 200_1 的内存访问请求,则在本步骤中,内存控制器115可以从DRAM125中读取cache entry 200_1中记录的tag,以便能够将entry 200_1中记录的tag与各访问请求的 tag进行比较。
比较模块808,将所述第一访问集合405中每一个访问请求的目标地址中的标签与所述第一缓存行的tag相比较,以确定所述第一访问集合405中的每一个访问请求是否命中缓存。例如,若某个访问请求的tag与第一缓存行中的 tag相同,则说明该访问请求命中缓存。若某个访问请求的tag与第一缓存行中的tag不同,则说明该访问请求未命中缓存。
实际应用中,在比较tag的过程中,可以最后将更新所述第一缓存行的tag的访问请求的tag与所述第一缓存行的tag进行比较。具体的,比较模块 808可以先将所述第一访问集合中除所述第二访问集合之外的其他访问请求的目标地址中的标签分别与所述第一缓存行的标签进行比较以确定所述其他访问请求是否命中所述第一级存储器。之后,比较模块808将所述第二访问集合中的访问请求的目标地址中的标签分别与所述第一缓存行的标签进行比较以确定所述第二访问集合中的访问请求是否命中所述第一级存储器。
需要说明的是,在比较过程中,比较模块808还可以先根据第一缓存行中的有效位确定访问请求是否命中缓存。具体的,当所述第一缓存行的有效位指示所述第一缓存行无效时,比较模块808可以直接确定访问请求未命中所述第一缓存行。在所述第一缓存行的有效位指示所述第一缓存行有效时,比较模块 808再将访问请求中的tag与所述第一缓存行的tag进行比较,以确定访问请求是否命中所述第一缓存行。例如,在比较第二访问集合中的第三访问请求是否命中缓存时,若第一缓存行为无效状态,则比较模块808可以直接确定该第三访问请求未命中所述第一级存储器。
处理模块810,用于分别执行所述第一访问集合中的多个访问请求。具体的,内存控制器115可以分别根据第一访问集合中的各访问请求对DRAM 125的命中情况分别处理各访问请求。在本发明实施例中,为了提高缓存命中率,可以先根据第一访问集合504中除第二访问集合505之外的访问请求的访问类型以及命中情况对第一访问集合504中除第二访问集合505之外的访问请求进行处理,再处理第二访问请求集合中的访问请求。
可以理解的是,处理模块810在执行多个访问请求的过程中,需要根据每个访问请求的操作类型以及命中DRAM 125的情况分别进行处理,并且,在处理过程中,还需要考虑所处理的访问请求是否属于用于更新所述第一缓存行的内存访问请求。换一种表达方式,在处理过程中,处理模块810需要区分所处理的访问请求是否属于第二访问集合。处理模块810如何具体处理各个访问请求,可以参考方法实施例中对步骤412的详细描述。
需要说明的是,在本发明实施例中,在处理第二访问集合中的访问请求时,在一种情况下,当所述第二访问集合中的第一访问请求未命中所述第一级存储器,且所述第一访问请求为写请求时,处理模块810可以将所述第一访问请求中携带的待写入数据写入所述第一级存储器。
在另一种情况下,在处理第二访问集合之外的第二访问请求时,当所述第二访问请求命中所述第一级存储器,且所述第二访问请求为写请求时,所述处理模块810可以将所述第二访问请求发送给所述第二级存储器处理。并且,在这种情况下,处理模块810将所述第一缓存行的信息中的有效位设置为无效状态,其中,所述无效状态用于指示所述第一缓存行中的数据不可用。
更新模块812,用于根据第二访问集合505中的访问请求更新所述第一缓存行的信息。具体的,内存控制器115可以根据第二访问集合505中的访问请求的请求类型以及所述第二访问集合505中的访问请求对所述缓存的命中情况更新所述第一缓存行的信息。如前所述,为了减少访问延时,在本发明实施例中只根据第一访问集合中的部分访问请求更新所述第一缓存行。例如,更新模块 812可以根据第二访问集合中的第一访问请求的目标地址的标签更新所述第一缓存行的标签。更新模块812具体如何更新第一缓存行的信息可以参见方法实施例中步骤414的描述。
本发明实施例所提供的存储设备800可以参见前述实施例描述的数据更新方法,具体的,各个模块功能的详细描述可参见前述实施例(例如图4- 图7所示实施例)中对存储节点的相关描述,在此不再赘述。
本发明实施例还提供一种内存访问方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令用于执行前述任意一个方法实施例所述的方法流程。本领域普通技术人员可以理解,前述的存储介质包括:U盘、移动硬盘、磁碟、光盘、随机存储器(Random-Access Memory, RAM)、固态硬盘(Solid State Disk,SSD)或者其他非易失性存储器(non-volatile memory)等各种可以存储程序代码的非短暂性的(non-transitory)机器可读介质。
需要说明的是,本申请所提供的实施例仅仅是示意性的。所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。在本发明实施例、权利要求以及附图中揭示的特征可以独立存在也可以组合存在。在本发明实施例中以硬件形式描述的特征可以通过软件来执行,反之亦然。在此不做限定。
Claims (22)
1.一种应用于计算机***中的内存访问方法,其特征在于,所述计算机***包括第一级存储器、第二级存储器以及连接所述第一级存储器和所述第二级存储器的内存控制器,所述第一级存储器用于缓存所述第二级存储器中的数据,所述方法包括:
所述内存控制器获取第一访问集合中每一个访问请求的目标地址中的标签,其中,所述第一访问集合中包含有多个访问请求,所述多个访问请求分别用于访问所述第二级存储器中的多个不同的内存块,所述多个内存块与所述第一级存储器中的第一缓存行具有映射关系,每一个访问请求的目标地址中的标签用于指示待访问的内存块在所述第二级存储器中的位置;
所述内存控制器从所述第一级存储器中读取所述第一缓存行的信息,所述第一缓存行的信息包含有所述第一缓存行的标签;
所述内存控制器将所述第一访问集合中每一个访问请求的目标地址中的标签分别与所述第一缓存行的标签进行比较以确定所述每一个访问请求是否命中所述第一级存储器。
2.根据权利要求1所述的方法,其特征在于,还包括:所述内存控制器在所述第一访问集合中确定部分访问请求作为第二访问集合;
所述内存控制器只根据所述第二访问集合中的访问请求的请求类型以及所述第二访问集合中的访问请求对所述第一级存储器的命中情况更新所述第一缓存行的信息。
3.根据权利要求2所述的方法,其特征在于,所述内存控制器将所述每一个访问请求的目标地址中的标签分别与所述第一缓存行的标签进行比较以确定所述每一个访问请求是否命中所述第一级存储器包括:
所述内存控制器将所述第一访问集合中除所述第二访问集合之外的其他访问请求的目标地址中的标签分别与所述第一缓存行的标签进行比较以确定所述其他访问请求是否命中所述第一级存储器;
之后,所述内存控制器将所述第二访问集合中的访问请求的目标地址中的标签分别与所述第一缓存行的标签进行比较以确定所述第二访问集合中的访问请求是否命中所述第一级存储器。
4.根据权利要求2或3所述的方法,其特征在于,还包括:
当所述第二访问集合中的第一访问请求未命中所述第一级存储器,且所述第一访问请求为写请求时,所述内存控制器将所述第一访问请求中携带的待写入数据写入所述第一级存储器。
5.根据权利要求4所述的方法,其特征在于,所述更新所述第一缓存行的信息包括:
所述内存控制器根据所述第一访问请求的目标地址的标签更新所述第一缓存行的标签。
6.根据权利要求2-3任意一项所述的方法,其特征在于,还包括:
当所述多个访问请求中的第二访问请求命中所述第一级存储器,且所述第二访问请求为写请求时,所述内存控制器将所述第二访问请求发送给所述第二级存储器处理,其中,所述第二访问请求不属于所述第二访问集合;所述内存控制器将所述第一缓存行的信息中的有效位设置为无效状态,其中,所述无效状态用于指示所述第一缓存行中的数据不可用。
7.根据权利要求6所述的方法,其特征在于,还包括:
所述内存控制器根据第一缓存行的无效状态,确定所述第二访问集合中的第三访问请求未命中所述第一级存储器。
8.一种计算机***,其特征在于,所述计算机***包括第一级存储器、第二级存储器以及连接所述第一级存储器和所述第二级存储器的内存控制器,所述第一级存储器用于缓存所述第二级存储器中的数据,所述内存控制器用于:
获取第一访问集合中每一个访问请求的目标地址中的标签,其中,所述第一访问集合中包含有多个访问请求,所述多个访问请求分别用于访问所述第二级存储器中的多个不同的内存块,所述多个内存块与所述第一级存储器中的第一缓存行具有映射关系,每一个访问请求的目标地址中的标签用于指示待访问的内存块在所述第二级存储器中的位置;
从所述第一级存储器中读取所述第一缓存行的信息,所述第一缓存行的信息包含有所述第一缓存行的标签;
将所述第一访问集合中每一个访问请求的目标地址中的标签分别与所述第一缓存行的标签进行比较以确定所述每一个访问请求是否命中所述第一级存储器。
9.根据权利要求8所述的计算机***,其特征在于,所述内存控制器还用于:
在所述第一访问集合中确定部分访问请求为第二访问集合;
只根据所述第二访问集合中的访问请求的请求类型以及所述第二访问集合中的访问请求对所述第一级存储器的命中情况更新所述第一缓存行的信息。
10.根据权利要求9所述的计算机***,其特征在于,
所述内存控制器用于:
将所述第一访问集合中除所述第二访问集合之外的其他访问请求的目标地址中的标签分别与所述第一缓存行的标签进行比较以确定所述其他访问请求是否命中所述第一级存储器;
之后,将所述第二访问集合中的访问请求的目标地址中的标签分别与所述第一缓存行的标签进行比较以确定所述第二访问集合中的访问请求是否命中所述第一级存储器。
11.根据权利要求9或10所述的计算机***,其特征在于,所述内存控制器还用于:
当所述第二访问集合中的第一访问请求未命中所述第一级存储器,且所述第一访问请求为写请求时,将所述第一访问请求中携带的待写入数据写入所述第一级存储器。
12.根据权利要求11所述的计算机***,其特征在于,所述内存控制器具体用于:
根据所述第一访问请求的目标地址的标签更新所述第一缓存行的标签。
13.根据权利要求9-10任意一项所述的计算机***,其特征在于,所述内存控制器还用于:
当所述多个访问请求中的第二访问请求命中所述第一级存储器,且所述第二访问请求为写请求时,将所述第二访问请求发送给所述第二级存储器处理,其中,所述第二访问请求不属于所述第二访问集合;
将所述第一缓存行的信息中的有效位设置为无效状态,其中,所述无效状态用于指示所述第一缓存行中的数据不可用。
14.根据权利要求13所述的计算机***,其特征在于,
所述内存控制器还用于:根据所述第一缓存行的无效状态,确定所述第二访问集合中的第三访问请求未命中所述第一级存储器。
15.一种内存控制器,其特征在于,所述内存控制器应用于计算机***中,所述计算机***包括第一级存储器、第二级存储器以及连接所述第一级存储器和所述第二级存储器的所述内存控制器,所述第一级存储器用于缓存所述第二级存储器中的数据,所述内存控制器包括:
获取模块,用于获取第一访问集合中每一个访问请求的目标地址中的标签,其中,所述第一访问集合中包含有多个访问请求,所述多个访问请求分别用于访问所述第二级存储器中的多个不同的内存块,所述多个内存块与所述第一级存储器中的第一缓存行具有映射关系,每一个访问请求的目标地址中的标签用于指示待访问的内存块在所述第二级存储器中的位置;
读取模块,用于读取所述第一缓存行的信息,所述第一缓存行的信息包含有所述第一缓存行的标签;
比较模块,用于将所述第一访问集合中每一个访问请求的目标地址中的标签分别与所述第一缓存行的标签进行比较以确定所述每一个访问请求是否命中所述第一级存储器。
16.根据权利要求15所述的内存控制器,其特征在于,还包括:
确定模块,用于在所述第一访问集合中确定部分访问请求作为第二访问集合;
更新模块,用于只根据所述第二访问集合中的访问请求的请求类型以及所述第二访问集合中的访问请求对所述第一级存储器的命中情况更新所述第一缓存行的信息。
17.根据权利要求16所述的内存控制器,其特征在于,
所述比较模块用于:
将所述第一访问集合中除所述第二访问集合之外的其他访问请求的目标地址中的标签分别与所述第一缓存行的标签进行比较以确定所述其他访问请求是否命中所述第一级存储器;
之后,将所述第二访问集合中的访问请求的目标地址中的标签分别与所述第一缓存行的标签进行比较以确定所述第二访问集合中的访问请求是否命中所述第一级存储器。
18.根据权利要求16或17所述的内存控制器,其特征在于,还包括:
处理模块,用于当所述第二访问集合中的第一访问请求未命中所述第一级存储器,且所述第一访问请求为写请求时,将所述第一访问请求中携带的待写入数据写入所述第一级存储器。
19.根据权利要求18所述的内存控制器,其特征在于,所述更新模块用于:
根据所述第一访问请求的目标地址的标签更新所述第一缓存行的标签。
20.根据权利要求18所述的内存控制器,其特征在于,所述处理模块还用于:
当所述多个访问请求中的第二访问请求命中所述第一级存储器,且所述第二访问请求为写请求时,将所述第二访问请求发送给所述第二级存储器处理,其中,所述第二访问请求不属于所述第二访问集合;
将所述第一缓存行的信息中的有效位设置为无效状态,其中,所述无效状态用于指示所述第一缓存行中的数据不可用。
21.根据权利要求20所述的内存控制器,其特征在于,所述比较模块还用于:
根据第一缓存行的无效状态,确定所述第二访问集合中的第三访问请求未命中所述第一级存储器。
22.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被计算机设备执行时能实现权利要求1至7任意一项所述的方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2016/106130 WO2018090255A1 (zh) | 2016-11-16 | 2016-11-16 | 内存访问技术 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109952565A CN109952565A (zh) | 2019-06-28 |
CN109952565B true CN109952565B (zh) | 2021-10-22 |
Family
ID=62146058
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680090713.9A Active CN109952565B (zh) | 2016-11-16 | 2016-11-16 | 内存访问技术 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11210020B2 (zh) |
EP (1) | EP3534265A4 (zh) |
CN (1) | CN109952565B (zh) |
WO (1) | WO2018090255A1 (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111143244B (zh) * | 2019-12-30 | 2022-11-15 | 海光信息技术股份有限公司 | 计算机设备的内存访问方法和计算机设备 |
CN111241009B (zh) * | 2019-12-31 | 2023-05-16 | 西安翔腾微电子科技有限公司 | 一种数据反馈方法及装置 |
CN111259384B (zh) * | 2020-01-17 | 2022-06-14 | 中国科学院计算技术研究所 | 一种基于缓存随机无效的处理器瞬态攻击防御方法 |
US11301380B2 (en) | 2020-05-18 | 2022-04-12 | Micron Technology, Inc. | Sector-based tracking for a page cache |
US11550725B2 (en) | 2020-05-18 | 2023-01-10 | Micron Technology, Inc. | Dynamically sized redundant write buffer with sector-based tracking |
US11586547B2 (en) * | 2020-05-26 | 2023-02-21 | Micron Technology, Inc. | Instruction caching scheme for memory devices |
CN116561020B (zh) * | 2023-05-15 | 2024-04-09 | 合芯科技(苏州)有限公司 | 一种混合缓存粒度下的请求处理方法、设备及存储介质 |
CN117331853B (zh) * | 2023-10-11 | 2024-04-16 | 上海合芯数字科技有限公司 | 缓存处理方法、装置、电子设备及介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6487640B1 (en) * | 1999-01-19 | 2002-11-26 | International Business Machines Corporation | Memory access request reordering to reduce memory access latency |
CN101201800A (zh) * | 2007-12-21 | 2008-06-18 | 福建星网锐捷网络有限公司 | 数据处理方法和装置 |
CN103198026A (zh) * | 2012-01-09 | 2013-07-10 | 辉达公司 | 指令高速缓存功耗降低 |
CN104346293A (zh) * | 2013-07-25 | 2015-02-11 | 华为技术有限公司 | 混合内存的数据访问方法、模块、处理器及终端设备 |
CN104809076A (zh) * | 2014-01-23 | 2015-07-29 | 华为技术有限公司 | Cache的管理方法及装置 |
CN105786400A (zh) * | 2014-12-25 | 2016-07-20 | 研祥智能科技股份有限公司 | 一种异构混合内存组件、***及存储方法 |
CN105938458A (zh) * | 2016-04-13 | 2016-09-14 | 上海交通大学 | 软件定义的异构混合内存管理方法 |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6321321B1 (en) * | 1999-06-21 | 2001-11-20 | Vlsi Technology, Inc. | Set-associative cache-management method with parallel and single-set sequential reads |
US7512750B2 (en) * | 2003-12-31 | 2009-03-31 | Intel Corporation | Processor and memory controller capable of use in computing system that employs compressed cache lines' worth of information |
US20090006756A1 (en) * | 2007-06-29 | 2009-01-01 | Donley Greggory D | Cache memory having configurable associativity |
CN101266578A (zh) * | 2008-02-22 | 2008-09-17 | 浙江大学 | 基于增量式闭合序列挖掘的高速缓存数据预取方法 |
CN101355583B (zh) * | 2008-09-11 | 2012-05-23 | 南京大学 | 无线自组网中基于松散位置依赖的缓存搜索方法 |
US9916253B2 (en) * | 2012-07-30 | 2018-03-13 | Intel Corporation | Method and apparatus for supporting a plurality of load accesses of a cache in a single cycle to maintain throughput |
US9430410B2 (en) * | 2012-07-30 | 2016-08-30 | Soft Machines, Inc. | Systems and methods for supporting a plurality of load accesses of a cache in a single cycle |
CN104346294B (zh) * | 2013-07-31 | 2017-08-25 | 华为技术有限公司 | 基于多级缓存的数据读/写方法、装置和计算机*** |
US9760492B2 (en) * | 2014-11-21 | 2017-09-12 | Mediatek Singapore Pte. Ltd. | Method for controlling access of cache through using programmable hashing address and related cache controller |
US9582430B2 (en) * | 2015-03-27 | 2017-02-28 | Intel Corporation | Asymmetric set combined cache |
US9846648B2 (en) * | 2015-05-11 | 2017-12-19 | Intel Corporation | Create page locality in cache controller cache allocation |
US10073786B2 (en) * | 2015-05-28 | 2018-09-11 | Micron Technology, Inc. | Apparatuses and methods for compute enabled cache |
CN105138587B (zh) * | 2015-07-31 | 2019-09-10 | 小米科技有限责任公司 | 数据访问方法、装置和*** |
US10261901B2 (en) * | 2015-09-25 | 2019-04-16 | Intel Corporation | Method and apparatus for unneeded block prediction in a computing system having a last level cache and a multi-level system memory |
US10901908B2 (en) * | 2019-01-16 | 2021-01-26 | International Business Machines Corporation | Storing data into a memory |
-
2016
- 2016-11-16 WO PCT/CN2016/106130 patent/WO2018090255A1/zh unknown
- 2016-11-16 CN CN201680090713.9A patent/CN109952565B/zh active Active
- 2016-11-16 EP EP16921537.3A patent/EP3534265A4/en not_active Ceased
-
2019
- 2019-05-16 US US16/414,383 patent/US11210020B2/en active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6487640B1 (en) * | 1999-01-19 | 2002-11-26 | International Business Machines Corporation | Memory access request reordering to reduce memory access latency |
CN101201800A (zh) * | 2007-12-21 | 2008-06-18 | 福建星网锐捷网络有限公司 | 数据处理方法和装置 |
CN103198026A (zh) * | 2012-01-09 | 2013-07-10 | 辉达公司 | 指令高速缓存功耗降低 |
CN104346293A (zh) * | 2013-07-25 | 2015-02-11 | 华为技术有限公司 | 混合内存的数据访问方法、模块、处理器及终端设备 |
CN104809076A (zh) * | 2014-01-23 | 2015-07-29 | 华为技术有限公司 | Cache的管理方法及装置 |
CN105786400A (zh) * | 2014-12-25 | 2016-07-20 | 研祥智能科技股份有限公司 | 一种异构混合内存组件、***及存储方法 |
CN105938458A (zh) * | 2016-04-13 | 2016-09-14 | 上海交通大学 | 软件定义的异构混合内存管理方法 |
Also Published As
Publication number | Publication date |
---|---|
EP3534265A1 (en) | 2019-09-04 |
CN109952565A (zh) | 2019-06-28 |
US11210020B2 (en) | 2021-12-28 |
WO2018090255A1 (zh) | 2018-05-24 |
US20190272122A1 (en) | 2019-09-05 |
EP3534265A4 (en) | 2019-10-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109952565B (zh) | 内存访问技术 | |
CN109582214B (zh) | 数据访问方法以及计算机*** | |
US11119940B2 (en) | Sequential-write-based partitions in a logical-to-physical table cache | |
US7941692B2 (en) | NAND power fail recovery | |
KR101449524B1 (ko) | 스토리지 장치 및 컴퓨팅 시스템 | |
US8612692B2 (en) | Variable write back timing to nonvolatile semiconductor memory | |
CN110018971B (zh) | 缓存替换技术 | |
KR20220045216A (ko) | 유형화된 메모리 액세스에 대한 유형화되지 않은 메모리 액세스의 맵핑 | |
CN105095116A (zh) | 缓存替换的方法、缓存控制器和处理器 | |
TWI533127B (zh) | 記憶體模組上之資料管理技術 | |
KR20220041937A (ko) | 메모리 유형에 대한 페이지 테이블 후크 | |
KR20220060548A (ko) | 데이터가 저장된 메모리 디바이스를 식별하기 위해 저장된 메타데이터 액세싱 | |
US11016905B1 (en) | Storage class memory access | |
TW201821996A (zh) | 管理記憶體裝置中記憶體單元的實體資訊的方法及系統 | |
CN107870867B (zh) | 32位cpu访问大于4gb内存空间的方法与装置 | |
KR20220049026A (ko) | 메모리 네임스페이스에 대한 데이터 바인딩을 위한 메모리 시스템 | |
US11188467B2 (en) | Multi-level system memory with near memory capable of storing compressed cache lines | |
US10235049B2 (en) | Device and method to manage access method for memory pages | |
JP6228523B2 (ja) | メモリ制御回路および半導体記憶装置 | |
WO2021055675A1 (en) | Managing data dependencies in a transfer pipeline of a hybrid dimm | |
CN110968527B (zh) | Ftl提供的缓存 | |
CN112805692A (zh) | 混合式双列直插式存储器模块中的高速缓存操作 | |
CN107870870B (zh) | 访问超过地址总线宽度的内存空间 | |
US11409665B1 (en) | Partial logical-to-physical (L2P) address translation table for multiple namespaces | |
US20240061769A1 (en) | Memory device hardware host read actions based on lookup operation results |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |