CN113946435A - 内存管理技术及计算机系统 - Google Patents

内存管理技术及计算机系统 Download PDF

Info

Publication number
CN113946435A
CN113946435A CN202011176594.3A CN202011176594A CN113946435A CN 113946435 A CN113946435 A CN 113946435A CN 202011176594 A CN202011176594 A CN 202011176594A CN 113946435 A CN113946435 A CN 113946435A
Authority
CN
China
Prior art keywords
row
access
memory
indicator
target
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.)
Pending
Application number
CN202011176594.3A
Other languages
English (en)
Inventor
肖世海
梁传增
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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN202110188761.4A priority Critical patent/CN112965816B/zh
Priority to JP2023503053A priority patent/JP2023534052A/ja
Priority to PCT/CN2021/093982 priority patent/WO2022012143A1/zh
Priority to EP21842284.8A priority patent/EP4174666A4/en
Priority to KR1020237005222A priority patent/KR20230037649A/ko
Publication of CN113946435A publication Critical patent/CN113946435A/zh
Priority to US18/154,532 priority patent/US20230152977A1/en
Pending legal-status Critical Current

Links

Images

Classifications

    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/21Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements
    • G11C11/34Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices
    • G11C11/40Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors
    • G11C11/401Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors forming cells needing refreshing or charge regeneration, i.e. dynamic cells
    • G11C11/4063Auxiliary circuits, e.g. for addressing, decoding, driving, writing, sensing or timing

Landscapes

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

Abstract

一种内存管理技术及计算机系统。所述内存管理技术可以应用于包括动态随机存取存储器DRAM的计算机系统中。根据所述内存管理技术,可以根据内存访问的访问类型执行对应的行管理策略,其中,所述内存访问访问类型包括读访问或写访问。这种内存管理技术充分考虑了不同的访问类型的局部性不同的因素,从而能够使得内存行的管理更加准确,减少因行管理策略不当引起的内存访问延时,提升内存访问效率。

Description

内存管理技术及计算机系统
技术领域
本申请涉及计算机技术领域,尤其涉及一种内存管理技术及计算机系统。
背景技术
动态随机存取存储器(Dynamic Random Access Memory,DRAM)是一种半导体存储器,主要的作用原理是利用电容内存储电荷的多寡来代表一个二进制比特(bit)是1还是0。DRAM通常作为计算机的内存(或称为:主存储器)使用,是与中央处理器(CPU,centralprocessing unit)直接交换数据的内部存储器。DRAM行管理策略(DRAM Row BufferPolicy)或者DRAM行策略(DRAM row Policy)是指DRAM的ROW Buffer的管理策略。具体是指当DRAM的某一个存储库(bank)的一个行被打开之后,何种条件下触发该行关闭的策略。或者说,DRAM行管理策略是指一个行的数据进入对应bank的行缓存之后,在什么条件下触发该bank的行缓存关闭的策略。
在进行内存访问时,内存中行的状态对该内存访问的影响可以包括行命中和行冲突。其中,行命中表示待访问的行,正好和待访问的BANK中已经打开的行是一致的。在行命中的情况下,只需要发送一个列访问命令(例如读或者写命令),即可读出或者写入数据。行冲突表示待访问的BANK中已经有一个行处于打开状态,但是当前打开的行和待访问的行不是同一个行,这时候需要先把当前打开的行关闭,再打开待访问的行,然后再进行列访问。通常,行命中的延时大约是行冲突的1/3。因此,在内存访问中,如果过早关闭内存行,会增加访问延时。而如果过晚关闭内存行,又会导致行冲突,增加延时。因此DRAM行管理策略是影响DRAM访问延时和访问带宽的关键因素之一。
发明内容
本申请提供的一种内存管理技术及计算机系统,能够降低内存访问延时,提升内存访问效率。
第一方面,本发明实施例提供了一种内存管理方法。所述内存管理方法可以应用于包括动态随机存取存储器DRAM的计算机系统中。该方法可以由计算机系统中的内存控制器来实现。在该方法中,在获取内存访问后,内存控制器可以确定所述内存访问的访问类型,并执行与所述内存访问的访问类型对应的行管理策略,其中,所述内存访问的访问类型包括读访问和写访问。
本发明实施例提供的内存管理方法,充分考虑了不同类型的内存访问的局部性的差异,根据所述内存访问的类型执行对应的行管理策略。从而能够使得内存行的管理更加准确,减少因行管理策略不当引起的内存访问延时,提升内存访问效率。
结合第一方面,在一种可能的实现方式中,所述内存访问用于访问内存中的目标存储库中的目标行,所述执行与所述内存访问的访问类型对应的行管理策略包括:执行与所述内存访问的访问类型对应的所述目标存储库的行管理策略,其中,所述内存包括一个或多个存储库,所述目标存储库为所述一个或多个存储库中的任意一个存储库。在这种情况下,对于不同的目标存储库可以执行不同的行管理策略,管理粒度更小,管理更加精确。
在一种可能的实现方式中,还可以根据所述内存访问的访问类型和所述目标行的行命中状态调整所述行管理策略。具体的,其中,所述行命中状态包括下述状态中的至少一种:行命中、行冲突和行空闲。
在一种可能的实现方式中,在根据所述内存访问的访问类型和目标行的行命中状态调整所述目标存储库的行管理策略时,当所述内存访问为读访问时,所述内存控制器可以根据所述目标行的行命中状态调整所述目标存储库的第一指示器。所述第一指示器用于指示所述目标存储库的第一行管理策略,所述第一行管理策略用于指示在执行所述读访问后是否关闭所述目标行。
根据这种方式,由于设置有用于指示执行读访问后的行管理策略的第一指示器,所述第一指示器只根据读访问以及所述目标行的行命中状态进行调整,从而使得调整更加准确,通过所述第一指示器指示的行管理策略也更加准确,近而能够减少内存访问延时。
在又一种可能的实现方式中,在根据所述内存访问的访问类型和目标行的行命中状态调整所述目标存储库的行管理策略时,如果所述内存访问为写访问,则可以根据所述目标行的行命中状态调整所述目标存储库的第二指示器,所述第二指示器用于指示所述目标存储库的第二行管理策略,所述第二行管理策略用于指示在执行所述写访问后是否关闭所述目标行。在这种情况下,由于设置有用于指示执行写访问后的行管理策略的第二指示器,所述第二指示器只根据写访问以及所述目标行的行命中状态进行调整。从而使得在执行读访问和写访问后可以根据不同的指示器的指示执行不同的行管理策略,调整更加准确,近而能够减少内存访问延时。
在又一种可能的实现方式中,所述根据所述内存访问的访问类型和目标行的行命中状态调整所述目标存储库的行管理策略还可以包括:如果所述内存访问的访问类型为写访问,则确定所述目标存储库的行管理策略为与所述写访问对应的预设的行管理策略,其中,所述预设的行管理策略用于指示在执行所述写访问后是否关闭所述目标行。在这种情形下,可以只为目标存储库设置用于指示在执行读访问后的行管理策略的第一指示器,所述第一指示器只根据访问目标存储库的读访问进行调整,而对于写访问,由于其局部性较差,即使进行调整效果也不大,因此可以采用预设的行管理策略,在执行内存访问期间不进行调整。例如,实际应用中,考虑到写访问的局部性不好,预设的行管理策略可以用于指示是执行完写访问后关闭所述目标行。换一种表达方式,在这种情况下,可以只调整执行读访问后的行管理策略,而不调整执行写访问后的行管理策略。
在又一种可能的实现方式中,所述行命中状态包括行命中或行冲突,所述根据所述目标行的行命中状态调整所述目标存储库的第一指示器或第二指示器包括:如果所述内存访问导致了行命中,则将所述第一指示器或所述第二指示器向第一指向调整;如果所述内存访问导致了行冲突,则将所述第一指示器或所述第二指示器向第二指向调整。其中,所述第一指向表示所述目标行不关闭或将所述目标行维持在打开状态,所述第二指向表示所述目标行关闭。
在又一种可能的实现方式中,所述行命中状态包括行空闲,所述根据所述目标行的行命中状态调整所述第一指示器或所述第二指示器包括:如果所述内存访问导致了行空闲,则确定所述内存访问是否可能导致行命中;如果所述内存访问可能导致行命中,则将所述第一指示器或所述第二指示器向所述第一指向调整,其中,所述第一指向表示所述目标行不关闭或将所述目标行维持在打开状态,所述可能导致行命中是指假设所述目标存储库中最后打开的行不关闭则会导致行命中;如果所述内存访问可能导致行冲突,则将所述第一指示器或所述第二指示器向所述第二指向调整,其中,所述第二指向表示所述目标行关闭,所述可能导致行冲突是指假设所述目标存储库中最后打开的行不关闭则会导致行冲突。
在又一种可能的实现方式中,所述方法还包括确定所述内存访问的前一个访问的访问类型。所述根据所述目标行的行命中状态调整所述目标存储库的第一指示器或第二指示器包括:根据所述目标行的行命中状态以及所述内存访问的前一个访问的访问类型调整所述目标存储库的第一指示器或第二指示器。
在又一种可能的实现方式中,所述第一指示器的初始值大于所述第二指示器的初始值。
在又一种可能的实现方式中,在调整所述第一指示器时,向所述第一指向调整的第一调整幅度大于向所述第二指向调整时的第二调整幅度;在调整所述第二指示器时,向所述第一指向调整时的第三调整幅度小于向所述第二指向调整时的第四调整幅度。
在上述几种调整方式中,充分考虑了读访问以及写访问局部性的差异,根据访问所述目标存储库的内存访问的类型、当前内存访问的前一个内存访问的类型、以及所述目标行的行命中状态,分别调整所述目标存储库的第一指示器或第二指示器,使得所述目标存储库的第一指示器的值或第二指示器的值的调整更加准确,从而内存控制器可以根据所述目标存储库的第一指示器或第二指示器的指示更准确的确定何时关闭所述目标存储库的行,减少因行管理策略不当引起的内存访问延时,提升内存访问效率。
在又一种可能的实现方式中,所述内存访问属于第一批内存访问,则在确定所述第一批内存访问执行完毕且待执行第二批内存访问时,如果所述第一批内存访问的访问类型和所述第二批内存访问的访问类型不同,则将所述目标行关闭;如果所述第一批内存访问和所述第二批内存访问均为读访问,则将所述目标行保持打开状态;或如果所述第一批内存访问和所述第二批内存访问均为写访问,则将所述目标行关闭。这种分批次调度内存访问的方式,可以将属于相同类型的内存访问放在同一批次进行调度,节省了读、写切换时间,提升了内存访问效率。
在又一种可能的实现方式中,所述根据所述第一指示器或第二指示器的指示调整所述目标存储库的行管理策略可以包括:当所述第一指示器的值或所述第二指示器的值大于预设阈值时,在执行完所述读访问后将所述目标行保持在打开状态,直到保持打开状态的时间到达所述第一指示器的值或所述第二指示器的值时关闭所述内存行。
在又一种可能的实现方式中,所述根据所述第一指示器的指示或所述第二指示器的指示调整所述目标存储库的行管理策略可以包括:当所述第一指示器的值或所述第二指示器的值大于或等于第一阈值时,将所述目标行保持在打开状态;或当所述第一指示器的值或第二指示器的值小于所述第一阈值时,关闭所述目标行。
第二方面,本申请提供了一种内存管理装置,包括至少一个处理器以及用于实现第一方面或第一方面的任意一种实现方式中的内存管理方法的内存控制器。
第三方面,本申请提供了一种内存控制器,包括通信接口以及用于执行第一方面或第一方面的任意一种实现方式中的内存管理方法的逻辑电路。其中,所述通信接口用于接收计算机系统的处理器发送的内存访问。
第四方面,本申请提供了一种计算机系统,包括内存以及如前述第二方面所述的内存管理装置。
第五方面,本申请提供了一种内存管理装置,所述内存管理装置包括用于实现上述第一方面或第一方面的任意一种实现方式中的内存管理方法的功能模块。
第六方面,本申请还提供了一种计算机程序产品,包括程序代码,所述程序代码包括的指令被计算机所执行,以实现上述第一方面或第一方面的任意一种实现方式中的内存管理方法。
第七方面,本申请还提供了一种计算机可读存储介质,所述计算机可读存储介质用于存储程序代码,所述程序代码包括的指令被计算机所执行,以实现前述第一方面或第一方面的任意一种实现方式中的内存管理方法。
附图说明
为了更清楚的说明本发明实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例。
图1为本发明实施例提供的一种计算机系统架构示意图;
图2为本发明实施例提供的一种内存芯片的结构示意图;
图3为本发明实施例提供的一种内存访问延时示意图;
图4A为本发明实施例提供的一种内存管理方法的流程图;
图4B为本发明实施例提供的又一种内存管理方法的流程图;
图5A-5D为本发明实施例提供的行管理策略的调整方法流程图;
图6为本发明实施例提供的一种内存行管理策略的执行方法流程图;
图7为本发明实施例提供的又一种内存管理方法的流程图;
图8为本发明实施例提供的一种内存访问的调度示意图;
图9为本发明实施例提供的又一种内存管理方法的流程图;
图10为本发明实施例提供的一种内存管理装置的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚的描述。显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。
动态随机存取存储器(Dynamic Random Access Memory,DRAM)是一种半导体存储器,主要的作用原理是利用电容内存储电荷的多寡来代表一个二进制比特(bit)是1还是0。DRAM通常作为计算机系统的内存(或称为:主存储器)使用,是与中央处理器(CPU,centralprocessing unit)直接交换数据的内部存储器。图1为本发明实施例提供的计算机系统架构示意图。本发明实施例提供的计算机系统可以包括服务器、桌面计算机、各种专用计算机。如图1所示,计算机系统100至少可以包括处理器102、内存控制器106以及内存108。通常,内存控制器106可以集成在处理器102中。需要说明的是,除了图1所示的器件外,计算机系统100还可以包括通信接口以及作为外存的磁盘等其他器件,在此不做限制。
处理器(Processor)102是计算机系统100的运算核心和控制核心。处理器102中可以包括一个或多个处理器核(core)104。处理器102可以是一块超大规模的集成电路。在处理器102中安装有操作系统和其他软件程序,从而处理器102能够实现对内存108、缓存及磁盘的访问。可以理解的是,在本发明实施例中,处理器102中的Core 104例如可以是中央处理器(Central Processing unit,CPU),还可以是其他特定集成电路(ApplicationSpecific Integrated Circuit,ASIC)。实际应用中,计算机系统100也可以包括多个处理器。
内存控制器(Memory Controller)106是计算机系统100内部控制内存108并用于管理与规划从内存108到Core 104间的数据传输的总线电路控制器。通过内存控制器106,内存108与Core 104之间可以交换数据。内存控制器106可以是一个单独的芯片,并通过系统总线与Core 104连接。本领域技术人员可以知道,内存控制器106也可以被集成到处理器102中(如图1所示),也可以被内置于北桥中,还可以是一块独立的内存控制器芯片,本发明实施例不对内存控制器20的具体位置和存在形式进行限定。实际应用中,内存控制器106可以控制必要的逻辑以将数据写入内存108或从内存108中读取数据。内存控制器106可以是通用处理器、专用加速器、GPU、FPGA、嵌入式处理器等处理器系统中的内存控制器。
内存108是计算机系统100的主存。内存108通过双倍速率(double data rate,DDR)总线和内存108相连。内存108通常用来存放操作系统中各种正在运行的软件、输入和输出数据以及与外存交换的信息等。为了提高处理器102的访问速度,内存108需要具备访问速度快的优点。在传统的计算机系统架构中,通常采用动态随机存取存储器(DynamicRandom Access Memory,DRAM)作为内存108。处理器102能够通过内存控制器106高速访问内存108,对内存108中的任意一个存储单元进行读操作和写操作。
实际应用中,内存108可以包括一个或多个双列直插式存储模块(Dual-Inline-Memory-Modules,DIMM)110。图1中以内存108包括两个DIMM110为例进行图示。通常,一个DIMM可以被作为一个内存条实体,一个内存条会有两个面,高端的内存条,两个面都有内存颗粒。我们将每个面叫做一个Rank,也就是说一个内存条会存在Rank0和Rank1。如图1所示,一个DIMM 110可以包括一个或多个Rank 112。每个Rank 112可以包括多个内存芯片(chip)114。
本领域技术人员可以知道,数据存储于内存108中,具体的,数据存储于内存芯片114中的存储单元中。在本发明实施例中,存储单元是指用于存储数据的最小存储单元(cell)。通常,一个存储单元可以存储1位(bit)数据。当然,有的存储单元也可以实现多值存储。在DRAM作为内存108时,DRAM中的存储单元(也可以被称为DRAM cell)被排列分布成一个矩阵,这个矩阵我们称之为存储库(memory bank)或DRAM bank。根据这种方式,一个内存芯片114中的存储单元可以被逻辑划分为多个存储库(bank),每个存储库可以看成是多个存储单元组成的存储阵列。存储库中的每个存储单元(memorycell)都通过它所在的行地址和列地址进行标识,内存控制器通过相应的行列解码器可以定位到存储库中的任意一个存储单元。在本发明实施例中,存储库也可以被简称为库(bank)。
图2为本发明实施例提供的一种内存芯片的结构示意图。图2以芯片114包括8个bank为例进行图示。内存芯片114可以包括控制和刷新电路1140、多个存储库(memorybank)1142、行地址缓存(row address buffer)1143、列地址缓存(column addressbuffer)1144、行解码器(row decoder)1145以及列解码器(column decoder)1146。其中,控制和刷新电路1140用于控制对内存单元的刷新操作。本领域技术人员可以知道,DRAM是利用电容存储电量的多寡来代表数据0和1,是易失性的存储器。由于电容存在漏电现象,只能在很短的时间内保持电荷,如果电容中的电荷不足,会导致存储的数据出错。因此,为了存储数据,控制和刷新电路1140需要自动执行刷新操作,对存储数据为“1”的内存单元进行充电,以防止DRAM 108丢失数据。
在进行内存访问的过程中,接收到一个内存访问请求后,内存控制器106会根据接收的内存访问请求生成地址信号和控制信号,并向DIMM 110发送生成的地址信号和控制信号以执行对内存的访问。其中,地址信号可以包括行地址信号和列地址信号,控制信号可以包括片选信号(CS)、写使能信号(WE)、列访问选通信号(CAS)和行访问选通信号(RAS)等。这些信号可以由控制和刷新电路1140接收,行地址信号被缓存到行地址缓冲器(row addressbuffer)1143中,列地址信号被缓存到列地址缓冲器(column address buffer)1144中,控制信号被传递到与地址信号指定的行地址对应的bank。
行地址缓冲器1143用于缓存内存控制器106发送的行地址信号。列地址缓冲器1144用于缓存内存控制器106发送的列地址信号。行解码器1145分别连接行地址缓冲器1143和多个bank 1142,列解码器1146分别连接列地址缓冲器1144和多个bank 1142。行解码器(row decoder)1145用于解码行地址信号,列解码器(column decoder)1146用于解码列地址信号,从而能够根据解码后的行地址信号和列地址信号定位到bank 1142中对应的存储单元。
在内存控制器访问DRAM时,内存控制器106需要先识别与待访问的数据对应的内存行,并确定待访问的内存行所属的bank,然后内存控制器106会“打开”(open)对应的bank和内存行。在部分实现方式中,也可以将内存行称为“页”,“页”是一个逻辑概念,在这种情况下,一个页包括DRAM中的一个内存行的内存单元。通常,内存页的大小可以包括512、1024(1K)、2048(2K)、4098(4K)、8196(8K)、16392(16K)或32,768(32K)比特的数据。
通常,在进行内存访问时,待访问的内存行可能处于以下三种状态之一:行命中(row hit)、行空闲(row idle)或行冲突(rowconflict)。行命中(row hit)表示待访问的内存行已经被打开,也就是说被访问的内存行的数据已经被加载到与存储该行数据的bank相对应的行缓存(row buffer)中,直接发送列访问命令即可从该行存储单元中读出数据或者向该行的存储单元写入数据。其中,列访问命令可以包括读命令或写命令。行空闲(rowidle)用于指示待访问的内存行对应的bank处于空闲状态,没有内存行被打开,需要通过“激活”命令将待访问的内存行打开后再进行访问。也就是说,需要通过“激活”命令将待访问的内存行的数据加载到与该bank对应的行缓存中,然后才能发送列访问命令进行访问。行冲突(rowconflict)用于指示当前打开的内存行与待访问的内存行不同。在rowconflict这种情况下,首先需要将当前打开的内存行“关闭”,具体包括使用“预充电”命令将已打开内存行的数据写回到存储器阵列,然后再使用激活(activate)命令将待访问的行的数据加载到对应的行缓存中,之后再发送列访问命令进行访问。在本发明实施例中,可以将待访问的内存行所处的上述三种状态称为内存行的行命中状态。也可以将“内存行”简称为“行”,所述待访问的内存行也可以被称为目标行。
从上述描述可知,在内存访问过程中,待访问的行的不同的状态对访问会造成不同的延时。图3为本发明实施例提供的一种内存访问延时示意图。如图3所示,在行命中(rowhit)的状态下(如图3的302所示),由于待访问的行已经处于打开状态,内存控制器可以直接发送列访问命令。在发送列访问命令后即可从内存中读取数据或向内存中写入数据。在列访问命令为读命令的情况下,经过一段延时303,即可获得读取的数据。在行空闲(rowidle)的情况下(如图3的304所示),由于bank中没有行被打开,需要通过“激活”命令将待访问的行打开后再进行访问。因此,内存控制器106需要先发送行激活命令,等待延时303后,再发送列访问命令,对打开的行进行访问。在列访问命令为读命令的情况下,还需要等待一段延时305,才能获得读取的数据。在行冲突(rowconflict)的情况下(如图3的306所示),由于当前打开的行不是待访问的行,需要先发送预充电(pre-charge)命令关闭当前打开的行,等待延时307后,再发送行激活命令去打开待访问的行,再等待延时305后,再发送列访问命令对待访问的行进行访问。在列访问命令为读命令的情况下,发送列访问命令后,还需要再等待延时303,才能获得读取的数据。
从图3可以看出,在行命中的情况下,延时最小,在这种情况下,如果过早关闭当前打开的行,会引起行空闲的状态,增加延时。而如果过晚关闭当前打开的行,则可能导致行冲突,也会增加延时。因此,当DRAM的某一个行被打开的情况下,在什么条件下触发已经打开的行关闭的策略是影响DRAM的访问延时和带宽的重要因素。
内存行管理策略又可以被称为DRAM行管理策略(DRAM row closingpolicy)或者DRAM行策略(DRAM row Policy),是用于对DRAM的行缓存ROW Buffer进行管理的策略。具体是指当DRAM的某一个BANK的一个行被打开之后,在什么条件下触发该行关闭的策略。或者说,DRAM行管理策略是指当一个行的数据进入对应BANK的行缓存ROW buffer中之后,在什么条件下触发该bank的缓存Row Buffer关闭的策略。因此,DRAM行管理策略会影响DRAM的访问延时和带宽。
本发明实施例提供了一种内存管理技术,能够动态调整DRAM中各bank的行管理策略,以降低内存访问延时,提升内存访问效率。为描述方便,本发明实施例中,内存行管理策略也可以被称为行管理策略。本发明实施例提供的内存管理技术可以应用于图1所示的计算机系统中。在本发明实施例中,为每个存储库(bank)都设置有独立的策略指示器,内存控制器可以根据每个bank设置的策略指示器调整存储库的行管理策略。考虑到读命令和写命令访问的局部性差异,在本发明实施例中,可以为同一个bank设置第一指示器和第二指示器,其中,所述第一指示器用于指示执行读访问后的行管理策略,第二指示器用于指示执行写访问后的行管理策略。内存控制器可以根据第一指示器和第二指示器共同确定对应的bank的行管理策略。如图4A所示,图4A为本发明实施例提供的一种内存管理方法的流程图。该方法可以由图1所示的计算机系统中的内存控制器来执行,该方法可以包括如下步骤。
在步骤401中,获取目标内存bank的内存访问。在本发明实施例中,所述内存包括一个或多个存储库,目标内存bank可以是内存110中任意一个内存芯片114中的任意一个bank。所述内存访问可以是用于访问目标存储库中的目标行。可以理解的是,接收的内存访问可以包括读/写标识、地址、请求ID等信息。并且,如果所述内存访问是写访问,所述写访问中还可以携带有待写入所述内存的数据。其中,所述读/写标识用于指示所述内存访问的访问类型。所述地址用于指示待访问的地址,可以根据所述地址获得所述内存访问待访问的bank标识。所述请求ID用于标识所述内存访问。
在步骤403中,内存控制器确定所述内存访问的访问类型。其中,所述访问类型包括读访问或写访问。在本步骤中,可以根据所述内存访问中的读/写标识确定所述内存访问的访问类型。
在步骤405中,执行与所述内存访问的访问类型对应的行管理策略。在本发明实施例中,考虑到读访问和写访问的局部性特征的差异,通常,读访问的局部性比写访问的局部性更好,因此,在本发明实施例中对读访问和写访问分别采用不同的行管理策略。需要说明的是,局部性好是指连续多个命令会反复访问同一个行。局部性不好是指连续的多个命令不会反复访问相同行。局部性不好也可以称为随机性大。在本步骤中,可以执行与所述内存访问的访问类型对应的行管理策略。实际应用中,也可以以存储库为粒度进行管理,这种情况下,可以对每个存储库的不同类型的访问分别设置不同的行管理策略,从而在本步骤中,可以执行与内存访问的访问类型对应的所述目标存储库的行管理策略。
具体的,当所述内存访问为读访问时,可以根据设置的第一指示器的指示执行所述目标存储库的行管理策略。当所述内存访问为写访问时,可以根据设置的第二指示器的指示执行所述目标存储库的行管理策略。其中,所述第一指示器用于指示执行读访问后的行管理策略,所述第二指示器用于指示执行写访问后的行管理策略。换一种表达方式,所述第一指示器用于指示在执行所述读访问后是否关闭所述目标行,所述第二指示器用于指示在执行所述写访问后是否关闭所述目标行。需要说明的是,在本发明实施例中,第一指示器只根据读访问进行调整,第二指示器只根据写访问进行调整。
具体的,在根据第一指示器的指示或第二指示器的指示执行所述目标存储库的行管理策略时,可以包括下面几种实现方式。在一种情况下,可以根据所述第一指示器的指示或第二指示器的指示关闭所述目标行或将所述目标行保持在打开状态。例如,若所述第一指示器的值或第二指示器的值为“1”则指示打开所述目标行,若所述第一指示器的值或第二指示器的值为“0”则指示关闭所述目标行。
在又一种情况下,可以根据所述第一指示器的值或所述第二指示器的值与预设的阈值确定是否关闭所述目标行。例如,当所述第一指示器的值大于等于第一阈值时,则在执行完所述读访问后将所述目标行保持为打开状态。当所述第一指示器的值小于所述第一阈值时,则在执行完所述读访问后关闭所述目标行。当所述第二指示器的值大于等于第二阈值时,则在执行完所述写访问后将所述目标行保持为打开状态。当所述第二指示器的值小于所述第二阈值时,则在执行完所述写访问后关闭所述目标行。实际应用中,第一阈值和所述第二阈值可以相同也可以不同。当然,实际应用中,还可以当所述第一指示器的值小于第一阈值时,则在执行完所述读访问后将所述目标行保持为打开状态。当所述第一指示器的值大于所述第一阈值时,则在执行完所述读访问后关闭所述目标行。类似的,当所述第二指示器的值小于第二阈值时,则在执行完所述写访问后将所述目标行保持为打开状态。当所述第二指示器的值大于所述第二阈值时,则在执行完所述写访问后关闭所述目标行。
在又一种情况下,还可以根据第一指示器的值或第二指示器的值指示的时间执行所述目标行的行管理策略。例如,如果所述内存访问为读访问,且所述第一指示器的值大于或等于第三阈值时,在执行完所述读访问后将所述目标行保持在打开状态,直到保持打开状态的时间到达所述第一指示器的值时关闭所述内存行。如果所述内存访问为写访问,且所述第二指示器的值大于或等于第四阈值时,在执行完所述写访问后可以将所述目标行保持在打开状态,直到保持打开状态的时间到达所述第二指示器的值时关闭所述内存行。其中,所述第三阈值或第四阈值可以相同也可以不同,且所述第三阈值或第四阈值均可以为大于或等于0的整数。
在另一种情况下,该方法还可以包括步骤407,在步骤407中,内存控制器可以根据所述内存访问的访问类型和所述目标行的行命中状态调整对应的行管理策略。其中,所述目标行的行命中状态可以包括行命中、行冲突或行空闲。具体的,内存控制器可以根据所述内存访问的地址确定目标行的行命中状态。当所述内存访问的地址与目标bank中打开的行的地址一致时,认为该内存访问导致了行命中。当根据所述内存访问的地址确定目标bank中没有打开的行时,认为该内存访问导致了行空闲。当所述内存访问的地址与目标bank中打开的行的地址不一致时,认为该内存访问导致了行冲突。
实际应用中,可以通过调整与行管理策略对应的策略指示器来调整目标bank的行管理策略。在本发明实施例中,考虑到读访问与写访问的局部性的差异,可以根据不同的访问类型调整对应的策略指示器,从而达到调整对应的行管理策略的目的。例如,一种情况下,可以为目标bank设置的策略指示器可以包括第一指示器和第二指示器,所述第一指示器用于指示在执行读访问后是否关闭所述目标行,所述第二指示器用于指示在执行写访问后是否关闭所述目标行。换一种方式,所述第一指示器用于指示与读访问对应的行管理策略,所述第二指示器用于指示与写访问对应的行管理策略。当在步骤403中确定所述内存访问为读访问时,在本步骤中,可以根据所述目标行的行命中状态调整所述目标存储库的第一指示器。当在步骤403中确定所述内存访问为写访问时,在本步骤中,可以根据所述目标行的行命中状态调整所述目标存储库的第二指示器。具体调整时,例如,如果所述内存访问导致了行命中,则将所述第一指示器或所述第二指示器向第一指向调整,其中,所述第一指向表示所述目标行不关闭或将所述目标行维持在打开状态。如果所述内存访问导致了行冲突,则将所述第一指示器或所述第二指示器向第二指向调整,其中,所述第二指向表示所述目标行关闭。具体的调整方法可以参见下述的图5A-5D所述。在此不再赘述。在另一种情况下,在本步骤中,还可以只根据读访问对目标bank的第一指示器进行调整,而对写访问对应的行管理策略不进行调整。
需要说明的是,实际应用中,对于步骤405和步骤407的执行顺序并不进行限定,可以先根据目标行的命中状态对所述目标bank的行管理策略进行调整后,再执行对与所述内存访问类型对应的调整后的行管理策略。也可以先执行所述内存访问类型对应的行管理策略后再根据所述内存访问待访问的目标行的行命中状态对所述行管理策略进行调整。
在本发明实施例中,在执行DRAM中内存行的行管理策略时,充分考虑了不同的访问类型的局部性不同的因素,根据访问类型执行对应的行管理策略,从而能够使得内存行的管理更加准确,减少因行管理策略不当引起的内存访问延时,提升内存访问效率。
图4A是以一个内存访问的角度描述本发明实施例提供的,下面再从多个内存访问的角度图4B所示,图4B为本发明实施例提供的又一种内存管理方法的流程图。该方法仍然可以由图1所示的计算机系统中的内存控制器来执行,该方法可以包括如下步骤。
在步骤402中,监控目标内存bank的多个内存访问。所述多个内存访问可以包括读访问或写访问。在本发明实施例中,监控目标bank的多个内存访问包括获取目标bank的多个内存访问,确定所述目标bank的各个内存访问的访问类型以及行命中状态,其中,行命中状态包括是否导致行命中、行空闲或行冲突。具体的,可以根据所述内存访问中的读/写标识确定所述内存访问的访问类型。可以根据各内存访问的地址确定待访问的行的状态。当一个内存访问的地址与目标bank中打开的行的地址一致时,认为该内存访问导致了行命中。当根据一个内存访问的地址确定目标bank中没有打开的行时,认为该内存访问导致了行空闲。当一个内存访问的地址与目标bank中打开的行的地址不一致时,认为该内存访问导致了行冲突。
在步骤404中,根据所述多个内存访问分别调整所述目标bank的行管理策略。例如,可以根据所述多个内存访问中的读访问调整第一指示器,根据所述多个内存访问中的写访问调整第二指示器。其中,所述第一指示器用于指示执行读访问后的行管理策略,所述第二指示器用于指示执行写访问后的行管理策略。在本发明实施例中,考虑到读访问和写访问的局部性特征的差异,同一个bank的第二指示器和第一指示器分开设置。为了描述方便,本发明实施例以内存芯片114中的一个bank为例进行描述。
在本发明实施例中,第二指示器和第一指示器可以是以计数器或寄存器的形式存在。下面以计数器为例进行描述第二指示器。在初始化时,可以对第一指示器和第二指示器赋予不同的初始值。考虑到读访问的局部性比写访问的局部性好,第一指示器的初始值可以比第二指示器的初始值大。
在初始化完成后,可以根据访问该bank的读访问调整第一指示器的值,并根据访问该bank的写访问调整第二指示器的值。需要说明的是,在本发明实施例中,对于任意一个bank,其第一指示器只根据访问该bank的读访问进行调整。第二指示器只根据访问该BANK的写访问进行调整。具体如何根据所述目标bank的内存访问调整目标bank的第一指示器的值或第二指示器的值可以参见图5A-5D所示的实施例。
在步骤406中,执行所述目标bank的行管理策略。具体的,如何根据第一指示器或第二指示器的指示执行所述目标bank的行管理策略可以参见图4A中步骤405的描述。例如,可以根据所述第一指示器指示的时间或所述第二指示器指示的时间关闭所述目标bank的行。也可以根据所述第一指示器的指示或所述第二指示器的指示关闭所述目标bank的行,还可以根据预设的阈值以及所述第一指示器的值或所述第二指示器的值关闭所述目标bank的行。对于具体如何根据第二指示器的值或所述第一指示器的值动态调整所述目标bank的行管理策略还可以参见图6的描述。
图5A为本发明实施例提供的一种行管理策略的调整方法流程图。可以理解的是,对行管理策略的调整,可以通过调整对应的策略计数器来实现。图5A以一个目标bank对应两个策略指示器(包括第一指示器和第二指示器)为例。图5A以一个内存访问为例进行描述,可以理解的是,对于图4A和图4B中内存控制器获取的任意一个内存访问,都可以根据图5A所示的方法对相应的行管理策略进行调整。具体的,该方法可以包括下列步骤。
在步骤502中,内存控制器接收内存访问。如前所述,接收的内存访问可以包括读/写标识、地址、请求ID等信息。在步骤504中,内存控制器确定该内存访问是读访问还是写访问,如果所述内存访问为读访问,该方法进入步骤506,如果所述内存访问为写访问,该方法进入步骤520。可以理解的是,步骤502和步骤504与图4A中的步骤401和步骤403以及图4B中的步骤402类似,在本实施例中,只是为了描述的清楚性而重复描述了一遍,实际应用中,在执行了图4A中的步骤401-403或执行了图4B步骤402后不用执行步骤502和504。
在所述内存访问是读访问的情况下,在步骤506中,进一步确定目标存储库(memory bank或简称bank)的前一个内存访问是读访问还是写访问,如果所述前一个内存访问是读访问,该方法进入步骤508。如果所述内存访问的前一个内存访问是写访问,为了减少因随机操作导致的读写切换可能引起的目标bank的行的不当关闭,该方法进入步骤519。在步骤508中,内存控制器确定所述目标bank是处于打开状态还是空闲状态,如果所述目标bank处于打开状态,该方法进入步骤510。如果所述目标bank处于空闲状态,该方法进入步骤516。
在目标bank处于打开的情况下,在步骤510中,内存控制器确定所述内存访问是否导致行命中。具体的,内存控制器可以根据所述内存访问的行地址确定是否命中所述目标bank中打开的行。如果所述内存访问的行地址与所述目标bank中打开的行的地址相同,则认为所述内存访问导致行命中,否则,认为所述内存访问导致行冲突。如果所述内存访问导致行命中,说明这个行保持打开状态的决策是正确的,该方法进入步骤514。在步骤514中,内存控制器可以将所述第一指示器向第一指向进行调整,其中,所述第一指向表示所述目标行不关闭或将所述目标行维持在打开状态。例如,内存控制器可以将所述第一指示器增加第一预设值或不对所述目标bank的第一指示器进行调整,以将所述目标行维持在打开状态。所述第一预设值可以是1或其他值。
如果所述内存访问导致行冲突,说明所述目标bank当前打开的行应该尽早关闭,该方法进入步骤512。在步骤512中,内存控制器将所述目标bank的第一指示器向第二指向进行调整,其中,第二指向表示所述目标行关闭。例如,在步骤512中内存控制器可以将所述目标bank的第一指示器的值减少第二预设值。例如,所述第二预设值可以是1或其他值。第一预设值也可以称为第一调整幅度,第二预设值可以成为第二调整幅度。
在目标bank是空闲的情况下,在步骤516中,内存控制器进一步确定所述内存访问是否可能导致行命中。所述可能导致行命中是指假设所述目标bank最后打开的行不关闭则会导致行命中。如前所述,目标bank空闲的情况下,说明目标bank没有行处于打开状态,造成目标bank空闲的状态可能是因为在执行完所述目标bank的前一个内存访问后,所述目标bank的行被关闭了。具体的,在本步骤中,内存控制器可以将所述内存访问的行地址与所述前一个内存访问的行地址进行比较,以确定所述访问请求是否可能导致行命中。
如果所述内存访问的行地址与所述前一个内存访问的行地址相同,则确定所述内存访问可能导致行命中。在这种情况下,说明所述目标bank最后打开的行应该多开启一段时间,但是被提前关闭了,因此该方法进入步骤518。在步骤518中,所述内存控制器将对所述目标bank的第一指示器向所述第一指向进行调整,例如,将所述第一指示器的值增加所述第一预设值。例如,第一预设值可以为1或其他值。如果确定所述内存访问不可能导致行命中,即所述内存访问会可能导致行冲突(rowconflict),说明所述目标bank关闭最后被打开的行的策略是正确的,则该方法进入步骤519。在步骤519中,内存控制器不对所述目标bank的第一指示器进行调整。其中,所述目标bank最后打开的行也可以被称为所述内存访问的前一个内存访问所访问的行。
返回步骤504,如果在步骤504中确定所述内存访问是写访问,在步骤520中,内存控制器进一步确定所述内存访问的前一个内存访问是读访问还是写访问。如果所述内存访问的前一个访问是读访问,该方法进入步骤531,内存控制器不对不对目标bank的写计数器进行调整。如果所述内存访问的前一个访问是写访问,该方法进入步骤522。在步骤522中,内存控制器确定所述目标bank是处于打开状态还是空闲状态,如果所述目标bank处于打开状态,该方法进入步骤524;如果所述目标bank处于空闲状态,该方法进入步骤526。需要说明的是,在本发明实施例中,目标bank处于打开状态是指所述目标bank中有行被打开。
在目标bank处于打开状态的情况下,在步骤524中,所述内存控制器进一步确定所述内存访问是否导致行命中。具体的,所述内存控制器可以根据所述内存访问的行地址确定是否导致行命中。如果所述内存访问导致行命中,说明所述目标bank保持当前行处于打开状态的策略是正确的,该方法进入步骤530。在步骤530中,内存控制器可以将第二指示器向第一指向进行调整,其中所述第一指向表示所述目标行不关闭或将所述目标行维持在打开状态。例如,如图5A所示,在步骤530中,内存控制器可以将所述目标bank的第二指示器增加第三预设值,或者不对所述第二指示器进行调整。如果所述内存访问导致行冲突,或者说所述内存访问未命中所述目标bank中打开的行,说明所述目标bank中当前打开的行应该被尽早关闭,该方法进入步骤528。在步骤528中,内存控制器可以将第二指示器向第二指向进行调整,其中,所述第二指向表示所述目标行关闭。例如,所述内存控制器可以将所述目标bank的第二指示器的值减少第四预设值。其中,第三预设值或第四预设值可以为1或其他值。第三预设值也可以称为第三调整幅度,第四预设值可以成为第四调整幅度。
在目标bank处于空闲的情况下,在步骤526中,内存控制器进一步确定所述访问请求是否可能导致行命中。如前所述,所述可能导致行命中是指假设所述目标bank最后打开的行不关闭则会导致行命中。具体的,在本步骤中,内存控制器可以将所述访问请求的行地址与所述最后打开的行的行地址进行比较,以确定所述访问请求是否可能导致行命中。如果所述内存访问的行地址与所述最后打开的行的行地址相同,则确定可能导致行命中,否则,认为可能导致行冲突。如果确定所述内存访问可能导致行命中,说明目标bank中最后打开的行被提前关闭了,应该多打开一段时间。可以理解的是,所述目标bank中最后打开的行也就是所述内存访问的前一个内存访问所访问的行。在这种情况下,该方法进入步骤532。在步骤532中,所述内存控制器将所述目标bank对应的第二指示器向所述第一方向调整,例如,所述内存控制器可以将所述目标bank的第二指示器的值增加第四预设值。所述第四预设值可以为1或其他值。如果确定所述访问请求会可能导致行冲突,说明所述目标bank中最后打开的行被关闭是正确的,则该方法进入步骤531。在步骤531中,内存控制器不对所述目标bank的第二指示器进行调整。
需要说明的是,本发明实施例中的第一预设值、第二预设值、第三预设值和第四预设值可以相同也可以不同,在此不进行限定。在第一预设值、第二预设值、第三预设值和第四预设值不同的情况下,考虑到读访问和写访问的局部性的差异,读访问的连续性更好,为了进一步减少延时,对读访问访问的行可以保持打开的时间更多一些。对于写访问,由于随机性更强,为了减少延时,写访问所访问的行保持打开的时间需要短一些,以免引起更多的行冲突。因此,在本发明实施例中,第一预设值可以大于第二预设值,而第三预设值可以小于第四预设值。也就是说,在调整所述第一指示器时,向所述第一指向调整的第一调整幅度可以大于向所述第二指向调整时的第二调整幅度。在调整所述第二指示器时,向所述第一指向调整时的第三调整幅度可以小于向所述第二指向调整时的第四调整幅度。
图5A所示的实施例,充分考虑了读访问以及写访问局部性的差异,根据访问所述目标bank的多个内存访问的类型、当前内存访问的前一个内存访问的类型、以及所述目标bank的当前状态,分别调整所述目标bank的行管理策略。例如,可以根据读访问调整第一指示器以调整与读访问对应的行管理策略,根据写访问调整第二指示器,以调整与写访问对应的行管理策略。从而使得所述目标bank的第一指示器和第二指示器的调整更加准确,从而内存控制器可以根据所述目标bank的第一指示器和第二指示器的指示确定何时关闭所述目标bank的行,减少因行管理策略不当引起的内存访问延时,提升内存访问效率。
可以理解的是,在又一种情况下,在根据内存访问的访问类型和行命中状态调整行管理策略时,由于行空闲状态时没有行打开,可以认为行空闲状态对访问延时的影响较小,因此在这种实施方式下,可以不考虑行空闲状态对访问延时的影响,而只根据行命中和行冲突两种情况对行管理策略进行调整,从而调整方法更加简单。换一种表达方式,在这种情况下,可以认为所述内存访问的行命中状态只包括行命中和行冲突两种,而不考虑行空闲的情况。具体的可以如图5B所示,图5B所示的行管理策略的调整方法与图5A所示的调整方法相比,没有执行步骤508、516、518、522、526以及532。图5B所示的行管理策略的调整方法依然考虑了不同的内存访问类型,分别为目标bank设置有第一指示器和第二指示器,并根据不同类型的内存访问分别调整第一指示器的或第二指示器的值,从而在调整时考虑了读访问和写访问的差异,从而能够减少内存访问延时。
在另一种情况下,在对策略计数器进行调整时,也可以不考虑前一个内存访问请求的类型。具体的,在图5A所示的调整方法中,在执行步骤504后,可以不执行步骤506或步骤520,而直接进入步骤508或步骤522。换一种表达方式,图5A所示的调整方法中,步骤506和步骤520为可选步骤,实际应用中,可以不被执行,其他步骤的描述均可以参见图5A所示实施例的描述。这种调整方法具体可以如图5C所示。图5C所示的这种调整方式根据读访问和写访问分别调整不同的策略指示器,充分考虑读、写的局部性差异,调整更加准确,也能减少内存访问延时。且由于不考虑前一个内存访问请求的类型,相比图5A所示的实施例而言调整方式相对简单。但有可能会因随机操作导致的读写切换可能引起的目标bank的行的不当关闭。
在又一种调整方法中,还可以既不考虑前一个内存访问请求的类型,也不考虑目标bank是否处于空闲,而只根据接收的内存访问的类型以及所述内存访问的命中状态(包括行命中和行冲突)分别对第一指示器或第二指示器进行调整。具体的,例如,在图5A所示的调整方法中,可以只执行步骤502、504、510、512、514、524、528以及530。这种方式在考虑读访问和写访问局部性差异的基础上,调整方法更加简单。具体如图5D所示。
根据上述描述可知,实际应用中,图5A中的步骤506、508、516并不是必须执行的,可以根据具体的需求选择执行、不执行或执行部分步骤。本发明实施例不对其他行管理策略调整方式进行限制,只要在调整行管理策略时,根据内存访问的不同类型以及目标行的命中状态分别调整不同的行管理策略即可,并且,实际应用中,一种情况下,目标行的命中状态可以包括行命中、行冲突和行空闲三种,另一种情况下,目标行的命中状态也可以只包括行命中和行冲突两种。
下面将结合图6详细描述在步骤405或步骤406中,内存控制器如何根据第二指示器的值或第一指示器的值执行内存的行管理策略。图6为本发明实施例提供的一种内存行管理策略的执行方法流程图。在本发明实施例中,内存控制器可以为每个bank设置计时器,从而内存控制器可以根据每个bank的第一指示器的值或第二指示器的值确定何时关闭每个bank中打开的行,以执行每个bank对应的行管理策略。为了描述方便,图6也以一个bank为例进行描述。具体的,该方法可以包括如下步骤。
在步骤602中,内存控制器监控发送给目标bank的内存访问命令。具体的,在内存控制器接收到一个内存访问请求后,内存控制器会根据内存访问的地址访问内存114中的目标bank 1142。内存控制器可以根据所述目标bank中行的状态向目标bank发送内存访问命令。例如,在所述目标bank处于行空闲的状态下,内存控制器会发送激活命令,去激活所述内存访问待访问的行。在行命中的情况下,内存控制器可以根据接收的内存访问直接发送读命令或写命令。在行冲突的情况下,内存控制器会向目标bank发送预充电命令,关闭所述目标bank中打开的行,然后再发送激活命令去打开待访问的行,最后再发送读命令或写命令进行访问。由此可见,内存控制器发送给目标bank的命令至少可以包括激活命令、预充电命令、读命令或写命令几种。
在步骤604中,内存控制器判断所述内存访问命令是否为读命令或写命令。如前所述,内存控制器发送给目标bank的命令至少可以包括激活命令、预充电命令、读命令或写命令几种。因此,在步骤604中,如果内存控制器判断所述命令为读命令或写命令,则该方法进入步骤606。如果所述命令不是读命令或写命令,则该方法进入步骤620。
在步骤606中,内存控制器判断所述内存访问命令所属的内存访问请求是否为调度队列中访问所述目标bank的最后一个内存访问请求。如前所述,内存控制器向目标bank发送的读命令或写命令均是根据当前处理的内存访问请求获得的。实际应用中,内存控制器会将接收的多个内存访问请求放入缓存队列,并根据一定的调度策略将缓存队列中的内存访问请求调度到调度队列,然后再对调度队列中的内存访问请求分别进行处理。通常,缓存队列的空间比调度队列的空间更大,缓存队列中缓存的内存访问请求比调度队列中的内存访问请求更多。
在本步骤中,内存控制器可以根据调度队列中的多个内存访问请求的地址确定所述内存访问命令所属的内存访问请求(即当前处理的访问请求)是否为所述调度队列中访问所述目标bank的最后一个内存访问请求。也就是说,内存控制器可以根据各内存访问请求的地址判断调度队列中是否还有访问所述目标bank的其他内存访问请求。如果所述命令所属的内存访问请求(即当前处理的访问请求)是调度队列中访问所述目标bank的最后一个内存访问请求,也就是说,调度队列中没有访问所述目标bank的其他内存访问请求,则该方法进入步骤608。如果所述命令所属的内存访问请求(即当前处理的内存访问请求)不是调度队列中访问所述目标bank的最后一个内存访问请求,也就是说,调度队列中还有访问所述目标bank的其他内存访问请求,则该方法进入步骤620。
在步骤608中,内存控制器进一步判断所述内存访问命令是读命令还是写命令。如果所述命令为读命令,则该方法进入步骤610,如果所述内存访问命令为写命令,则该方法进入步骤612。在步骤610中,内存控制器读取所述目标bank的第一指示器的值,并进入步骤614。在步骤612中,所述内存控制器读取所述目标bank的第二指示器的值,然后进入步骤614。可以理解的是,所述目标bank的第一指示器的值和第二指示器的值可是根据图5A-5D所示的方法进行调整后的值,也可以是调整之前的值。也就是说,实际应用中,可以在执行完访问请求后,先执行目标bank对应的行管理策略,再根据执行的访问请求对用于指示所述目bank的行管理策略的第一指示器或第二指示器进行调整。也可以根据所述内存访问对用于指示所述目bank的行管理策略的第一指示器或第二指示器进行调整后,再选择执行调整后的第一指示器或第二指示器指示的行管理策略。在此不进行限定。
在步骤614中,内存控制器判断在步骤610或步骤612中读取的指示器的值是否低于设置的阈值。如果读取的第一指示器的值或第二指示器的值不低于所述阈值,则该方法进入步骤616。如果读取的第一指示器的值或第二指示器的值低于所述阈值,则该方法进入步骤620。实际应用中,所述阈值可以设置为0或其他数值,在此不进行限定。
在步骤616中,内存控制器控制目标bank对应的计时器根据读取的第一指示器的值或第二指示器的值启动计时,然后该方法进入步骤618。在步骤618中,内存控制器会在所述计时器到达计时时间时,关闭所述目标bank中开启的行。具体的,内存控制器可以向所述目标bank发送预充电命令以关闭所述目标bank中开启的行。可以理解的是,在根据所述第一指示器的值或第二指示器的值启动计时时,所述计时器可以通过递增或递减的方式启动计时,例如可以从0开始启动计时,直到计时器的时间递增到第一指示器的值或第二指示器的值;也可以设置计时器的时间为第一指示器的值或第二指示器的值后,计时器开始以递减的方式启动计时。在此对计时方式不进行限定。
图6所示的行管理策略的执行方法是根据第一指示器的值或第二指示器的值指示的时间执行所述目标行的行管理策略,这只是一种行管理策略的执行方式示例,实际应用中,还可以不设置计时器,直接根据第一指示器的指示或第二指示器的指示执行对应的行管理策略。具体可以参见步骤405的相关描述。
前述实施例是在每个bank分别设置有第一指示器和第二指示器的情况下的调整方式。实际应用中,由于写访问的局部性较差,因此可以对写访问使用固定的页面策略。例如,在一种方式下,可以固定使用行关闭(row close)策略,即在执行完写访问后,立即关闭写访问所访问的行。在另一种情形下,可以设置一个较小的行关闭时间,到达时间后即关闭写访问所访问的行。在对写访问使用固定的行管理策略的情况下,可以不设置第二指示器。根据这种方式,每个bank可以只设置一个第一指示器。
具体的,可以如图7所示,图7为本发明实施例提供的又一种内存管理方法的流程图。该方法仍然可以由图1所示的计算机系统中的内存控制器来执行。该方法可以包括如下步骤。
在步骤702中,获取目标内存bank的内存访问。与步骤401类似,所述内存访问可以包括读访问或写访问。接收的内存访问可以包括读/写标识、地址、请求ID等信息。并且,如果所述内存访问是写访问,所述写访问中还可以携带有待写入所述内存的数据。在步骤704中,内存控制器可以确定所述内存访问的访问类型。其中,所述访问类型包括读访问或写访问。在本步骤中,可以根据所述内存访问中的读/写标识确定所述内存访问的访问类型。如果所述内存访问为读访问,则该方法进入步骤706,如果所述内存访问为写访问,则该方法进入步骤710。
在步骤706中,所述内存控制器根据所述内存访问的目标行的行命中状态调整所述目标bank的第一指示器。如前所述,所述行命中状态可以包括行命中、行冲突或行空闲。在本发明实施例中,可以设置第一指示器用于指示执行读访问后的行管理策略。也就是可以根据第一指示器的指示确定在执行读访问后是否关闭目标行。在本步骤中,可以根据所述内存访问的行命中状态调整所述目标bank的第一指示器,从而能够实现动态调整目标bank的行管理策略的目的。具体的调整方法可以参见图5A-5D中关于第一指示器的调整,在此不再赘述。
在步骤708中,所述内存控制器根据所述第一指示器的指示执行对应的行管理策略。具体的,可以在执行完所述内存访问后,根据所述第一指示器的指示执行对应的行管理策略。例如,可以根据所述第一指示器指示在执行所述读访问后关闭所述目标行或将所述目标行保持在打开状态,也可以根据第一指示器指示的时间关闭目标行。该步骤可以参见步骤405的描述,在此不再赘述。可以理解的是,在根据第一指示器执行对应的行管理策略时可以也可以参见图6中关于如何根据第一指示器的指示执行相应行管理策略的描述,在此不再赘述。
在步骤710中,所述内存控制器执行预设的行管理策略。在本发明实施例中,考虑到内存控制器在处理写访问时的随机性较大,可以采用固定的行管理策略,例如,可以完成一个写访问后即关闭该写访问所访问的行。具体的,在本步骤中,接收到写访问时可以不对预设的行管理策略进行任何调整,而是在执行完所述写访问后,根据预设的行管理策略确定何时关闭目标行。
在图7所示的实施例中,仍然对内存访问中的读访问和写访问进行了区分,由于只设置有用于指导执行完读访问后的行管理策略的第一指示器,因此可以只根据接收的读访问对第一指示器的值进行调整。而对于接收的写访问,由于写访问的随机性比较大,可以采用预设的行管理策略,在接收到写访问时可以不对预设的行管理策略进行调整。可以理解的是,图7所示的实施例与图4B所示的实施例相比,在处理读访问时,可以根据设置的第一指示器的值动态调整所述目标bank的行管理策略,对于写访问,则根据固定的行管理策略进行处理。由于对写访问采用固定的行管理策略,可以不用为bank设置第二指示器,硬件结构可以更简单,调整方式也更加简便。
本领域技术人员知道,由于目标bank的不同内存访问之间的切换会有访问延时,因此在本发明实施例提供的方法中,内存控制器可以在调度队列中会将访问同一个bank的多个内存访问进行连续调度。并且考虑到对同一个bank中同一行的多个连续的读访问和写访问之间切换也会有延时,以及读访问和写访问因局部性的差异对行管理策略的不同需求,因此,在下面的实施例中,进一步将读访问和写访问进行分批调度。图8提供了本发明实施例一种内存访问的调度示意图。具体的,如图8所示,内存控制器106在调度内存访问请求时,可以分批进行调度。例如,可以将读访问1至读访问N作为第一批访问802放入调度队列,将读访问N+1至读访问2N作为第二批访问804放入调度队列,将写访问1至写访问N作为第K批访问806放入调度队列等,其中,每一批次可以包括访问同一个bank的多个读访问或多个写访问。
根据这种调度方式,也可以在执行不同批次的访问时进一步调整bank的行管理策略,以减少访问延时,降低因不同类型访问的切换引起的总线带宽的浪费。对于不同批次的访问切换时的行管理策略的调整方法可以参见图9所示。具体的,图9为本发明实施例提供的又一种内存管理方法的流程图,如图9所示,该方法可以包括如下步骤。
在步骤902中,内存控制器执行第i批次访问。其中i的初始值可以设为1,i为大于等于1的自然数。如前所述,内存控制器接收到内存访问请求后,会将接收的多个内存访问请求放入缓存队列,然后再将缓存队列中的内存访问请求调度到调度队列分别进行执行。本发明实施例中,内存控制器可以按照内存访问请求的类型分批次将多个内存访问请求调度到调度队列。例如,内存控制器可以按照如图8所示的分批次调度的方式将多个内存访问请求调度到调度队列。在本步骤中,内存控制器106执行的第i批次访问可以是如图8所示的任意一批访问,例如,第i批次访问可以是指第一批访问802、第二批访问804或第K批访问806。
在步骤904中,内存控制器确定第i批次访问是否执行完毕。具体的,内存控制器可以确定执行的访问是否为第i批次的最后一个命令来确定第i批次访问是否执行完毕。或者,内存控制器可以根据调度队列中是否还有其他访问来确定第i批次访问是否执行完毕。此外,内存控制器也可以通过计数方式确定所述第i批次访问是否执行完毕。在此不对内存控制器如何确定第i批次访问是否执行完毕的方法进行限定。如果第i批次访问没有执行完毕,则返回步骤902,继续执行第i批次访问。如果内存控制器确定第i批访问执行完毕,则进入步骤904,内存控制器进一步确定是否要执行第i+1批访问。具体的内存控制器可以根据调度队列或缓存队列中是否还有其他访问来确定是否需要执行第i+1批访问。如果需要执行第i+1批访问,则该方法进入步骤908。如果确定不需要执行第i+1批访问,说明没有其他内存访问需要执行,该方法进入步骤914。
在步骤908中,内存控制器确定第i批访问和第i+1批访问是否为相同类型的内存访问。在图9所示的实施例中,由于内存控制器根据内存访问的类型分批调度执行内存访问,同一批次的内存访问可以为相同类型的多个内存访问请求。因此,在本步骤中,内存控制器可以确定第i批访问和第i+1批访问的类型是否相同,例如是否均为读访问或均为写访问。如果第i批访问和第i+1批访问是相同类型的内存访问,则该方法进入步骤910。如果第i批访问和第i+1批访问是不同类型的内存访问,则该方法进入步骤914。
在步骤910中,内存控制器进一步确定第i批访问和第i+1批访问是否均为读访问。如果第i批访问和第i+1批访问均为读访问,则该方法进入步骤912。如果第i批访问或第i+1批访问为写访问,则该方法进入步骤914。在步骤1112中,内存控制器将当前打开的行保持打开状态。在本发明实施例中,由于第i批命令和第i+1批访问均为读访问,考虑到内存控制器在处理读访问的局部性比较好,也就是说多个命令连续访问相同行的可能性比较大,在执行前一批读访问的过程中打开的行,如果在切换时仍然保持打开状态,则可以持续保持打开状态。例如,在第一批访问802和第二批访问804切换时,在执行第一批访问802过程中打开的行如果在切换时仍然保持打开状态,则可以继续保持打开状态。然后,该方法进入步骤916。
如果在步骤908中确定第i批访问和第i+1批访问是不同类型的内存访问,例如,第i批访问为写访问,或第i+1批访问为写访问。在这种情况下,内存控制器需要在读访问和写访问之间进行切换。在本发明实施例中,考虑到读访问和写访问局部性上的差异,写访问的随机性较强,为了减少延时,在切换时,可以进入步骤914,将在执行第i批访问的过程中打开的行全部关闭。例如,如图8所示,在执行完第二批访问804后将切换以执行下一批访问,如果第二批访问804的下一批访问为写访问(例如,如第K批访问806时,可以在执行完第二批访问804后,将第二批访问804中打开的行全部关闭,然后再进入步骤916,以执行下一批访问。
如果在步骤910中确定第i批访问和第i+1批访问均为写访问,由于写访问的随机性比较强,局部性差,因此在这种情况下,该方法也可以进入步骤914,将执行第i批访问中打开的行全部关闭。然后再进入步骤916,以切换执行第i+1批次的写访问。在步骤916中,令i=i+1,并返回步骤902,以执行下一批的内存访问。如此循环,直至将需要执行的多批访问执行完毕为止。可以理解的是,i的值不能大于待执行的访问的总批次。
图9提供的内存管理方法,由于采用分批次调度,能够进一步减少执行读访问和写访问的切换次数,并且,由于能够在不同批次访问的切换时采用不同的行管理策略,从而能够进一步减少不同批次切换时可能引起的行冲突,减少因为内存行的不当关闭造成的延时,减少总线带宽的浪费。
需要说明的是,实际应用中,在某些设计中,并不一定为每个BANK设置独立的策略计数器,也可以分成多个地址段,为每个地址段设置策略计数器,还可以几个BANK共用同一组策略计数器。其中,每个地址段可以包括多个bank的地址,也可以包括一个bank中的部分地址。在几个BANK共用一组策略计数器的设计中,在调整行管理策略时,可以参考上述实施例,对内存访问待访问的BANK对应的策略计数器进行操作。根据这些方式,实际应用中,可以对多个bank采用相同的行管理策略,也可以对对应于至少一个地址段的多个目标行访问采用相同的行管理策略。
本发明实施例提供的内存管理方法,在执行内存的行管理策略的过程中考虑了内存访问中读访问和写访问的局部性差异,从而使得对内存行的管理更加符合内存访问的特性,减少了内存访问延时,降低了带宽的浪费,提升了内存访问效率。
此外,由于实际应用中存在直接内存访问(Direct Memory Access,DMA)的方式写内存的情形。本发明实施例还进一步提供了在DMA读写的场景如何管理内存行。DMA读写通常是大块数据的读写,DMA一次执行通常是单向的,为了保证数据一致性,正在被DMA访问的数据块通常也不会有其他的来源的访问。鉴于DMA操作的读写具有良好的局部性,以及和其他请求之间的无关性,因此可以单独考虑DMA场景下的内存访问策略。例如,在实际应用中,可以将DMA的内存访问和非DMA的内存访问分批次调度。并且,对于DMA的内存访问,也可以区分为DMA读访问和DMA写访问分批次调度。
非DMA访问之间的切换可以参见前述的实施例。对于非DMA访问和DMA访问之间的切换,在当前批内存访问完成之后,可以直接关闭该批内存访问涉及的bank的行。对于DMA访问之间的切换,如果属于同一个DMA操作的不同批内存访问之间的切换时,不管相邻两批DMA访问的类型是否相同,在切换的时候均可以使当前完成的DMA访问涉及的BANK中的行保持打开状态。如果相邻两批DMA访问不是同一个DMA操作引起的DMA访问,则不管相邻两批DMA访问的类型是否相同,也不管涉及的DMA访问是读访问还是写访问,在切换的时候均可以关闭当前完成的DMA访问涉及的BANK中的行。
本发明实施例提供的这种内存管理方法,考虑了DMA访问的局部性较好的特点,以及DMA访问和其他内存访问的非相关性,把DMA访问和非DMA的内存访问进行了区分和分批次调度,避免了DMA访问和普通内存访问的相互干扰,保证了DMA访问的性能要求,且减少了内存访问延时。
本发明实施例还提供了一种内存管理装置,具体的,本发明实施例提供的内存管理装置可以包括图1所示的计算机系统中的至少部分器件。例如,可以包括至少一个处理器102和内存控制器106。
此外,本发明实施例还提供了一种内存控制器,包括通信接口以及用于执行前述实施例中的内存管理方法的逻辑电路。其中,所述通信接口用于接收计算机系统的处理器发送的内存访问。本发明实施例提供的内存控制器可以如图1中的内存控制器106所示。
图10为本发明实施例提供的另一种内存管理装置的示意图。如图10所示,该内存管理装置可以包括接收模块1002、确定模块1004和执行模块1006。其中接收模块1002用于接收内存访问,其中,所述内存访问可以用于访问所述目标存储库中的目标行。所述确定模块1004用于确定所述内存访问的访问类型。所述执行模块1006用于执行与所述访问类型对应的行管理策略。
具体的,在一种可能的情况下,所述内存管理装置还可以包括调整模块1005,所述调整模块1005用于根据所述内存访问的访问类型和所述目标行的行命中状态调整所述行管理策略。其中,所述行命中状态包括下述状态中的至少一种:行命中、行冲突和行空闲。
在一种可能的情况下,所述内存管理装置还可以包括第一指示器1008。当所述内存访问为读访问时,所述调整模块1005用于根据所述目标行的行命中状态调整所述目标存储库的第一指示器1008,所述第一指示器用于指示在执行所述读访问后是否关闭所述目标行。或者说,所述第一指示器用于指示执行读访问后所述目标存储库的行管理策略。从而所述执行模块1006可以根据所述第一指示器1008的执行所述目标存储库的行管理策略。调整第一指示器1008可以理解为调整执行读访问后的行管理策略。
在一种可能的情况下,所述内存管理装置还可以包括第二指示器1010。当所述内存访问为写访问时,所述调整模块1005可以根据所述目标行的行命中状态调整所述目标存储库的第二指示器1010,所述第二指示器用于指示在执行所述写访问后是否关闭所述目标行。所述执行模块1006可以根据所述第二指示器1010的指示执行所述目标存储库的行管理策略。调整第二指示器1008可以理解为调整执行写访问后的行管理策略。
在又一种可能的情况下,可以只设置第一指示器1008而不设置第二指示器1010,对于接收的写访问,执行模块1006可以直接执行预设的行管理策略。在这种情况下,可以不对与写访问对应的预设的行管理策略进行调整。在又一种可能的情况下,也可以设置第二指示器1010,但第二指示器1010用于指示与写访问对应的预设的行管理策略,而无需根据接收的写访问的行命中状态进行调整。
在一种可能的情况下,调整模块1005根据目标行的行命中状态调整第一指示器1008或第二指示器1010时,如果所述内存访问导致了行命中,则将所述第一指示器或所述第二指示器向第一指向调整,其中,所述第一指向表示所述目标行不关闭或将所述目标行维持在打开状态。如果所述内存访问导致了行冲突,则将所述第一指示器或所述第二指示器向第二指向调整,其中,所述第二指向表示所述目标行关闭。
在又一种可能的情况下,调整模块1005根据目标行的行命中状态调整第一指示器1008或第二指示器1010时,如果所述内存访问导致了行空闲,则确定所述内存访问是否可能导致行命中。如果所述内存访问可能导致行命中,则将所述第一指示器或所述第二指示器向所述第一指向调整,其中,所述第一指向表示所述目标行不关闭或将所述目标行维持在打开状态,所述可能导致行命中是指假设所述目标存储库中最后打开的行不关闭则会导致行命中。如果所述内存访问可能导致行冲突,则将所述第一指示器或所述第二指示器向所述第二指向调整,所述第二指向表示所述目标行关闭,所述可能导致行冲突是指假设所述目标存储库中最后打开的行不关闭则会导致行冲突。
在又一种情况下,调整模块1005根据目标行的行命中状态调整第一指示器1008或第二指示器1010时,还可以根据所述目标行的行命中状态以及所述内存访问的前一个访问的访问类型调整所述目标存储库的第一指示器或第二指示器。
调整模块1005具体如何调整行第一指示器1008或第二指示器1010的方法可以参见前述方法实施例的描述,在此不再赘述。
在又一种情形下,如果所述内存访问属于第一批内存访问,所述执行模块1006还用于确定所述第一批内存访问执行完毕,且待执行第二批内存访问;如果所述第一批内存访问的访问类型和所述第二批内存访问的访问类型不同,则将所述目标行关闭;如果所述第一批内存访问和所述第二批内存访问均为读访问,则将所述目标行保持打开状态;或如果所述第一批内存访问和所述第二批内存访问均为写访问,则将所述目标行关闭。
可以理解的是,本发明实施例提供的内存管理装置可以是图1中所示的内存控制器或集成在图1中所示的内存控制器中。对于所述内存管理装置中各功能模块的实现可以参见前述的实施例的对应描述,在此不再赘述。
本发明实施例提供的内存管理装置,在执行DRAM中内存行的行管理策略时,充分考虑了不同的访问类型的局部性差异,根据访问类型执行对应的行管理策略,并可以根据内存访问的行命中状态来调整对应的的行管理策略,从而能够使得内存行的管理充分考虑了内存访问的特性,管理更加准确,减少因行管理策略不当引起的内存访问延时,提升了内存访问效率。
本发明实施例还提供一种用于执行内存管理方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令用于执行前述任意一个方法实施例所述的方法流程。本领域普通技术人员可以理解,前述的存储介质包括:U盘、移动硬盘、磁碟、光盘、随机存储器(random-access memory,RAM)、固态硬盘(solid state disk,SSD)或者非易失性存储器(non-volatile memory)等各种可以存储程序代码的非短暂性的(non-transitory)机器可读介质。
需要说明的是,本申请所提供的实施例仅仅是示意性的。所属领域的技术人员可以清楚的了解到,为了描述的方便和简洁,在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。在本发明实施例、权利要求以及附图中揭示的特征可以独立存在也可以组合存在。在本发明实施例中以硬件形式描述的特征可以通过软件来执行,反之亦然。在此不做限定。

Claims (28)

1.一种内存管理方法,其特征在于,包括:
获取内存访问;
确定所述内存访问的访问类型,其中,所述内存访问的访问类型包括读访问或写访问;
执行与所述内存访问的访问类型对应的行管理策略。
2.根据权利要求1所述的方法,其特征在于,所述内存访问用于访问内存中的目标存储库中的目标行,所述执行与所述内存访问的访问类型对应的行管理策略包括:
执行与所述内存访问的访问类型对应的所述目标存储库的行管理策略,其中,所述内存包括一个或多个存储库,所述目标存储库为所述一个或多个存储库中的任意一个存储库。
3.根据权利要求1或2所述的方法,其特征在于,还包括:
根据所述内存访问的访问类型和所述目标行的行命中状态调整所述行管理策略。
4.根据权利要求3所述的方法,其特征在于,所述根据所述内存访问的访问类型和所述目标行的行命中状态调整所述目标存储库的行管理策略包括:
当所述内存访问为读访问时,根据所述目标行的行命中状态调整所述目标存储库的第一指示器,所述第一指示器用于指示在执行所述读访问后是否关闭所述目标行。
5.根据权利要求4所述的方法,其特征在于,所述根据所述内存访问的访问类型和所述目标行的行命中状态调整所述目标存储库的行管理策略还包括:
当所述内存访问为写访问时,根据所述目标行的行命中状态调整所述目标存储库的第二指示器,所述第二指示器用于指示在执行所述写访问后是否关闭所述目标行。
6.根据权利要求4所述的方法,其特征在于,所述根据所述内存访问的访问类型和所述目标行的行命中状态调整所述目标存储库的行管理策略还包括:
当所述内存访问的访问类型为写访问时,确定所述目标存储库的行管理策略为与所述写访问对应的预设的行管理策略,所述预设的行管理策略用于指示在执行所述写访问后是否关闭所述目标行。
7.根据权利要求4-6任意一项所述的方法,其特征在于,所述行命中状态包括行命中或行冲突,所述根据所述目标行的行命中状态调整所述目标存储库的第一指示器或第二指示器包括:
如果所述内存访问导致了行命中,则将所述第一指示器或所述第二指示器向第一指向调整,其中,所述第一指向表示所述目标行不关闭或将所述目标行维持在打开状态;或
如果所述内存访问导致了行冲突,则将所述第一指示器或所述第二指示器向第二指向调整,其中,所述第二指向表示所述目标行关闭。
8.根据权利要求4-7任意一项所述的方法,其特征在于,所述行命中状态包括行空闲,所述根据所述目标行的行命中状态调整所述第一指示器或所述第二指示器包括:
如果所述内存访问导致了行空闲,则确定所述内存访问是否可能导致行命中;
如果所述内存访问可能导致行命中,则将所述第一指示器或所述第二指示器向第一指向调整,其中,所述第一指向表示所述目标行不关闭或将所述目标行维持在打开状态,所述可能导致行命中是指假设所述目标存储库中最后打开的行不关闭则会导致行命中;或
如果所述内存访问可能导致行冲突,则将所述第一指示器或所述第二指示器向第二指向调整,其中,所述第二指向表示所述目标行关闭,所述可能导致行冲突是指假设所述目标存储库中最后打开的行不关闭则会导致行冲突。
9.根据权利要求4-8任意一项所述的方法,其特征在于,还包括:
确定所述内存访问的前一个访问的访问类型;
所述根据所述目标行的行命中状态调整所述目标存储库的第一指示器或第二指示器包括:
根据所述目标行的行命中状态以及所述内存访问的前一个访问的访问类型调整所述目标存储库的第一指示器或第二指示器。
10.根据权利要求4-9中任意一项所述的方法,其特征在于:
所述第一指示器的初始值大于所述第二指示器的初始值。
11.根据权利要求4-10任意一项所述的方法,其特征在于:
在调整所述第一指示器时,向所述第一指向调整的第一调整幅度大于向所述第二指向调整时的第二调整幅度;
在调整所述第二指示器时,向所述第一指向调整时的第三调整幅度小于向所述第二指向调整时的第四调整幅度。
12.根据权利要求1-11任意一项所述的方法,其特征在于,所述内存访问属于第一批内存访问,所述方法还包括:
确定所述第一批内存访问执行完毕,且待执行第二批内存访问;
如果所述第一批内存访问的访问类型和所述第二批内存访问的访问类型不同,则将所述目标行关闭;
如果所述第一批内存访问和所述第二批内存访问均为读访问,则将所述目标行保持打开状态;或
如果所述第一批内存访问和所述第二批内存访问均为写访问,则将所述目标行关闭。
13.一种内存管理装置,其特征在于,包括:
处理器,用于发送内存访问;
内存控制器,用于:
获取所述内存访问;
确定所述内存访问的访问类型,其中,所述内存访问的访问类型包括读访问或写访问;
执行与所述内存访问的访问类型对应的行管理策略。
14.根据权利要求13所述的装置,其特征在于,所述内存访问用于访问内存中的目标存储库中的目标行,所述内存控制器用于:
执行与所述内存访问的访问类型对应的所述目标存储库的行管理策略,其中,所述内存包括一个或多个存储库,所述目标存储库为所述一个或多个存储库中的任意一个存储库。
15.根据权利要求13或14所述的装置,其特征在于,所述内存控制器还用于:
根据所述内存访问的访问类型和所述目标行的行命中状态调整所述行管理策略。
16.根据权利要求15所述的装置,其特征在于,在调制所述行管理策略的步骤中,所述内存控制器用于:
当所述内存访问为读访问时,根据所述目标行的行命中状态调整所述目标存储库的第一指示器,所述第一指示器用于指示在执行所述读访问后是否关闭所述目标行。
17.根据权利要求16所述的装置,其特征在于,在调整所述行管理策略的步骤中,所述内存控制器还用于:
当所述内存访问为写访问时,根据所述目标行的行命中状态调整所述目标存储库的第二指示器,所述第二指示器用于指示在执行所述写访问后是否关闭所述目标行。
18.根据权利要求16所述的装置,其特征在于,在确定所述行管理策略的步骤中,所述内存控制器还用于:
当所述内存访问的访问类型为写访问时,确定所述目标存储库的行管理策略为与所述写访问对应的预设的行管理策略,所述预设的行管理策略用于指示在执行所述写访问后是否关闭所述目标行。
19.根据权利要求16-18任意一项所述的装置,其特征在于,所述行命中状态包括行命中或行冲突,在调整所述目标存储库的第一指示器或第二指示器的步骤中,所述内存控制器用于:
如果所述内存访问导致了行命中,则将所述第一指示器或所述第二指示器向第一指向调整,所述第一指向表示所述目标行不关闭或将所述目标行维持在打开状态;或
如果所述内存访问导致了行冲突,则将所述第一指示器或所述第二指示器向第二指向调整,所述第二指向表示所述目标行关闭。
20.根据权利要求16-19任意一项所述的装置,所述行命中状态包括行空闲,在调整所述目标存储库的第一指示器或第二指示器的步骤中,所述内存控制器用于:
如果所述内存访问导致了行空闲,则确定所述内存访问是否可能导致行命中;
如果所述内存访问可能导致行命中,则将所述第一指示器或所述第二指示器向第一指向调整,其中,所述第一指向表示所述目标行不关闭或将所述目标行维持在打开状态,所述可能导致行命中是指假设所述目标存储库中最后打开的行不关闭则会导致行命中;或
如果所述内存访问可能导致行冲突,则将所述第一指示器或所述第二指示器向第二指向调整,其中,所述第二指向表示所述目标行关闭,所述可能导致行冲突是指假设所述目标存储库中最后打开的行不关闭则会导致行冲突。
21.根据权利要求16-20任意一项所述的装置,其特征在于,所述内存控制器还用于:
确定所述内存访问的前一个访问的访问类型;
在根据所述目标行的行命中状态调整所述目标存储库的第一指示器或第二指示器的步骤中,所述内存控制器用于:
根据所述目标行的行命中状态以及所述内存访问的前一个访问的访问类型调整所述目标存储库的第一指示器或第二指示器。
22.根据权利要求16-21任意一项所述的装置,其特征在于,所述第一指示器的初始值大于所述第二指示器的初始值。
23.根据权利要求16-22任意一项所述的装置,其特征在于:
在调整所述第一指示器时,向所述第一指向调整的第一调整幅度大于向所述第二指向调整时的第二调整幅度;
在调整所述第二指示器时,向所述第一指向调整时的第三调整幅度小于向所述第二指向调整时的第四调整幅度。
24.根据权利要求13-23任意一项所述的装置,其特征在于,所述内存访问属于第一批内存访问,所述内存控制器还用于:
确定所述第一批内存访问执行完毕,且待执行第二批内存访问;
如果所述第一批内存访问的访问类型和所述第二批内存访问的访问类型不同,则将所述目标行关闭;
如果所述第一批内存访问和所述第二批内存访问均为读访问,则将所述目标行保持打开状态;或
如果所述第一批内存访问和所述第二批内存访问均为写访问,则将所述目标行关闭。
25.一种内存控制器,其特征在于,包括:
通信接口,用于接收计算机系统的处理器发送的内存访问;
逻辑电路,用于根据所述内存访问执行如权利要求1-12任意一项所述的内存管理方法。
26.一种计算机系统,其特征在于,包括内存以及如权利要求13-24任意一项所述的内存管理装置。
27.一种计算机存储介质,其特征在于,所述计算机可读存储介质用于存储程序代码,所述程序代码包括的指令被计算机所执行,以实现如权利要求1-12任意一项所述的内存管理方法。
28.一种计算机程序产品,其特征在于,包括程序代码,所述程序代码包括的指令被计算机所执行,以实现如权利要求1-12任意一项所述的内存管理方法。
CN202011176594.3A 2020-07-17 2020-10-28 内存管理技术及计算机系统 Pending CN113946435A (zh)

Priority Applications (6)

Application Number Priority Date Filing Date Title
CN202110188761.4A CN112965816B (zh) 2020-07-17 2020-10-28 内存管理技术及计算机系统
JP2023503053A JP2023534052A (ja) 2020-07-17 2021-05-15 メモリ管理技術及びコンピュータシステム
PCT/CN2021/093982 WO2022012143A1 (zh) 2020-07-17 2021-05-15 内存管理技术及计算机系统
EP21842284.8A EP4174666A4 (en) 2020-07-17 2021-05-15 STORAGE MANAGEMENT TECHNOLOGY AND COMPUTER SYSTEM
KR1020237005222A KR20230037649A (ko) 2020-07-17 2021-05-15 메모리 관리 기술 및 컴퓨터 시스템
US18/154,532 US20230152977A1 (en) 2020-07-17 2023-01-13 Memory Management Technology and Computer System

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN2020106932804 2020-07-17
CN202010693280 2020-07-17

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN202110188761.4A Division CN112965816B (zh) 2020-07-17 2020-10-28 内存管理技术及计算机系统

Publications (1)

Publication Number Publication Date
CN113946435A true CN113946435A (zh) 2022-01-18

Family

ID=79327204

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011176594.3A Pending CN113946435A (zh) 2020-07-17 2020-10-28 内存管理技术及计算机系统

Country Status (1)

Country Link
CN (1) CN113946435A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115052042A (zh) * 2022-06-07 2022-09-13 成都北中网芯科技有限公司 一种高性能多通道共享缓存的实现方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115052042A (zh) * 2022-06-07 2022-09-13 成都北中网芯科技有限公司 一种高性能多通道共享缓存的实现方法

Similar Documents

Publication Publication Date Title
US11593027B2 (en) Command selection policy with read priority
JP5305542B2 (ja) 投機的なプリチャージの検出
US9904489B2 (en) Processing systems, memory controllers and methods for controlling memory access operations
US9343127B1 (en) Memory device having an adaptable number of open rows
US5889714A (en) Adaptive precharge management for synchronous DRAM
US7020762B2 (en) Method and apparatus for determining a dynamic random access memory page management implementation
KR102448999B1 (ko) 캐시 및 다중 독립 어레이를 갖는 메모리용 인터페이스
CN108139994B (zh) 内存访问方法及内存控制器
US10572168B2 (en) DRAM bank activation management
WO2018188085A1 (zh) 内存刷新技术及计算机系统
CN113900818A (zh) Ddr存储器数据读写调度方法和装置
WO2019022837A1 (en) MINIMAL REDUCTION IN PERFORMANCE DEGRADATION DUE TO REFRESH OPERATIONS IN MEMORY SUBSYSTEMS
US7386658B2 (en) Memory post-write page closing apparatus and method
CN113946435A (zh) 内存管理技术及计算机系统
US7167947B2 (en) Memory post-write page closing apparatus and method
CN112965816B (zh) 内存管理技术及计算机系统
US8452920B1 (en) System and method for controlling a dynamic random access memory
KR20230082529A (ko) 리프레쉬 동작에서 파워 노이즈를 감소시킨 메모리 장치 및 그 동작방법

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