本公开涉及存储领域,具体地,涉及一种混合内存的数据迁移方法、系统及电子设备。
背景技术:
动态随机存储器(dynamicrandomaccessmemory,dram)是计算机内存系统的首要之选,其具有结构简单、集成度高、读写速度快、读写功耗低的优点。随着计算机体系结构技术的不断发展和集成电路工艺水平的不断提高,dram内存功耗已占系统总功耗的30%以上,其“功耗墙”问题亟待解决。此外,为了提高dram性能及集成度,需要在其单元面积不断减小的情况下,不断增加其存储电容的表面积,其“容量墙”的问题也日益突出。
非易失性存储器(non-volatilememory,nvm)主要包括铁电随机存储器(feram)、磁随机存储器(mram)、阻变随机存储器(rram)和相变随机存储器(pcm)等。与dram相比,nvm具有非易失、静态功耗极低、存储密度高的优点。但是nvm写功耗、写速度与dram相比存在一定差距,另外部分新型nvm写次数有限。相关技术中在dram与nvm混合内存系统中实现相应的迁移策略,减少对nvm的写操作。但是,混合内存数据迁移造成较大的时间开销,迁移过程会降低系统性能。
技术实现要素:
有鉴于此,本公开提供了一种可以在高速缓冲存储器读写内存的过程中完成数据迁移、迁移粒度为一个cache块的混合内存的数据迁移方法、系统及电子设备。
本公开的一个方面,提供了一种混合内存的数据迁移方法。所述方法用于内存控制器,所述混合内存包括非易失性存储器nvm和动态随机存储器dram,方法包括:当接收到访问所述非易失性存储器nvm的请求时,判断所述非易失性存储器nvm的第一模块的状态信息,其中,所述请求指向所述第一模块;当所述第一模块的状态信息为待迁移状态时,将所述请求对应的第一数据迁移至所述动态随机存储器dram的第二模块中,将所述第二模块中的数据迁移至所述第一模块中,其中,所述第一数据、第一模块以及第二模块的大小为一个cache块。
根据本公开的实施例,当所述请求为读请求时,所述第一数据为所述第一模块中的数据,所述将所述请求对应的第一数据迁移至所述动态随机存储器dram的第二模块中,包括:获取所述第一模块中的数据;将所述第一模块中的数据发送到高速缓冲存储器中,其中,所述读请求由所述高速缓冲存储器生成;将所述第一模块中的数据写入所述第二模块中。
根据本公开的实施例,当所述请求为写请求时,所述方法还包括:接收所述写请求所请求写入的写数据,所述第一数据为所述写数据;所述将所述请求对应的第一数据迁移至所述动态随机存储器dram的第二模块中,包括:将所述写数据写入所述第二模块中。
根据本公开的实施例,所述方法还包括:记录所述非易失性存储器nvm每一行对应的预充次数;根据所述第一模块、非易失性存储器nvm的行缓存中存储的数据更新所述预充次数。
根据本公开的实施例,所述根据所述第一模块、非易失性存储器nvm的行缓存中存储的数据更新所述预充次数,包括:当所述非易失性存储器nvm的行缓存中存储的数据不包含所述第一模块时,对所述预充次数进行加一处理,否则,所述预充次数保持不变。
根据本公开的实施例,所述判断所述非易失性存储器nvm的第一模块的状态信息,包括:当所述更新后的预充次数等于预设阈值时,所述第一模块的状态信息为待迁移状态;当所述更新后的预充次数小于所述预设阈值时,所述第一模块的状态信息为读写状态。
根据本公开的实施例,所述方法还包括:当所述第一模块的状态信息为待迁移状态时,将所述第二模块中的数据存储至所述内存控制器的交换缓存中;所述将所述第二模块中的数据迁移至所述第一模块中,包括:将所述交换缓存中的数据写入所述第一模块中。
根据本公开的实施例,所述第二模块为所述动态随机存储器dram中使用频次小于预设值的模块。
本公开的另一方面,提供了一种混合内存的数据迁移系统。所述系统用于内存控制器,所述混合内存包括非易失性存储器nvm和动态随机存储器dram,系统包括判断模块和迁移模块。所述判断模块用于当接收到访问所述非易失性存储器nvm的请求时,判断所述非易失性存储器nvm的第一模块的状态信息,其中,所述请求指向所述第一模块。所述迁移模块用于当所述第一模块的状态信息为待迁移状态时,将所述请求对应的第一数据迁移至所述动态随机存储器dram的第二模块中,将所述第二模块中的数据迁移至所述第一模块中,其中,所述第一数据、第一模块以及第二模块的大小为一个cache块。
本公开的另一方面,提供了一种电子设备,包括:处理器;存储器,其存储有计算机可执行程序,所述程序在被所述处理器执行时,使得所述处理器执行如上所述的方法。
根据本公开的实施例,可以在高速缓冲存储器读写内存的过程中完成混合内存中一个cache块大小数据的快速迁移,在读写的同时迁移数据,极大地缩短了迁移时间,避免数据迁移影响内存系统性能。
附图说明
通过以下参照附图对本公开实施例的描述,本公开的上述以及其他目的、特征和优点将更为清楚,在附图中:
图1示意性示出了根据本公开实施例的混合内存的数据转移方法的流程图;
图2a示意性示出了根据本公开实施例的混合内存的数据转移方法中读nvm的过程示意图;
图2b示意性示出了根据本公开实施例的混合内存的数据转移方法中读nvm的过程示意图;
图3示意性示出了根据本公开实施例的混合内存的数据转移装置的方框图;以及
图4示意性示出了根据本公开实施例的适于混合内存的数据转移方法的电子设备的方框图。
附图标记说明:
1-内存控制器;2-高速缓冲存储器。
具体实施方式
为使得本公开目的、特征、优点能够更加的明显和易懂,下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而非全部实施例。基于本公开中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
本公开的实施例提供了一种混合内存的数据迁移方法、系统及电子设备。该混合内存的数据迁移方法用于内存控制器,混合内存包括非易失性存储器nvm和动态随机存储器dram,方法包括:当接收到访问nvm的请求时,判断nvm的第一模块的状态信息,其中,该请求指向该第一模块;当第一模块的状态信息为待迁移状态时,将该请求对应的第一数据迁移至dram的第二模块中,将第二模块中的数据迁移至第一模块中,其中,第一数据、第一模块以及第二模块的大小为一个cache块,并在数据迁移过程中对请求进行响应。以此方式,可以通过在高速缓冲存储器读写nvm内存的过程中将读写数据迁移至dram中,以及将dram中的相应数据迁移至nvm中,并且保证数据迁移的粒度为一个cache块,以极大缩短混合内存中的数据迁移时间,解决了数据迁移影响内存系统性能的问题。
图1示意性示出了根据本公开实施例的混合内存的数据迁移方法的流程图。
如图1所示,该方法用于内存控制器,混合内存包括nvm和dram,该方法可以包括操作s110-操作s120。
在操作s110,当接收到访问非易失性存储器nvm的请求时,判断非易失性存储器nvm的第一模块的状态信息,其中,请求指向第一模块。
根据本公开的实施例,请求可以是读请求或写请求。当请求是读请求时,读请求可以包含读地址、读命令等;当请求是写请求时,写请求可以包含写地址、写命令等,进一步地,接收到写请求之后,还接收到有该写请求所请求写入的写数据。读地址或写地址为请求访问的第一模块的地址。
根据本公开的实施例,该混合内存的数据迁移方法还包括:记录nvm每一行对应的预充次数,根据第一模块、nvm的行缓存中存储的数据更新预充次数。当更新后的预充次数等于预设阈值时,第一模块的状态信息为待迁移状态;当更新后的预充次数小于预设阈值时,第一模块的状态信息为读写状态。具体地,例如当nvm的行缓存中存储的数据不包含第一模块时,对预充次数进行加一处理,否则,预充次数保持不变。
可以理解的是,高速缓冲存储器读写nvm时,内存控制器需要向nvm发送激活命令,通过激活命令中的行地址选择要访问nvm中的哪一行,nvm将该行数据读取到其行缓存rowbuffer中,然后内存控制器再向nvm发送读命令或写命令,nvm将其行缓存中的数据发送到输入/输出口,或者将输入/输出口的数据写进行缓存中。行缓存中的数据会一直保留,直至nvm新的一行的数据需要被访问,此时内存控制器向nvm发送预充命令,以使得nvm根据该预充命令将其行缓存中原来的数据写回到该数据对应的行中,再将被访问行的数据读取到行缓存中。nvm的一行中至少包括一个模块的数据。
本公开实施例中,每一行对应的预充次数的初始值例如设置为0。当接收到高速缓冲存储器访问nvm的请求时,判断该请求指向的第一模块是否包含在nvm行缓存中存储的数据中,若包含,无需进行预充、激活操作,此时,该第一模块所在行的预充次数保持不变,例如,其预充次数仍为0,若不包含,需要进行预充、激活操作,此时,该第一模块所在行的预充次数进行加一处理,例如,其预充次数更新为1。
本公开实施例中,接收到访问nvm的请求时,可以根据该请求得到更新后的预充次数。只有当更新后的预充次数达到预设阈值时,才会在混合内存的nvm和dram之间进行数据转移,以避免频繁进行数据转移而影响系统性能。预设阈值例如为8、10等。本领域技术人员可以根据本公开实施例的描述得到其它预设阈值的具体取值。
在操作s120,当第一模块的状态信息为待迁移状态时,将请求对应的第一数据迁移至动态随机存储器dram的第二模块中,将第二模块中的数据迁移至第一模块中,其中,第一数据、第一模块以及第二模块的大小为一个cache块。
根据本公开的实施例,当请求为读请求时,第一数据为nvm第一模块中的数据,将请求对应的第一数据迁移至动态随机存储器dram的第二模块中,包括:获取第一模块中的数据,将第一模块中的数据发送到高速缓冲存储器中,其中,上述读请求由高速缓冲存储器生成。此外,还需将dram的第二模块中的数据存储至内存控制器的交换缓存中,并将交换缓存中的数据写入第一模块。
参阅图2a,详细说明请求为读请求时的迁移过程。高速缓冲存储器2通过总线向内存控制器1发送读nvm的读请求,然后内存控制器1向nvm发送读地址和读命令,nvm开始读取该读地址指向的数据;dram接收内存控制器1发送的读dram的读地址和读命令,dram读取相应的数据;由于dram延迟低,dram先完成读操作,dram将读取到的数据存储至内存控制器1的交换缓存exbuf中;nvm完成读操作,并将其读出的数据存储至内存控制器1的读缓存rbuf中;内存控制器1将其读缓存rbuf中的数据发送至总线上,以通过总线将nvm中读取到的数据传输至高速缓冲存储器2,与此同时,内存控制器1将其读缓存rbuf中的数据写回至dram,将交换缓存exbuf中的数据写回至nvm。
由此可知,本公开实施例中的数据迁移方法,在高速缓冲存储器读混合内存中nvm的过程中,完成数据迁移,其充分利用了数据读写的并行性,极大提高了迁移速度。
根据本公开的实施例,当请求为写请求时,该数据迁移方法还包括:接收写请求所请求写入的写数据,该写数据为上述第一数据,将该写数据写入第二模块中。
参阅图2b,详细说明请求为写请求时的迁移过程。高速缓冲存储器2通过总线向内存控制器1发送写nvm的写请求,然后内存控制器1向nvm发送写地址和写命令,nvm等待写数据;dram接收内存控制器1发送的读dram的读地址和读命令,dram读取相应的迁移数据;内存控制器1接收高速缓冲存储器2发送的写数据,并将写数据存储到其写缓存wbuf中,该写数据即为上述写请求所请求写进nvm中的数据;dram完成读操作,并将读出的数据存储到内存控制器1的交换缓存exbuf中;内存控制器1将写缓存wbuf中的数据直接写入dram中,并将交换缓存exbuf中的数据写入nvm中,由此响应写请求,并直接将写请求对应的写数据迁移至dram中。
由此可知,本公开实施例中的数据迁移方法,在高速缓冲存储器写混合内存中nvm的过程中,直接将数据写入dram中,并将dram中的数据迁移至nvm中,减少了从nvm中读出迁移数据的过程,极大提高了迁移速度。
根据本公开的实施例,第二模块为dram中使用频次小于预设值的模块,以此避免频繁进行数据迁移。预设值例如为5次/天、1次/小时等。本领域技术人员可以根据本公开实施例的描述得到其它预设值的具体取值。
本公开实施例中,将第一数据、第一模块以及第二模块的大小设置为一个cache块大小,即将迁移粒度设置为一个cache块。一个cache块一般为32b,相比于迁移粒度设置为页,本公开实施例中考虑到高速缓冲存储器总是以一个cache块为基本单位读写内存,将迁移粒度设置为一个cache块,解决了nvm和dram页面大小不同的问题,并且避免了不必要的读和写,提高了迁移速度,降低迁移时间。
本公开的实施例提供的混合内存的数据迁移方法,可以通过在高速缓冲存储器读写nvm内存的过程中将读写数据迁移至dram中,以及将dram中的相应数据迁移至nvm中,并且保证数据迁移的粒度为一个cache块,以极大缩短混合内存中的数据迁移时间,解决了数据迁移影响内存系统性能的问题。
图3示意性示出了根据本公开实施例的混合内存的数据迁移系统300的方框图。
如图3所示,该混合内存的数据迁移系统300包括判断模块310以及迁移模块320。系统300可以用于执行参考图1~图2所描述的混合内存的数据迁移方法。
判断模块310例如可以执行操作s110,用于当接收到访问非易失性存储器nvm的请求时,判断非易失性存储器nvm的第一模块的状态信息,其中,请求指向第一模块。
迁移模块320例如可以执行操作s120,用于当第一模块的状态信息为待迁移状态时,将请求对应的第一数据迁移至动态随机存储器dram的第二模块中,将第二模块中的数据迁移至第一模块中,其中,第一数据、第一模块以及第二模块的大小为一个cache块。
根据本公开的实施例的模块、子模块、单元、子单元中的任意多个、或其中任意多个的至少部分功能可以在一个模块中实现。根据本公开实施例的模块、子模块、单元、子单元中的任意一个或多个可以被拆分成多个模块来实现。根据本公开实施例的模块、子模块、单元、子单元中的任意一个或多个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(fpga)、可编程逻辑阵列(pla)、片上系统、基板上的系统、封装上的系统、专用集成电路(asic),或可以通过对电路进行集成或封装的任何其他的合理方式的硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,根据本公开实施例的模块、子模块、单元、子单元中的一个或多个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
例如,判断模块310以及迁移模块320中的任意多个可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本公开的实施例,判断模块310以及迁移模块320中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(fpga)、可编程逻辑阵列(pla)、片上系统、基板上的系统、封装上的系统、专用集成电路(asic),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,判断模块310以及迁移模块320中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
图4示意性示出了根据本公开实施例的适于混合内存的数据迁移的电子设备400的方框图。图4仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图4所示,根据本公开实施例的电子设备400包括处理器401,其可以根据存储在只读存储器(rom)402中的程序或者从存储部分408加载到随机访问存储器(ram)403中的程序而执行各种适当的动作和处理。处理器401例如可以包括通用微处理器(例如cpu)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(asic)),等等。处理器401还可以包括用于缓存用途的板载存储器。处理器401可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
在ram403中,存储有电子设备400操作所需的各种程序和数据。处理器401、rom402以及ram403通过总线404彼此相连。处理器401通过执行rom602和/或ram603中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,所述程序也可以存储在除rom402和ram403以外的一个或多个存储器中。处理器401也可以通过执行存储在所述一个或多个存储器中的程序来执行根据本公开实施例的方法的各种操作。
根据本公开的实施例,电子设备400还可以包括输入/输出(i/o)接口405,输入/输出(i/o)接口405也连接至总线404。系统400还可以包括连接至i/o接口405的以下部件中的一项或多项:包括键盘、鼠标等的输入部分406;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分408;包括硬盘等的存储部分408;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分409。通信部分409经由诸如因特网的网络执行通信处理。驱动器410也根据需要连接至i/o接口405。可拆卸介质411,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器410上,以便于从其上读出的计算机程序根据需要被安装入存储部分408。
根据本公开实施例的方法流程还可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读存储介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分409从网络上被下载和安装,和/或从可拆卸介质411被安装。在该计算机程序被处理器401执行时,执行本公开实施例的系统中限定的上述功能。根据本公开的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。电要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。