一种基于提前更新的数据一致性实现方法

文档序号:1324098 发布日期:2020-07-14 浏览:11次 >En<

阅读说明:本技术 一种基于提前更新的数据一致性实现方法 (Data consistency implementation method based on advanced updating ) 是由 顾晓峰 李青青 虞致国 魏敬和 于 2020-03-24 设计创作,主要内容包括:本发明公开了一种基于提前更新的数据一致性实现方法,属于集成电路技术领域。所述方法包括通过为每个L1 DCache和其他各级Cache的Cacheline增设一个计数器,记录含脏数据副本的Cacheline的访问情况,从而在存储器空闲的时候就将Cache中的含有脏数据的数据副本提前更新至下一层存储器,而不是等到DMA传输数据前才刷新Cache,从而缓解了DMA传输数据前的Cache刷新操作带来的延时问题,充分调动存储器,提高了DMA传输系统的效率。(The method comprises the step of adding a counter for each L1 DCache and other cachelines of all levels of caches, and recording the access condition of the Cacheline containing dirty data copies, so that the data copies containing dirty data in the caches are updated to the next layer of memory in advance when the memory is idle, instead of refreshing the caches until the data is transmitted by DMA, thereby relieving the delay problem caused by the Cache refreshing operation before the data is transmitted by DMA, fully transferring the memory, and improving the efficiency of a DMA transmission system.)

一种基于提前更新的数据一致性实现方法

技术领域

本发明涉及一种基于提前更新的数据一致性实现方法,属于集成电路技术领域。

背景技术

目前主流处理器多采用层次化的存储系统,即在处理器和主存储器(下称“主存”)之间增加多级Cache(高速缓冲存储器),以弥补CPU与主存之间的性能差距。

Cache中存储主存的部分数据副本,通常采用写回法或写直达法两种写策略来维护多级Cache的数据一致性。前者只有在含有脏的Cacheline被替换或无效时,才将该脏数据副本写回主存。这种策略减少了主存的访问次数,提高了系统效率,但增加了Cache一致性的维护难度。写直达法在CPU写命中Cache时,同时更新主存中的数据。该策略虽然有效地保证Cache一致性,但增加了总线的数据传输量,对主存的写操作延时较长,从而影响系统的整体性能。故现代处理器多采用写回法。

DMA(Direct Memory Access,直接存储器存取)是一种高效的数据传输方式,它采用DMA控制器控制数据在I/O设备和主存储器之间、外围设备之间直接进行传输,无需CPU的干预。然而DMA传输同时也引入了数据一致性问题,目前研究人员主要从软件和硬件两个层面来解决DMA传输与各级Cache、主存储器的数据一致性问题。但无论是软件还是硬件解决方案,都需要在DMA传输数据前刷新Cache。依据DMA一次传输的数据量大和以及主存储器读写延时大的特点,DMA传输前的Cache刷新操作需要花费较长时间,无法充分发挥DMA的效能。

发明内容

为了解决目前存在的DMA传输前的Cache刷新操作需要花费较长时间,无法充分发挥DMA的效能,本发明提供了一种基于提前更新的数据一致性实现方法,所述技术方案如下:

一种数据一致性实现方法,所述方法应用于多核处理器系统中,包括:为多核处理器系统中每个L1 DCache和其他各级Cache的Cacheline增设一个计数器,记录含脏数据副本的Cacheline的访问情况;在L1 DCache和其他各级Cache空闲的时候,将其中的含有脏数据的数据副本提前更新至下一级存储器。

可选的,所述多核处理器系统包含至少两个CPU,所述在L1 DCache和其他各级Cache空闲的时候,将其中的含有脏数据的数据副本提前更新至下一层存储器,包括:

步骤1、第一CPU请求访问某数据副本,所述第一CPU为多核处理器系统中任一CPU;

步骤2、当某Cache空闲时,比较各Cacheline对应的计数器,向下一级存储器请求主动写回计数器数值最大的Cacheline;同时,若同级另一Cache向下一级存储器发起访问请求且非主动写回时,则下一级存储器优先处理同级另一Cache的访问请求,其中某Cache指多核处理器系统中任一L1 DCache或其他各级Cache;

步骤3、Cache接收写回响应,主动将计数器数值最大的Cacheline写回下一级存储器;若同级其他Cache中也含有该Cacheline的数据副本,其对应的Cacheline的脏位置0,状态依据一致性协议做出相应转变;

步骤4、DMA发起访问请求;

步骤5、第一CPU接收DMA的访问请求,开始刷新Cache,等待第一CPU将相应的含脏数据副本刷新至主存中,返回响应;

步骤6、DMA接收第一CPU发送的响应信息,开始传输数据。

可选的,所述步骤5中,DMA发起访问请求前第一CPU已提前将部分含脏的数据副本写回至主存。

可选的,所述步骤1中:

当第一CPU发生写缺失时,等待第一CPU完成写操作后,该Cacheline对应的计数器置1,其他含脏数据的Cacheline对应的计数器加1。

可选的,所述步骤1中:

当第一CPU发生写命中时,Cacheline中的数据副本可能存在两种状态:与下一级存储一致,以及与下一级存储不一致,其中与下一级存储不一致即表示Cacheline中的数据副本中含有脏数据:

若Cacheline中的数据副本与下一级存储一致,则等待第一CPU完成写操作后,该Cacheline对应的计数器置1,其他含脏数据的Cacheline对应的计数器加1;

若Cacheline中的数据副本中含有脏数据,则等待第一CPU完成写操作后,该Cacheline对应的计数器置1,其他计数器的数值若小于被写命中Cacheline对应计数器原来的值,则加1,其他计数器的数值则保持不变。

可选的,所述步骤1中:

当第一CPU发生读命中时:

若该Cacheline中含有脏数据,则该Cacheline对应的计数器减1,比该计数器原来的值小1的计数器的数值加1,其他计数器的数值则保持不变;当Cacheline对应的计数器的数值小于等于2时,若CPU请求读取该Cacheline,其计数器的数值保持不变;

若该数据副本与下一级存储一致,则第一CPU完成读操作后,本地所有Cacheline对应的计数器数值不变。

可选的,所述步骤1中:

当第一CPU发生读缺失时:

当该数据副本存在其他同级Cache中且该Cacheline含有脏数据时,若所述多核处理器系统可共享含脏的数据副本,则第一CPU从其他同级Cache中读取数据副本,本地Cache中该Cacheline的计数器置1,其他含脏Cacheline的计数器数值加1;若所述多核处理器系统不可共享含脏的数据副本,则第一CPU完成读操作后,本地Cache中该Cacheline的计数器设为初始值0,其他含脏Cacheline的计数器数值保持不变;

若该数据副本存在其他同级Cache中且与下一级存储一致,或仅存在低级存储器中,则第一CPU完成读操作后,本地Cache中该Cacheline的计数器设为初始值0,其他含脏Cacheline的计数器数值保持不变。

可选的,所述多核处理器系统中任一L1 DCache和其他各级Cache中含脏数据的Cacheline被写回或被无效时,该Cacheline对应的计数器清零,其他含脏数据的Cacheline对应的计数器数值若大于该Cacheline对应计数器原来的值,则减1,其余计数器的数值保持不变。

可选的,所述为多核处理器系统中每个L1 DCache和其他各级Cache的Cacheline增设的计数器的可记录的最大数值为当前Cache的Cacheline数量N,计数器的位宽为[log2N-1,0]。

本发明还提供一种多核处理器系统,所述多核处理器系统采用上述方法实现数据一致性,所述多核处理器系统包含至少两个CPU,实现过程中,为多核处理器系统中每个L1DCache和其他各级Cache的Cacheline增设一个计数器,记录含脏数据副本的Cacheline的访问情况;在L1 DCache和其他各级Cache空闲的时候,将Cache中的含有脏数据的数据副本提前更新至下一层存储器。

本发明还提供上述数据一致性实现方法和/或上述多核处理器系统在集成电路技术领域中的应用。

本发明有益效果是:

本发明通过为每个L1 DCache和其他各级Cache的Cacheline增设一个计数器,记录含脏数据副本的Cacheline的访问情况,从而在存储器空闲的时候,将Cache中的含有脏数据的数据副本提前更新至主存,缓解了DMA传输数据前的Cache刷新操作带来的延时问题,充分调动存储器,提高了DMA传输系统的效率。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明所述的步骤流程图。

图2为实施案例的处理器系统架构图。

图3为实施案例采用的Cache一致性协议状态转换图。

图4为CPU请求写操作流程图。

图5为CPU请求读操作流程图。

图6为CPU0主动写回与CPU1写操作发生冲突流程图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。

基础术语介绍:

ICache,指令高速缓存。

DCache,数据高速缓存。

Cacheline,缓存行。

Cache,高速缓冲存储器,一个Cache通常被分为多个组,每个组由多个Cacheline组成,在多层级存储系统中,Cache存在等级的区分,以L1、L2,…,表示不同等级的Cache,如L1DCache、L2 Cache。

实施例一:

本实施例提供一种基于提前更新的数据一致性实现方法,应用于多核处理器系统中,实现过程中,为每个L1 DCache和其他各级Cache的Cacheline增设一个计数器,记录含脏数据副本的Cacheline的访问情况,提前将含脏数据的副本写回至主存,有效缓解DMA传输数据前的Cache刷新操作带来的延时问题,提高DMA传输系统的效率。

本发明所述的增加的计数器可记录的最大数值为当前Cache的Cacheline数量N,即计数器的位宽为[log2N-1,0]。多核处理器系统中包含至少两个CPU,

参见图1,所述方法包括:

步骤1、第一CPU请求访问某数据副本,所述第一CPU为多核处理器系统中任一CPU。

具体的,当第一CPU发生写缺失时,等待第一CPU完成写操作后,该Cacheline对应的计数器置1,其他含脏数据的Cacheline对应的计数器加1。

当第一CPU发生写命中时,Cacheline中的数据副本存在两种状态:与下一级存储一致,以及与下一级存储不一致(即含有脏数据):

若Cacheline中的数据副本与下一级存储一致,则等待第一CPU完成写操作后,该Cacheline对应的计数器置1,其他含脏数据的Cacheline对应的计数器加1;

若Cacheline中含脏数据,则等待第一CPU完成写操作后,该Cacheline对应的计数器置1,其他计数器的数值若小于被写命中Cacheline对应计数器原来的值,则加1,其他计数器的数值则保持不变。

当第一CPU发生读命中时,Cacheline中的数据副本存在两种状态:与下一级存储一致,以及与下一级存储不一致(即含有脏数据):

若该Cacheline中含有脏数据,则该Cacheline对应的计数器减1,比该计数器原来的值小1的计数器的数值加1,其他计数器的数值则保持不变;当Cacheline对应的计数器的数值小于等于2时,若CPU请求读取该Cacheline,其计数器的数值保持不变;

若该数据副本与下一级存储一致,则第一CPU完成读操作后,本地所有Cacheline对应的计数器数值不变。

当第一CPU发生读缺失时,该数据副本可能存在其他L1 DCache中或仅存在主存储器中。

当该数据副本存在其他同级Cache中且该Cacheline含有脏数据时,若所述多核处理器系统可共享含脏的数据副本,则第一CPU从其他同级Cache中读取数据副本,本地Cache中该Cacheline的计数器置1,其他含脏Cacheline的计数器数值加1;若所述多核处理器系统不可共享含脏的数据副本,则第一CPU完成读操作后,本地Cache中该Cacheline的计数器设为初始值0,其他含脏Cacheline的计数器数值保持不变;

若该数据副本存在其他同级Cache中且与下一级存储一致,或仅存在低级存储器中,则第一CPU完成读操作后,本地Cache中该Cacheline的计数器设为初始值0,其他含脏Cacheline的计数器数值保持不变。

步骤2、当某Cache空闲,即无访问请求时,比较Cache中各Cacheline对应的计数器,向下一级存储器请求主动写回计数器数值最大的Cacheline;同时,若同级另一Cache向下一级存储器发起访问请求且非主动写回时,则下一级存储器优先处理同级另一Cache的访问请求,其中某Cache指多核处理器系统中任一L1 DCache或其他各级Cache。

步骤3、本地Cache接收写回响应,主动将计数器数值最大的Cacheline写回下一级存储器。若同级其他Cache中也含有该计数器数值最大的Cacheline的数据副本,其他Cache对应的Cacheline的脏位置0,状态依据一致性协议做出相应转变。

步骤4、DMA发起访问请求。

步骤5、第一CPU接收DMA的访问请求,开始刷新Cache,等待第一CPU将相应的含脏数据副本刷新至主存中,返回响应。

DMA发起访问请求前第一CPU便已提前将部分含脏的数据副本写回至主存,有效减少了Cache刷新操作带来的延时。

步骤6、DMA接收第一CPU发送的响应信息,开始传输数据。

实施例二:

本实施例提供实施例一所述的一种基于提前更新的数据一致性实现方法在实际中的应用说明,参见图2,具体如下:

本实施例中,硬件设备包含一个多核处理器系统,该多核处理器系统包括CPU0、CPU1、一个二级共享高速缓存(L2 Cache)、总线(Bus)、主存储器(Mem)以及互联结构。其中每个CPU采用哈弗结构,包含一个32kB的指令高速缓存(ICache)和数据高速缓存(DCache)。

其中L1 DCache采用4路组相联的组织结构,其组数为64,Cacheline的大小为128字节,故L1 DCache的脏Cacheline对应的计数器可记录的最大数值N为256。

本实施例基于写回法和写无效策略,采用MSI协议(Modified Shared InvalidProtocol)来维护一致性,其状态描述如下:

M(Modified):表示当前数据副本被修改过,是处理器系统中当前最新的数据,与存储器中的数据副本不一致,且仅在当前Cache中存在唯一的副本,当发生替换时需要写回存储器;

S(Shared):表示当前数据副本为共享状态,与存储器中的数据副本一致,并可能同时存在多个Cache中,当发生替换或改写时,无需写回存储器;

I(Invalid):表示当前数据副本无效。

本申请所采用的MSI一致性协议的状态转换如图3所示。

参见图4,CPU0请求对某Cacheline进行写操作:

当CPU0发生写缺失,且该Cacheline存在CPU1中的L1 DCache中时,则其状态为M。若该Cacheline状态为M,CPU1将该Cacheline写回下一级存储器,并将CPU1中该Cacheline状态修改为I,该Cacheline之前对应的计数器清零,其他M状态的Cacheline对应的计数器数值若大于该Cacheline原来对应的计数器数值,则减1,其余计数器的数值则保持不变;同时CPU0向本地L1 DCache申请一个Cacheline,完成写操作后,将该Cacheline状态更新为M,其对应的计数器的值置1,本地L1 DCache中其他M状态的Cacheline对应的计数器数值加1。

当CPU0发生写缺失,且该Cacheline存在L2 Cache或主存中时,CPU0向本地L1DCache申请一个Cacheline,完成写操作后,将该Cacheline状态更新为M,其对应的计数器的值置1,本地L1 DCache中其他M状态的Cacheline对应的计数器数值加1。

当CPU0发生写命中,则该Cacheline的状态可能为M或S。若该Cacheline状态为M,CPU0直接对该Cacheline进行写操作,并将该Cacheline对应的计数器置1,其他计数器的数值若小于被写命中Cacheline对应计数器原来的值,则加1,其余计数器的数值则保持不变。若该Cacheline状态为S,CPU0直接对该Cacheline进行写操作,更新状态为M,并将该Cacheline对应的计数器置1,其他计数器的数值则加1,同时CPU1无效该Cacheline,将CPU1中L1 DCache中对应的Cacheline状态更新为I。

参见图5,CPU0请求对某Cacheline进行读操作:

当CPU0发生读命中,则该Cacheline的状态可能为M或S。若该Cacheline状态为M,CPU0对该Cacheline进行读操作后,Cacheline的状态保持不变,并将该Cacheline对应的计数器减1,比该计数器原来的值小1的计数器的数值加1,其他计数器的数值则保持不变。当Cacheline对应的计数器的数值小于等于2时,若CPU0请求读取该Cacheline,其计数器的数值保持不变。若该Cacheline状态为S,CPU0仅进行读操作,不改变任何Cacheline的状态和对应的计数器的值。

当CPU0发生读缺失,且该Cacheline存在CPU1中的L1 DCache中时,其状态为M。CPU1将该Cacheline写回下一级存储器,并更新状态为S,同时将该Cacheline之前对应的计数器清零,其他M状态的Cacheline对应的计数器数值若大于该Cacheline原来对应的计数器数值,则减1,其他计数器的数值则保持不变;CPU0向本地L1 DCache申请一个Cacheline,完成读操作后,将该Cacheline状态更新为S,不改变其他任何Cacheline的状态和对应的计数器的值。

当CPU0发生读缺失,且该Cacheline存在L2 Cache或主存储器中,则CPU0向本地L1DCache申请一个Cacheline,载入数据后,更新该Cacheline的状态为S,且不改变其他任何Cacheline的状态和对应的计数器的值。

参见图6,当CPU0的L1 DCache空闲,即无访问请求时,比较各Cacheline对应的计数器,请求主动写回计数器数值最大的Cacheline。同时,若CPU1的L1 DCache向L2Cache发起访问请求且非主动写回时,则L2 Cache优先处理CPU1的访问请求。

本发明提供的基于提前更新的数据一致性实现方法,在多核系统中,当同级有多个Cache空闲时,为了避免多个Cache同时申请主动写回导致的死锁,采用轮询仲裁机制,依次将含脏的数据副本写回下一级存储器。

在本申请实施例二中,当两个L1 DCache同时申请主动写回时,依据轮询仲裁机制,依次返回CPU0和CPU1中L1 DCache主动申请写回的响应,CPU0和CPU1依次写回本地L1DCache中计数器值最大的M状态Cacheline。

本发明所述的一种基于提前更新的数据一致性实现方法,在多核系统中,当CPU0的L1 DCache空闲,向L2 Cache请求主动写回计数器数值最大的Cacheline,若同时CPU1向L2 Cache发起访问请求且非主动写回时,则L2 Cache优先处理CPU1的访问请求。

本发明通过为每个L1 DCache和其他各级Cache的Cacheline增设一个计数器,记录含脏数据副本的Cacheline的访问情况,从而在L1 DCache和其他各级Cache的Cacheline空闲的时候就将Cache中部分含有脏数据的数据副本提前更新至主存,而不是等到DMA传输数据前才开始刷新Cache,从而缓解了DMA传输数据前的Cache刷新操作带来的延时问题,充分调动存储器,提高了DMA传输系统的效率。

本发明实施例中的部分步骤,可以利用软件实现,相应的软件程序可以存储在可读取的存储介质中,如光盘或硬盘等。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

15页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:计算机代码完整性检查

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类