写请求的处理方法和内存控制器与流程

文档序号:12362515阅读:153来源:国知局
写请求的处理方法和内存控制器与流程

本发明涉及计算机领域,并且更为具体地,涉及一种写请求的处理方法和内存控制器。



背景技术:

非易失性存储器(Non-Volatile Memory,NVM)是一种新型的存储器,它具有很多优点,如可按照字节寻址,掉电后数据不丢失,存储密度高,无需频繁刷新,以及能耗低等,因此,很适合作为内存(或称主存)。但是,NVM也存在一些不足之处,如相对较长的写延时、写次数有限等。NVM可以与现有的动态随机存取存储器(Dynamic Random Access Memory,DRAM)共同构成混合内存,应用程序产生的临时数据可存储在DRAM中,应用程序产生的持久性数据可存储在NVM中。

NVM用作内存,需要对现有的体系结构和软件架构进行重新设计或者优化。一种可行的方法是使用软件事务内存(Software Transactional Memory,STM)技术,该技术能够使得NVM内存的管理维持了事务特性,事务特性包括事务的原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。同时,由于STM技术是基于现有的编程模型,这种使用STM技术对NVM进行管理和控制的方式,易于程序员接受和使用。

为了保证NVM内存在使用过程中的一致性,写请求的调度次序需要满足可线性化(Linearizability)的要求,即针对同一个事务,内存控制器需要先将该事务的日志写请求(或称Log写请求)和提交写请求(或称Commit写请求)依次发送至NVM内存中,然后才能将该事务的数据写请求(或称Data写请求)发送至NVM内存中,进行该事务的数据的原地更新(In-place Update)。

STM技术通过建立非易失性堆(Non-Volatile Heaps)对NVM内存进行管理,并可使用写前日志(Write Ahead Logging,WAL)保证事务的一致性。具体而言,Non-Volatile Heaps向内存控制器发送日志写请求和提交写请求之 间,以及向内存控制器发送提交写请求和数据写请求之间,都要向内存控制器发送内存栅(或者称为持久性内存栅,Persistent Memory Barrier)请求,使得内存控制器的写请求队列中,同一事务的日志写请求、提交写请求以及数据写请求通过内存栅相隔。这样,内存控制器在将写请求发送至NVM内存时,就需要考虑内存栅的影响,不能将内存栅相隔的两个写请求并行的发送至NVM内存中。这样的写请求处理方式虽然保证了事务的一致性,但却由于内存栅的存在导致一次并发处理的写请求数量较少,从而未能充分利用内存中的存储空间,导致写请求的处理效率低下。



技术实现要素:

本发明实施例提供一种写请求的处理方法和内存控制器,以提高写请求的处理效率。

第一方面,提供一种写请求的处理方法,所述方法由计算机系统中的内存控制器来执行,在所述内存控制器中缓存有写请求队列,所述写请求队列中包含有待调度的事务的写请求,所述计算机系统的内存为NVM,且所述内存包括多个存储单元,所述方法包括:确定待调度的第一写请求集合中的写请求的数目小于所述内存中的未被占用的存储单元的数目,其中,所述第一写请求集合中的写请求与所述写请求队列中的其他写请求之间有第一内存栅,所述第一写请求集合中的写请求位于所述第一内存栅之前;确定第二写请求集合,其中,所述第二写请求集合中的写请求为日志写请求,所述第二写请求集合中的写请求在所述写请求队列中位于所述第一内存栅之后,且所述第二写请求集合中的写请求的数量与所述第一写请求集合中的写请求的数量的和不大于所述内存中未被占用的存储单元的数量;将所述第一写请求集合中的写请求和所述第二写请求集合中的写请求并行发送至所述内存的未被占用的不同存储单元中。

结合第一方面,在第一方面的一种实现方式中,所述方法还包括:确定待调度的第三写请求集合中的写请求的数目小于所述内存中的未被占用的存储单元的数目,其中,所述第三写请求集合中的写请求与所述写请求队列中的其他写请求之间有第二内存栅,所述第三写请求集合中的写请求位于所述第二内存栅之前;确定第四写请求集合,其中,所述第四写请求集合中的写请求包括提交写请求或中断写请求,所述第四写请求集合中的写请求在所 述写请求队列中位于所述第二内存栅之后,所述第四写请求集合中的写请求与所述第三写请求集合中的写请求通过所述第二内存栅相隔,所述第四写请求集合中的每个写请求与所述第三写请求集合中的每个写请求均为不同事务的写请求,且所述第四写请求集合中的写请求的数量与所述第三写请求集合中的写请求的数量的和不大于所述内存中未被占用的存储单元的数量;将所述第三写请求集合中的写请求和所述第四写请求集合中的写请求并行发送至所述内存的未被占用的不同存储单元中。

结合第一方面或其上述实现方式的任一种,在第一方面的另一种实现方式中,所述确定第四写请求集合,包括:根据所述写请求队列中的写请求携带的事务标识,确定所述第四写请求集合,所述事务标识用于指示写请求所属的事务。

结合第一方面或其上述实现方式的任一种,在第一方面的另一种实现方式中,所述方法还包括:确定待调度的第五写请求集合中的写请求的数目小于所述内存中的未被占用的存储单元的数目,其中,所述第五写请求集合中的写请求与所述写请求队列中的其他写请求之间有第三内存栅,所述第五写请求集合中的写请求位于所述第三内存栅之前,所述第五写请求集合中的写请求均不是日志写请求;确定第六写请求集合,其中,所述第六写请求集合中的写请求为提交写请求或中断写请求,所述第六写请求集合中的写请求在所述写请求队列中位于所述第三内存栅之后,所述第六写请求集合中的写请求与所述第五写请求集合中的写请求通过所述第三内存栅相隔,且所述第六写请求集合中的写请求的数量与所述第五写请求集合中的写请求的数量的和不大于所述内存中未被占用的存储单元的数量;将所述第五写请求集合中的写请求和所述第六写请求集合中的写请求并行发送至所述内存的未被占用的不同存储单元中。

结合第一方面或其上述实现方式的任一种,在第一方面的另一种实现方式中,所述确定第二写请求集合,包括:从所述内存的未被占用的存储单元中确定第一存储单元集合,其中,所述第一存储单元集合中的存储单元用于接收除所述第一写请求集合中的写请求之外的写请求;从所述写请求队列中位于所述第一内存栅之后的写请求中选择待发送至所述第一存储单元集合中的存储单元的日志写请求,其中,所述选择的日志写请求构成所述第二写请求集合。

结合第一方面或其上述实现方式的任一种,在第一方面的另一种实现方式中,所述存储单元包括所述内存中的bank。

第二方面,提供一种内存控制器,所述内存控制器位于计算机系统中,在所述内存控制器中缓存有写请求队列,所述写请求队列中包含有待调度的事务的写请求,所述计算机系统的内存为NVM,且所述内存包括多个存储单元,所述内存控制器包括:比较模块,用于确定待调度的第一写请求集合中的写请求的数目小于所述内存中的未被占用的存储单元的数目,其中,所述第一写请求集合中的写请求与所述写请求队列中的其他写请求之间有第一内存栅,所述第一写请求集合中的写请求位于所述第一内存栅之前;确定模块,用于确定第二写请求集合,其中,所述第二写请求集合中的写请求为日志写请求,所述第二写请求集合中的写请求在所述写请求队列中位于所述第一内存栅之后,且所述第二写请求集合中的写请求的数量与所述第一写请求集合中的写请求的数量的和不大于所述内存中未被占用的存储单元的数量;处理模块,用于将所述第一写请求集合中的写请求和所述第二写请求集合中的写请求并行发送至所述内存的未被占用的不同存储单元中。

结合第二方面,在第二方面的一种实现方式中,所述比较模块,还用于确定待调度的第三写请求集合中的写请求的数目小于所述内存中的未被占用的存储单元的数目,其中,所述第三写请求集合中的写请求与所述写请求队列中的其他写请求之间有第二内存栅,所述第三写请求集合中的写请求位于所述第二内存栅之前;所述确定模块,还用于确定第四写请求集合,其中,所述第四写请求集合中的写请求包括提交写请求或中断写请求,所述第四写请求集合中的写请求在所述写请求队列中位于所述第二内存栅之后,所述第四写请求集合中的写请求与所述第三写请求集合中的写请求通过所述第二内存栅相隔,所述第四写请求集合中的每个写请求与所述第三写请求集合中的每个写请求均为不同事务的写请求,且所述第四写请求集合中的写请求的数量与所述第三写请求集合中的写请求的数量的和不大于所述内存中未被占用的存储单元的数量;所述处理模块,还用于将所述第三写请求集合中的写请求和所述第四写请求集合中的写请求并行发送至所述内存的未被占用的不同存储单元中。

结合第二方面或其上述实现方式的任一种,在第二方面的另一种实现方式中,所述确定模块具体用于根据所述写请求队列中的写请求携带的事务标 识,确定所述第四写请求集合,所述事务标识用于指示写请求所属的事务。

结合第二方面或其上述实现方式的任一种,在第二方面的另一种实现方式中,所述比较模块,还用于确定待调度的第五写请求集合中的写请求的数目小于所述内存中的未被占用的存储单元的数目,其中,所述第五写请求集合中的写请求与所述写请求队列中的其他写请求之间有第三内存栅,所述第五写请求集合中的写请求位于所述第三内存栅之前,所述第五写请求集合中的写请求均不是日志写请求;所述确定模块,还用于确定第六写请求集合,其中,所述第六写请求集合中的写请求为提交写请求或中断写请求,所述第六写请求集合中的写请求在所述写请求队列中位于所述第三内存栅之后,所述第六写请求集合中的写请求与所述第五写请求集合中的写请求通过所述第三内存栅相隔,且所述第六写请求集合中的写请求的数量与所述第五写请求集合中的写请求的数量的和不大于所述内存中未被占用的存储单元的数量;所述处理模块还用于将所述第五写请求集合中的写请求和所述第六写请求集合中的写请求并行发送至所述内存的未被占用的不同存储单元中。

结合第二方面或其上述实现方式的任一种,在第二方面的另一种实现方式中,所述确定模块具体用于:从所述内存的未被占用的存储单元中确定第一存储单元集合,其中,所述第一存储单元集合中的存储单元用于接收除所述第一写请求集合中的写请求之外的写请求;从所述写请求队列中位于所述第一内存栅之后的写请求中选择待发送至所述第一存储单元集合中的存储单元的日志写请求,其中,所述选择的日志写请求构成所述第二写请求集合。

结合第二方面或其上述实现方式的任一种,在第二方面的另一种实现方式中,所述存储单元包括所述内存中的bank。

第三方面,提供一种写请求的处理方法,所述方法由计算机系统中的内存控制器来执行,在所述内存控制器中缓存有写请求队列,所述写请求队列中包含有待调度的事务的写请求,所述计算机系统的内存为NVM,所述内存包括多个存储单元,所述方法包括:确定所述写请求队列中的第一写请求为日志写请求,其中所述第一写请求在所述写请求队列中位于第二写请求之后,且所述第一写请求与所述第二写请求通过内存栅相隔;将所述第一写请求和所述第二写请求并行发送至所述内存的未被占用的不同存储单元中。

结合第三方面,在第三方面的一种实现方式中,所述确定所述写请求队列中的第一写请求为日志写请求,包括:根据所述第一写请求中的类型标识, 确定所述第一写请求为日志写请求,其中,所述类型标识用于指示所述第一写请求为日志写请求。

结合第三方面或其上述实现方式的任一种,在第三方面的另一种实现方式中,所述存储单元包括所述内存中的bank。

第四方面,提供一种内存控制器,所述内存控制器位于计算机系统中,在所述内存控制器中缓存有写请求队列,所述写请求队列中包含有待调度的事务的写请求,所述计算机系统的内存为NVM,所述内存包括多个存储单元,所述内存控制器包括:确定单元,用于确定所述写请求队列中的第一写请求为日志写请求,其中,所述第一写请求在所述写请求队列中位于第二写请求之后,且所述第一写请求与所述第二写请求通过内存栅相隔;处理单元,用于将所述第一写请求和所述第二写请求并行发送至所述内存的未被占用的不同存储单元中。

结合第四方面,在第四方面的一种实现方式中,所述确定单元具体用于:根据所述第一写请求中的类型标识,确定所述第一写请求为日志写请求,其中,所述类型标识用于指示所述第一写请求为日志写请求。

结合第四方面或其上述实现方式的任一种,在第四方面的另一种实现方式中,所述存储单元包括所述内存中的bank。

本发明实施例中,第二写请求集合中的写请求均为日志写请求,且与第一写请求集合中的写请求通过第一内存栅相隔,相当于将第一内存栅相隔之后的日志写请求跨过第一内存栅优先调度,这样能够提高内存中的能够并行接收写请求的存储单元的利用率,从而提高写请求的处理效率。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,显而易见地,下面所描述的附图仅仅是本发明的一些实施例的附图。

图1是本发明实施例提供的一种计算机系统的系统框架示例图。

图2是本发明实施例的写请求的调度方式的示例图。

图3是本发明实施例的写请求的处理方法的示意性流程图。

图4是本发明实施例的写请求的处理方法的示意性流程图。

图5是本发明实施例的写请求的处理方法的示意性流程图。

图6是本发明实施例的内存控制器的示意性框图。

图7是本发明实施例的写请求的处理方法的示意性流程图。

图8是本发明实施例的内存控制器的示意性框图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部实施例。

为了方便理解,先结合图1,总体介绍本发明实施例提供的一种计算机系统100。如图1所示,该计算机系统100包括中央处理单元(Central Processing Unit,CPU)110,内存控制器120和内存130。CPU110用于将事务的写请求发送至内存控制器120的写请求队列中。

如图1所示,CPU 110是计算机系统100的运算核心(Core)和控制核心(Control Unit)。CPU 110可以是一块超大规模的集成电路。在CPU 110中安装有操作系统和其他软件程序,从而CPU 110能够实现对内存、缓存及磁盘的访问。可以理解的是,在本发明实施例中,CPU 110仅仅是处理器的一个示例。除了CPU 110外,处理器还可以是其他特定集成电路ASIC(Application Specific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。

内存控制器(Memory Controller)120是计算机系统100内部控制内存130并用于管理与规划从内存130到CPU 110间的数据传输速度的总线电路控制器。通过内存控制器120,内存130与CPU 110之间可以交换数据。内存控制器120可以是一个单独的芯片,并通过系统总线与CPU 110连接。本领域技术人员可以知道,内存控制器120也可以被集成到相关的大型芯片里,例如,内存控制器120可以被集成到微处理器(例如CPU 110)中或被内置于北桥中。本发明实施例不对内存控制器120的具体位置进行限定。为了方便描述,在图1所示的系统架构中,以内存控制器120单独设置为例进行描述。内存控制器120控制必要的逻辑以将数据写入内存130或从内存130中读取数据。

内存130是计算机系统100的主存。内存130通常用来存放操作系统中各种正在运行的软件、输入和输出数据以及与外存交换的信息等。为了提高 CPU 110的访问速度,内存130需要具备访问速度快的优点。在传统的计算机系统架构中,通常采用动态随机存取存储器(Dynamic Random Access Memory,DRAM)作为内存130。随着非易失性存储器(Non-Volatile Memory,NVM)技术的发展,NVM也逐渐被作为内存使用。

本领域技术人员可以知道,下一代NVM具有访问速度快且具有非易失性的特点,并且,下一代NVM能够按字节(Byte)寻址,将数据以位(bit)为单位写入非易失性存储介质中。因此,下一代NVM作为内存使用时,能够与动态随机存取存储器(Dynamic Random Access Memory,DRAM)一样,降低数据访问的等待时间(latency)。并且,与DRAM相比,由于NVM具有非易失性,从而能够更好的保存数据。下一代NVM可以包括相变存储器(Phase Change Memory,PCM)、阻变存储器(Resistive Random Access Memory,RRAM)、磁性存储器(Magnetic Random Access Memory,MRAM)或铁电式存储器(Ferroelectric Random Access Memory,FRAM)等下一代非易失性存储器。在本发明实施例提供的计算机系统100中,内存130为下一代非易失性存储器的非易失性存储介质。其中,存储介质可以由多个存储单元组成。

可以理解的是,这里仅仅是对计算机系统架构的举例说明,实际中,计算机系统的内存可以是DRAM和NVM组成的混合内存,其中,DRAM可以用于存储暂时性数据(或称临时数据),NVM内存可以用于存储持久性数据。

本领域技术人员可以知道,按照晶粒的封装组合可以将NVM中的存储空间分为不同层级的存储单元。需要说明的是,在本发明实施例中,存储单元用于表示包含不同内存晶粒组合的存储单位空间。例如,一个内存可以包括2个或4个channel,每个channel可以包括2个双列直插式存储模块(Dual In-line Memory Module,DIMM),每个DIMM可以包含1个或2个RANK,每个RANK中可以包括多个chip,每个chip中可以包括多个bank,每个bank为由多个column和row组成的阵列。其中,bank可以是能够并行接收(或处理)写请求的最小的存储单元。本发明实施例中的存储单元可以是bank,或者晶粒大于bank的存储单元,如chip、rank、DIMM或channel。后文主要以bank为例。

NVM内存可采用STM技术进行事务管理。在基于STM技术的事务管 理过程中,为了保证事务的可线性化,同一事务的执行过程是按照先存储该事务的日志,再存储该事务的提交项,最后存储该事务的数据进行的。为了保障该执行顺序,运行于CPU110中的应用程序除了要按次序向内存控制器120发送事务的日志写请求、提交写请求和数据写请求,还需要在事务的日志写请求、提交写请求和数据写请求之间向内存控制器120发送内存栅请求。从内存控制器120的角度来看,内存控制器120的buffer中缓存有写请求队列。写请求队列中除了存储有事务的日志写请求、提交写请求以及数据写请求之外,还存储有将同一事务的日志写请求、提交写请求和数据写请求间隔开的内存栅,以保障事务的可线性化。内存控制器120会将写请求队列中的写请求发送至NVM内存中。

下面结合图2对内存控制器120的写请求调度过程进行举例说明,假设在写请求队列中,写请求和内存栅的排列次序如下:L0,L1,b1,C0,b2,L2,D0,b3,C1,b4,D1。其中,b1,b2,b3和b4为4个内存栅,L0,C0,D0属于事务0,L0为事务0中的日志写请求,C0为事务0中的提交写请求,D0为事务0中的数据写请求;同理,L1、L2、C1、D1属于事务1,其中,L1和L2为事务1中的日志写请求,C1为事务1中的提交写请求,D1为事务1中的数据写请求。假设NVM包括2个bank,且该2个bank均处于空闲态。参见图2中的调度方式1,即现有技术的调度方式,由于L0和L1均位于内存栅b1之前,且可以同时发送至内存的不同bank中,因此,在第一个调度周期,内存控制器会将L0和L1并行发送至NVM内存中。由于C0位于b1和b2两个内存栅之间,在第二个调度周期,内存控制器只能单独将C0发送至1个bank中。根据这种调度方式,NVM内存中的另一个bank资源就被浪费掉了,导致NVM内存的bank并行能力没有被充分利用。

针对上述问题,本发明实施例提出写请求的处理方法,以优化写请求的处理方式,下面结合图3进行详细描述。

图3是本发明实施例的写请求的处理方法的示意性流程图。图3的方法可由图1描述的计算机系统100中的内存控制器120执行,在内存控制器中缓存有写请求队列,写请求队列中包含有待调度的事务的写请求,事务的写请求用于向计算机系统100的内存130中写入数据,内存控制器可用于将写请求队列中的写请求发送至内存中(换句话说,内存控制器可用于将写请求队列中的写请求的数据写入内存中),内存为NVM,且内存包括多个能够并 行接收写请求的存储单元,该存储单元例如可以是bank、rank、channel等。

需要说明的是,事务的写请求可包括日志Log写请求、日志控制写请求以及数据写请求。上述日志写请求也可称为日志数据的写请求,日志Log写请求可用于向内存中写入事务的日志数据。上述日志控制写请求也可称为日志控制数据的写请求,日志控制写请求可用于向内存中写入事务的日志控制数据,如日志控制写请求可以包括提交数据请求(Commit请求)或中断数据请求(Abort请求)。上述数据Data写请求可用于向内存中写入除事务的日志数据和日志控制数据之外的数据。

内存控制器中缓存有写请求队列,也可称为写请求序列,写请求队列可包括一个或多个事务的写请求。当写请求队列中包括多个事务的写请求时,每个事务的写请求在队列中的排列次序满足该事务的日志写请求位于该事务的提交写请求(或中断写请求)之前,该事务的提交写请求位于该事务的数据写请求之前,且每个事务的不同类型的写请求之间通过内存栅相隔。但多个事务的写请求之间可以没有顺序要求,换一种表达方式,多个事务的写请求可以相互交叉排列在写请求队列中。内存控制器可通过batch操作(或称写batch)向内存发送写请求队列中的写请求,该batch操作可调度的写请求需要综合考虑内存中的当前未被占用的bank(例如,有些bank可能被读请求占用)的数目,以及写请求队列中的内存栅的位置。举例说明,当前未被占用的bank数为3,但写请求队列前2个写请求之后有一个内存栅,那么按照现有技术的调度方式,此时最多能调度2个写请求,即最多能将2个写请求并行发送至内存的2个bank中,以使内存的2个bank能够根据并行发送的2个写请求将写请求中携带的数据写入内存。

图3的方法包括:

310、确定待调度的第一写请求集合中的写请求的数目小于内存中的未被占用的存储单元的数目,其中,第一写请求集合中的写请求与写请求队列中的其他写请求之间有第一内存栅,第一写请求集合中的写请求位于第一内存栅之前。

应理解,上述内存中的未被占用的存储单元可以指内存中的处于空闲态的存储单元,或者在当前调度周期能够接收或处理写请求的存储单元。

举例说明,内存控制器可以先确定待调度的第一写请求集合,以bank为例,该第一写请求集合的确定方式可以如下:该内存控制器先确定内存中 当前未被占用的bank的数目,例如,内存包括4个bank,当前有一个bank被读请求占用,3个bank处于空闲状态,那么当前未被占用的bank数目可以为3。然后,内存控制器可以从写请求队列中按照从前往后的次序选取写请求,此时最多可以调度3个写请求。但如果写请求队列中的前3个写请求之间通过内存栅相隔,例如,第2个写请求和第3个写请求之间设置有一个内存栅,内存控制器此时最多只能选取前2个写请求组成上述待调度的第一写请求集合。

320、确定第二写请求集合,其中,第二写请求集合中的写请求为日志写请求,第二写请求集合中的写请求在写请求队列中位于第一内存栅之后,且第二写请求集合中的写请求的数量与第一写请求集合中的写请求的数量的和不大于内存中未被占用的存储单元的数量。

需要说明的是,第二写请求集合可以包括一个日志写请求,也可以包括多个日志写请求。内存控制器确定第二写请求集合的方式可以有多种。例如,可以先由运行在CPU中的应用程序在写请求中添加写请求的类型标识,内存控制器可以根据写请求的类型标识,从写请求队列中选取日志写请求,从而得到上述第二写请求集合。该写请求类型标识可以是添加到写请求中的新的用于标识写请求的类型的标识,也可以利用写请求中的写地址的除有效地址位之外的剩余位进行标识。

需要说明的是,由于第二写请求集合与第一写请求集合中的各写请求准备发送至内存的不同存储单元中,因此,第二写请求集合和第一写请求集合中的不同写请求的地址对应不同的存储单元。

330、将第一写请求集合中的写请求和第二写请求集合中的写请求并行发送至内存的未被占用的不同存储单元中。

应理解,步骤330可包括:通过一次batch操作(也可称为写batch),将第一写请求集合中的写请求的数据和第二写请求集合中的写请求的数据分别写入内存的未被占用的不同存储单元中。

还应理解,上述第一写请求集合和第二写请求集合中的每个写请求均会被发送至不同的存储单元中,以bank为例,假设第一写请求集合包括2个写请求,第二写请求集合包括2个写请求,那么这4个写请求会被发送至4个不同的bank中。

本发明实施例中,第二写请求集合中的写请求均为日志写请求,且与第 一写请求集合中的写请求通过第一内存栅相隔,相当于将第一内存栅相隔之后的日志写请求跨过第一内存栅优先调度,这样能够提高内存中的能够并行接收写请求的存储单元的利用率,从而提高写请求的处理效率。

可选地,作为一个实施例,如图4所示,上述方法还可包括:

410、确定待调度的第三写请求集合中的写请求的数目小于内存中的未被占用的存储单元的数目,其中,第三写请求集合中的写请求与写请求队列中的其他写请求之间有第二内存栅,第三写请求集合中的写请求位于第二内存栅之前。

420、确定第四写请求集合,其中,第四写请求集合中的写请求包括提交写请求或中断写请求,第四写请求集合中的写请求在写请求队列中位于第二内存栅之后,且与第三写请求集合中的写请求通过第二内存栅相隔(或者,第四写请求集合中的写请求在写请求队列中位于第二内存栅之后,第四写请求集合中的写请求与第三写请求集合中的写请求通过一个内存栅相隔),第四写请求集合中的每个写请求与第三写请求集合中的每个写请求均为不同事务的写请求,且第四写请求集合中的写请求的数量与第三写请求集合中的写请求的数量的和不大于内存中未被占用的存储单元的数量。

430、将第三写请求集合中的写请求和第四写请求集合中的写请求并行发送至内存的未被占用的不同存储单元中。

本发明实施例中,内存控制器在不破坏事务的一致性的前提下,将提交写请求或中断写请求跨内存栅优先调度,提升了内存中的能够并行接收写请求的存储单元的利用率,从而提高了写请求的处理效率。

需要说明的是,图4的实施方式与图3的实施方式可以是相互独立的实施方式,也可以集成在一个方案中。图2中的调度方式2是上述两种实施方式集成在一个方案中的一个例子。具体而言,在第一个调度周期,内存控制器会通过一次batch操作,将位于b1之前的L0和L1发送至NVM内存的不同bank中。在第二个调度周期,内存控制器采用图3对应的实施方式,通过一次batch操作,将C0以及与C0通过b2相隔的日志写请求L2分别发送至bank1和bank2中。接着,在第三个调度周期,内存控制器采用图4对应的实施方式,通过一次batch操作,将D0以及与D0不属于同一个事务的提交写请求C1分别发送至bank1和bank2中。最后,在第四个调度周期,单独调度D1。通过比较调度方式1和调度方式2,可以看出调度方式2节省了 一个调度周期,从而提升了写请求的处理效率。

还需要说明的是,上述确定第四写请求集合的方式可以有多种,例如,根据写请求队列中的写请求携带的事务标识,确定第四写请求集合,一个写请求的事务标识指示该写请求所属的事务。该事务标识可以是添加到写请求中的新的用于标识写请求所属事务的标识,也可以利用写请求中的写地址的除有效地址位之外的剩余位进行标识。具体而言,假设内存和内存控制器所在的计算机系统是64位的系统,在64位系统中,地址是64位对齐的。但实际中,CPU的虚拟寻址空间实际上只有48位,写地址的有效位最多为48位,剩余的16位中的部分或全部字段就可以用作事务标识。

可选地,作为一个实施例,如图5所示,上述方法还可包括:

510、确定待调度的第五写请求集合中的写请求的数目小于内存中的未被占用的存储单元的数目,其中,第五写请求集合中的写请求与写请求队列中的其他写请求之间有第三内存栅,第五写请求集合中的写请求位于第三内存栅之前,第五写请求集合中的写请求均不是日志写请求。

需要说明的是,步骤510之前,图5的方法还可包括:内存控制器确定第五写请求集合;根据写请求的类型标识,确定第五写请求集合中的写请求均不是日志写请求。上述写请求的类型标识可以是在写请求中添加的除写地址、写数据之外的新的标识字段,或者利用现有的写请求中的未被使用的字段来标识。具体而言,假设计算机系统是64位的系统,为了方便进程虚拟地址空间的映射,写请求中的写地址的总位数一般设置为64,但实际中,写地址的有效位最多为48位,剩余的16位中的部分或全部就可以作为上述写请求的类型标识。

520、确定第六写请求集合,其中,第六写请求集合中的写请求为提交写请求或中断写请求,第六写请求集合中的写请求在写请求队列中位于第三内存栅之后,第六写请求集合中的写请求与第五写请求集合中的写请求通过第三内存栅相隔,且第六写请求集合中的写请求的数量与第五写请求集合中的写请求的数量的和不大于内存中未被占用的存储单元的数量。

或者,上述第六写请求集合中的写请求在写请求队列中位于第三内存栅之后,且与第五写请求集合中的写请求通过一个内存栅相隔。

530、将第五写请求集合中的写请求和第六写请求集合中的写请求并行发送至内存的未被占用的不同存储单元中。

本发明实施例中,内存控制器在不破坏事务的一致性的前提下,将提交写请求或中断写请求跨内存栅调度,提升了内存中的能够并行处理写请求的存储单元的利用率,从而提高了写请求的处理效率。

需要说明的是,图5的实施方式与图3的实施方式可以是相互独立的实施方式,也可以集成在一个方案中。图2中的调度方式3是上述两种实施方式集成在一个方案中的一个例子。具体而言,在第一个调度周期,内存控制器会将位于b1之前的L0和L1发送至NVM内存的不同bank中。在第二个调度周期,内存控制器采用图3对应的实施方式,将C0以及与C0通过b2相隔的日志写请求L2分别发送至bank1和bank2中。接着,在第三个调度周期,由于D0不是日志写请求,内存控制器采用图5对应的实施方式,将D0与提交写请求C1分别发送至bank1和bank2中。最后,在第四个调度周期,单独调度D1。通过比较调度方式1和调度方式2,可以发现调度方式2节省了一个调度周期的时间,从而提升了写请求的处理效率。应注意,虽然采用调度方式2和调度方式3最终获得的结果一致,但将C1和D0合并在一起调度所基于的规则是不同的。

可选地,作为一个实施例,步骤320可包括:从内存的未被占用的存储单元中确定第一存储单元集合,其中,第一存储单元集合中的存储单元用于接收除第一写请求集合中的写请求之外的写请求(或者,第一存储单元集合中的存储单元未被用于接收第一写请求集合中的写请求);从写请求队列中位于第一内存栅之后的写请求中选择待发送至第一存储单元集合中的存储单元的日志写请求,其中,选择出的日志写请求构成第二写请求集合。

应理解,根据写请求中的地址,可以确定该写请求被发送至哪个存储单元。上述从内存的未被占用的存储单元中选取第一存储集合可以包括:根据第一写请求集合中的写请求的地址,从内存的未被占用的存储单元中选取第一存储单元集合。以bank为例,假设当前未被占用的bank为4个bank,分别是bank1、bank2、bank3和bank4,第一写请求集合包括2个写请求,分别是写请求1和写请求2,其中,根据写请求1的地址可以确定写请求1准备发送至bank1,根据写请求2的地址可以确定写请求2准备发送至bank2。那么上述第一存储单元集合就包括bank3和bank4。上述从写请求队列中的位于第一内存栅之后的写请求中选取待发送至第一存储单元集合中的存储单元的日志写请求可包括:根据写请求队列中的位于第一内存栅之后的写请 求的地址和类型标识,选取待发送至第一存储单元集合中的存储单元的日志写请求。沿用上面的例子,从第一内存栅之后选取准备发送至bank3的1个日志写请求,以及准备发送至bank4的1个日志写请求。选取出的这两个写请求就构成了上述第二写请求集合。

应理解,上文中的“第一”、“第二”、“第三”、“第四”、“第五”仅仅是为了清楚地描述不同的实施例而引入的标识,并非要对次序进行限定。例如,第一内存栅和第二内存栅仅仅是为了区分这两个内存栅,并非要限定第二内存栅是写请求队列中的第二个内存栅,或者第二内存栅位于第一内存栅之后。

下面结合具体例子,更加详细地描述本发明实施例。应注意,图3的例子仅仅是为了帮助本领域技术人员理解本发明实施例,而非要将本发明实施例限于所例示的具体数值或具体场景。本领域技术人员根据所给出的图3的例子,显然可以进行各种等价的修改或变化,这样的修改或变化也落入本发明实施例的范围内。

上文结合图1至图5,详细描述了根据本发明实施例的写请求的处理方法。下文结合图6至图7,详细描述根据本发明实施例的内存控制器,应理解,图6或图7中描述的内存控制器能够实现图1至图5中由内存控制器执行的各个步骤,为了简洁,适当省略重复的描述。

图6是本发明实施例的内存控制器的示意性框图。内存控制器位于计算机系统中,在内存控制器600中缓存有写请求队列,写请求队列中包含有待调度的事务的写请求,计算机系统中的内存为NVM,且内存包括多个存储单元,内存控制器600包括:

比较模块610,用于确定待调度的第一写请求集合中的写请求的数目小于内存中的未被占用的存储单元的数目,其中,第一写请求集合中的写请求与写请求队列中的其他写请求之间有第一内存栅,第一写请求集合中的写请求位于第一内存栅之前;

确定模块620,用于确定第二写请求集合,其中,第二写请求集合中的写请求为日志写请求,第二写请求集合中的写请求在写请求队列中位于第一内存栅之后,且第二写请求集合中的写请求的数量与第一写请求集合中的写请求的数量的和不大于内存中未被占用的存储单元的数量;

处理模块630,用于将第一写请求集合中的写请求和第二写请求集合中 的写请求并行发送至内存的未被占用的不同存储单元中。

本发明实施例中,第二写请求集合中的写请求均为日志写请求,且与第一写请求集合中的写请求通过第一内存栅相隔,相当于将第一内存栅相隔之后的日志写请求跨过第一内存栅优先调度,这样能够提高内存中的能够并行接收写请求的存储单元的利用率,从而提高写请求的处理效率。

可选地,作为一个实施例,比较模块610,还用于确定待调度的第三写请求集合中的写请求的数目小于内存中的未被占用的存储单元的数目,其中,第三写请求集合中的写请求与写请求队列中的其他写请求之间有第二内存栅,第三写请求集合中的写请求位于第二内存栅之前;确定模块620,还用于确定第四写请求集合,其中,第四写请求集合中的写请求包括提交写请求或中断写请求,第四写请求集合中的写请求在写请求队列中位于第二内存栅之后,第四写请求集合中的写请求与第三写请求集合中的写请求通过第二内存栅相隔,第四写请求集合中的每个写请求与第三写请求集合中的每个写请求均为不同事务的写请求,且第四写请求集合中的写请求的数量与第三写请求集合中的写请求的数量的和不大于内存中未被占用的存储单元的数量;处理模块630,还用于将第三写请求集合中的写请求和第四写请求集合中的写请求并行发送至内存的未被占用的不同存储单元中。

可选地,作为一个实施例,确定模块620具体用于根据写请求队列中的写请求携带的事务标识,确定第四写请求集合,事务标识用于指示写请求所属的事务。

可选地,作为一个实施例,比较模块610,还用于确定待调度的第五写请求集合中的写请求的数目小于内存中的未被占用的存储单元的数目,其中,第五写请求集合中的写请求与写请求队列中的其他写请求之间有第三内存栅,第五写请求集合中的写请求位于第三内存栅之前,第五写请求集合中的写请求均不是日志写请求;确定模块620,还用于确定第六写请求集合,其中,第六写请求集合中的写请求为提交写请求或中断写请求,第六写请求集合中的写请求在写请求队列中位于第三内存栅之后,第六写请求集合中的写请求与第五写请求集合中的写请求通过第三内存栅相隔,且第六写请求集合中的写请求的数量与第五写请求集合中的写请求的数量的和不大于内存中未被占用的存储单元的数量;处理模块630,还用于将第五写请求集合中的写请求和第六写请求集合中的写请求并行发送至内存的未被占用的不同 存储单元中。

可选地,作为一个实施例,确定模块620具体用于从内存的未被占用的存储单元中确定第一存储单元集合,其中,第一存储单元集合中的存储单元用于接收除第一写请求集合中的写请求之外的写请求;从写请求队列中位于第一内存栅之后的写请求中选择待发送至第一存储单元集合中的存储单元的日志写请求,其中,选择的日志写请求构成第二写请求集合。

可选地,作为一个实施例,存储单元包括内存中的bank。

图7是本发明实施例的写请求的处理方法的示意性流程图。图7的方法由计算机系统中的内存控制器来执行,如图1中的计算机系统100中的内存控制器120,在内存控制器中缓存有写请求队列,写请求队列中包含有待调度的事务的写请求,事务的写请求用于向计算机系统的内存中写入数据,内存控制器可用于将写请求队列中的写请求发送至内存中(换句话说,内存控制器可用于将写请求队列中的写请求的数据写入内存中),内存为NVM,且内存包括多个存储单元,该存储单元例如可以是bank、rank、channel等。

需要说明的是,事务的写请求可包括日志写请求、日志控制写请求以及数据写请求。上述日志写请求也可称为日志数据的写请求,日志写请求可用于向内存中写入事务的日志数据。上述日志控制写请求也可称为日志控制数据的写请求,日志控制写请求可用于向内存中写入事务的日志控制数据,如提交数据,或中断数据。上述数据写请求可用于向内存中写入除事务的日志数据和日志控制数据之外的数据。

内存控制器中缓存有写请求队列,也可称为写请求序列,写请求队列可包括一个或多个事务的写请求。当写请求队列中包括多个事务的写请求时,每个事务的写请求在队列中的排列次序满足该事务的日志写请求位于该事务的提交写请求(或中断写请求)之前,该事务的提交写请求位于该事务的数据写请求之前,且每个事务的不同类型的写请求之间通过内存栅相隔。但多个事务的写请求之间可以没有顺序要求,换一种表达方式,多个事务的写请求可以相互交叉排列在写请求队列中。内存控制器可通过batch操作(或称写batch)向内存发送写请求队列中的写请求,该batch操作可调度的写请求需要综合考虑内存中的当前未被占用的bank(例如,有些bank可能被读请求占用)的数目,以及写请求队列中的内存栅的位置。举例说明,当前未被占用的bank数为3,但写请求队列前2个写请求之后有一个内存栅,那么 按照现有技术的调度方式,此时最多能调度2个写请求,即最多能将2个写请求并行发送至内存的2个bank中。

图7的方法包括:

710、确定写请求队列中的第一写请求为日志写请求,其中第一写请求在写请求队列中位于第二写请求之后,且第一写请求与第二写请求通过内存栅相隔;

720、将第一写请求和第二写请求并行发送至内存的未被占用的不同存储单元中。

本发明实施例中,第二写请求为日志写请求,且与第一写请求通过内存栅相隔,相当于将该内存栅之后的日志写请求跨过该内存栅优先调度,这样能够提高内存中的能够并行接收写请求的存储单元的利用率,从而提高写请求的处理效率。

可选地,作为一个实施例,步骤710可包括:根据第一写请求中的类型标识,确定第一写请求为日志写请求,其中,第一写请求的类型标识用于指示第一写请求为日志写请求。上述写请求的类型标识可以是在写请求中添加的除写地址、写数据之外的新的标识字段,或者利用现有的写请求中的未被使用的字段来标识。具体而言,假设计算机系统是64位的系统,为了方便进程虚拟地址空间的映射,写请求中的写地址的总位数一般设置为64,但实际中,写地址的有效位最多为48位,剩余的16位中的部分或全部就可以作为上述写请求的类型标识。

图8是本发明实施例的内存控制器的示意性框图。在图8的内存控制器800位于计算机系统中,内存控制器800中缓存有写请求队列,写请求队列中包含有待调度的事务的写请求,内存控制器800用于将写请求队列中的写请求发送至内存中,计算机系统中的内存为NVM,内存包括多个能够并行接收写请求的存储单元,内存控制器800包括:

确定单元810,用于确定写请求队列中的第一写请求为日志写请求,其中,第一写请求在写请求队列中位于第二写请求之后,且第一写请求与第二写请求通过内存栅相隔;

处理单元820,用于将第一写请求和第二写请求并行发送至内存的未被占用的不同存储单元中。

本发明实施例中,第二写请求为日志写请求,且与第一写请求通过内存 栅相隔,相当于将该内存栅之后的日志写请求跨过该内存栅优先调度,这样能够提高内存中的能够并行接收写请求的存储单元的利用率,从而提高写请求的处理效率。

可选地,作为一个实施例,确定单元具810体用于:根据第一写请求中的类型标识,确定第一写请求为日志写请求,其中,类型标识用于指示第一写请求为日志写请求。

可选地,作为一个实施例,存储单元包括内存中的bank。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

本发明实施例还提供一种数据处理的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令用于执行前述任意一个方法实施例所述的方法流程。本领域普通技术人员可以理解,前述的存储介质包括:U盘、移动硬盘、磁碟、光盘、随机存储器(Random-Access Memory,RAM)、固态硬盘(Solid State Disk,SSD)或者非易失性存储器(non-volatile memory)等各种可以存储程序代码的非短暂性的(non-transitory)机器可读介质。

需要说明的是,本申请所提供的实施例仅仅是示意性的。所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。在本发明实施例、权利要求以及附图中揭示的特征可以独立存在也可以组合存在。在本发明实施例中以硬件形式描述的特征可以通过软件来执行,反之亦然。在此不做限定。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1