CN107506139B - 一种面向相变存储器的写请求优化装置 - Google Patents

一种面向相变存储器的写请求优化装置 Download PDF

Info

Publication number
CN107506139B
CN107506139B CN201710693791.4A CN201710693791A CN107506139B CN 107506139 B CN107506139 B CN 107506139B CN 201710693791 A CN201710693791 A CN 201710693791A CN 107506139 B CN107506139 B CN 107506139B
Authority
CN
China
Prior art keywords
cache
write
request
cache line
read
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.)
Expired - Fee Related
Application number
CN201710693791.4A
Other languages
English (en)
Other versions
CN107506139A (zh
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.)
Shanghai Jiaotong University
Original Assignee
Shanghai Jiaotong University
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 Shanghai Jiaotong University filed Critical Shanghai Jiaotong University
Priority to CN201710693791.4A priority Critical patent/CN107506139B/zh
Publication of CN107506139A publication Critical patent/CN107506139A/zh
Application granted granted Critical
Publication of CN107506139B publication Critical patent/CN107506139B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0616Improving the reliability of storage systems in relation to life time, e.g. increasing Mean Time Between Failures [MTBF]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

一种面向相变存储器的写请求优化装置,包括脏数据标记模块、访存请求生成模块、访存请求调度模块和访存请求执行模块。当最后一级缓存向内存写入脏数据时,若脏数据与内存中的原数据不相同,则产生部分预写请求,访存请求调度模块将部分预写请求发送至访存请求执行模块,访存请求执行模块利用部分预写请求的写入数据执行SET操作。由于需要SET操作的位置已经预先被部分预写请求执行SET操作了,使得,访存请求执行模块真正执行写请求时,只会执行RESET操作,从而大幅减少了写请求的执行时间,与此同时,部分预写请求只会对脏字进行SET操作,而非整个脏的内存行,从而极大减少对相变存储器的写操作次数,降低对相变存储器介质寿命的影响。

Description

一种面向相变存储器的写请求优化装置
技术领域
本发明涉及计算机系统结构技术领域,具体涉及一种面向相变存储器的写请求优化装置。
背景技术
在计算机体系结构设计中,相变存储器介质存在两大缺陷:第一,写延迟远远大于读延迟,而写速度的低下极大的影响了存储器的总体性能;第二,相比较动态随机存储器,相变存储器的写耐久性较差,导致相变存储器的寿命较短。
因此,拙劣的写请求处理方法将导致低下的系统吞吐性能,亦或者进一步缩短相变存储器的寿命。
发明内容
本申请提供一种面向相变存储器的写请求优化装置,包括脏数据标记模块、访存请求生成模块、访存请求调度模块和访存请求执行模块;
所述脏数据标记模块包括第一级缓存和第二级缓存,所述访存请求生成模块包括最后一级缓存;
所述第一级缓存执行以下操作:
接收CPU的读写请求,所述读写请求含有读写物理地址;
根据所述读写物理地址中第一级缓存规定的组索引确定第一级缓存中的缓存行组,在所述缓存行组中逐一遍历查找与所述读写物理地址中第一级缓存规定的标志相同的缓存行,若查找到某一缓存行且查找到的缓存行的有效位置位,则根据所述读写物理地址中的缓存块的偏移值将数据从所述缓存行读出或向所述缓存行中写入数据,且向所述缓存行中写入数据时将所述缓存行中相应字的脏位置位;若未查找到相同标志的缓存行或查找到的缓存行的有效位未置位,所述第一级缓存向所述第二级缓存发出一个读请求;第二级缓存接受读请求,并将新数据发送至第一级缓存中时,若所述缓存行组中没有空闲的缓存行,则所述第一级缓存选择所述缓存行组中的某一缓存行,并将其内容清空;若选择的缓存行中的脏位被置位时,所述第一级缓存向所述第二级缓存发出一个写请求,所述写请求将选择的缓存行中的缓存块写回所述第二级缓存,写回后,将新数据写入到所述缓存行中,接着,所述第一级缓存重新执行CPU的读写请求;
所述第二级缓存执行以下操作:
所述第二级缓存接收所述第一级缓存发出的读写请求时,根据读写物理地址中第二级缓存规定的组索引确定第二级缓存中的缓存行组,在所述缓存行组中逐一遍历查找与所述读写物理地址中第二级缓存规定的标志相同的缓存行,若查找到某一缓存行且查找到的缓存行的有效位置位,则根据所述读写物理地址中的缓存块的偏移值将数据从所述缓存行读出或向所述缓存行中写入数据,且向所述缓存行中写入数据时更新所述缓存行中的脏位;若未查找到相同标志的缓存行或查找到的缓存行的有效位未置位,所述第二级缓存向所述最后一级缓存发出一个读请求;最后一级缓存接受读请求,并将新数据发送至第二级缓存中时,若所述缓存行组中没有空闲的缓存行,则所述第二级缓存选择所述缓存行组中的某一缓存行,若选择的缓存行中的脏位被置位时,所述第二级缓存向所述最后一级缓存发出一个写请求,所述写请求将选择的缓存行中的缓存块写回所述最后一级缓存,写回后,将新数据写入到所述缓存行中,接着,所述第二级缓存重新执行第一级缓存的读写请求;
所述访存请求生成模块执行以下操作:
所述最后一级缓存接收所述第二级缓存发出的读写请求时,根据读写物理地址中最后一级缓存规定的组索引确定最后一级缓存中的缓存行组,在所述缓存行组中逐一遍历查找与所述读写物理地址中最后一级缓存规定的标志相同的缓存行,若查找到某一缓存行且查找到的缓存行的有效位置位,则根据所述读写物理地址中的缓存块的偏移值将数据从所述缓存行读出或向所述缓存行中写入数据,且向所述缓存行中写入数据时更新所述缓存行中的脏位,判断所述缓存行中更新后的脏位与原脏位是否相同,若不同,产生部分预写请求,并将其发送至访存请求调度模块;若未查找到相同标志的缓存行或查找到的缓存行的有效位未置位,所述最后一级缓存向所述访存请求调度模块发出一个访存读请求;若所述缓存行组中没有空闲的缓存行,则所述最后一级缓存选择所述缓存行组中的某一缓存行,若选择的缓存行中的脏位被置位时,所述最后一级缓存向所述访存请求调度模块发出一个访存写请求,所述访存写请求将选择的缓存行中的缓存块写回相变存储器中,写回后,所述最后一级缓存重新执行第二级缓存的读写请求;
所述访存请求调度模块执行以下操作:
所述访存请求调度模块包括读队列、写队列和部分预写队列,所述访存请求调度模块根据预设的优先级将所述读队列、写队列和部分预写队列发送至所述访存请求执行模块;
所述访存请求执行模块执行以下操作:
若接收到读请求,根据读请求中的内存行索引,将相应的内存行数据发送到所述最后一级缓存中;
若接收到写请求,根据写请求中的内存行索引,将写请求中的数据写入相应的内存行;
若接收到部分预写请求,根据预写请求中的内存行索引,找到相应的内存行,根据部分预写请求的写入数据对内存行中相应的字执行SET操作或不执行任何操作。
一种实施例中,所述写请求中还包括写数据的脏位信息,所述向缓存行中写入数据时更新缓存行中的脏位的具体操作是:将写数据的脏位和缓存行中原脏位进行位或操作,将位或的结果更新缓存行中的原脏位。
一种实施例中,所述部分预写请求的写入数据根据最后一级缓存的缓存行中的更新后的脏位与原脏位的异或操作结果进行确定。
一种实施例中,所述预设的优先级为:
优先将读队列发送至访存请求执行模块;
当写请求数据占写队列的80%空间时,优先将所有的写请求发送至访存请求执行模块;
当读队列为空且写队列不为空时,将一个写请求发送至访存请求执行模块;
当读队列和写队列均为空时,将一个部分预写请求发送至访存请求执行模块;
当访存请求执行模块执行部分预写请求时,接收到一个读请求时,暂停该部分预写请求的执行。
一种实施例中,所述第二级缓存和最后一级缓存的读写物理地址为所述CPU 读写请求中的读写物理地址中缓存块无偏移的读写物理地址。
一种实施例中,所述部分预写请求的物理地址为所述第二级缓存的读写物理地址先右移6位,再左移6位获得。
依据上述实施例的写请求优化装置,由于最后一级缓存写入数据时,若写入数据后更新的脏位与原脏位不相同,则产生部分预写请求,访存请求调度模块将部分预写请求发送至访存请求执行模块,访存请求执行模块利用部分预写请求的写入数据执行SET操作,因为需要SET操作的位置已经预先被部分预写请求执行SET操作了,使得,访存请求执行模块真正执行写请求时,只会执行 RESET操作,从而在幅减少了写请求的执行时间,与此同时,部分预写请求只会对脏字进行SET操作,而非整个脏的内存行,极大减少对相变存储器的写操作次数,降低对相变存储器介质寿命的影响。
附图说明
图1为缓存结构示意图;
图2为写请求优化装置示意图;
图3为脏数据标记模块执行程序示意图;
图4为访存请求生成模块执行程序示意图;
图5为访存请求调度模块执行程序示意图;
图6为访存请求执行模块执行程序示意图。
具体实施方式
下面通过具体实施方式结合附图对本发明作进一步详细说明。
本申请中用到的术语定义如下:
Read Request:读请求,用于读取相变存储器中的数据。
Write Request:写请求,用于向相变存储器中写入数据,一般情况下,一次写请求的数据长度为512位或者更大。
RESET:对相变存储器的一个存储单元进行写“0”。
SET:对相变存储器的一个存储单元进行写“1”。
PCM:Phase Change Memory,相变存储器,其断电后信息不丢失,可字节寻址。相比较DRAM,PCM的寿命有限且写速度较慢。在PCM中,SET操作的时间是RESET操作时间的4至8倍,由于一次写请求包含对512个存储单元 (或更多)进行并行的写操作,概率上,SET操作几乎肯定存在于这512个同步写操作中,因此,一次写请求的时间往往等于SET操作的时间。
CPU:Central Processing Unit,中央处理器,是计算机的运算核心和控制核心,可以从缓存中读写数据。
Cache:缓存,用于保存相变存储器中的部分数据,以便CPU快速访问。
在计算机系统架构中,一般包括三级Cache,:L1-Cache、L2-Cache以及LLC。
不同在于存储容量与读写速度不同,但缓存结构一致。
L1-Cache:第一级缓存,最靠近CPU。
L2-Cach:第二级缓存。
LLC:Last Level Cache,最后一级缓存,当CPU所请求的数据不在LLC时,会生成相应的访存请求,并将其发送到内存控制器中。
Word:字,CPU一次可以处理的数据量。在64位系统中,其长度为8字节。
Cache Block:缓存块,用于存储数据,一个Block的长度为26字节,即8个 Word。
Cache Line:缓存行,是各级缓存的基本存储单元,含有一个缓存块Cache Block以及相应的管理控制信息。各级缓存和内存之间进行数据交换时,按照8 个Word进行。
Memory Line:内存行,包含8个Word。和Cache Line中的Block相对应, LLC从相变存储器读出一个Memory Line,然后缓存到LLC中的一个Cache Block,或将LLC中一个CacheLine的Block写入到相变存储器中的一个 Memory Line中。
缓存结构如图1所示,Cache被组织成一个有若干缓存行组的数组,每个缓存行组包含若干Cache Line。每个Cache Line包括V Bit、Dirty Bit、Tag Bit以及Cache Block。
V Bit:有效位,为1位,指明这个行是否包含有意义的信息。
Dirty Bit:脏位,当CPU或上一级缓存修改了本级的某个缓存行时,就将属于该Cache Line的Dirty Bit进行置位。由于每个Cache Block是由23个Word (字,长度为23字节)组成,因此Dirty Bit(脏位)的长度为23位,第i(0≤i<23) 位为1(置位)时,代表第i个Word被修改过。该方法可以细粒度的标记Cache Line中的任意一个Word是否被写过。当Dirty Tag置位时,该Cache Line中的内容需要写回到下一级缓存或主存中。
Tag Bit:标志,唯一地指示存储在一个Cache Line中的数据。
Evict操作:当某一级Cache的某个缓存组满了时,需要选择将其中的一个 CacheLine清空,以便存入新的数据。若旧数据被更新,则将该旧数据写入到下一级的Cache或PCM中进行保存。
相变存储器物理地址结构:可以表示为如下结构:
Figure BDA0001378617230000051
其中,Tag Bit的长度为t=m-(s+6),组索引指示Cache中一个缓存行组。
Cache Block偏移:可以表示为如下结构:
Figure BDA0001378617230000061
Word索引指示Cache Line中的一个Word。
Dirty Word:脏字,位于一个Cache Line中的一个字,且该字对应的Dirty Tag 被置位(说明该字被修改过)。
Dirty Cache Line:脏行,该Cache Line中的任意一个或多个字为Dirty Word。
Cache Miss:缓存未命中,该级缓存中没有CPU或上级缓存所请求的数据。
Memory Controller:内存控制器,对LLC发送过来的访存请求进行调度和执行,并将执行的结果传送回LLC。
Read Queue:位于内存控制器中,存放Read Request的缓存队列
Write Queue:位于内存控制器中,存放Write Request的缓存队列
Partial-PreSET Queue:位于内存控制器中,存放Partial-PreSET Request的缓存队列。
访存请求:当LLC发生Cache Miss时或LLC需要将某个Dirty Cache Line 写回相变存储器时或需要发送Partial-PreSET Request时,系统会生成特定的访存请求,并将其发送到Memory Controller。访存请求包括访存类型、访存物理地址以及当访存请求为写请求或Partial-PreSET Request时的写入数据内容。当一个访存请求到达MemoryController时,该请求在物理上以比特流串的形式存在,在逻辑上这个比特流串的部分语义格式如下:
Figure BDA0001378617230000062
访存类型包括Read Request、Write Request以及Partial-PreSET Request。
访存类型标志为“01”时表示该请求为Read Request;访存类型标志为“10”时表示该请求为Write Request;访存类型标志为“11”时表示该请求为Partial-PreSET Request。与此同时,该比特流中还包含长度为64字节的数据(经过数据总线)。
Read-Before-Write Policy:一种磨损均衡策略。写数据之前,先读取相应的PCM介质的内容,若两者相同,则无须更新PCM的内容,从而减少写入次数。该策略是以位(bit)级别进行。与此同时,该策略也是实现Partial-PreSET的一个基础。
Partial-PreSET Request:部分预写请求,通过该方法可以降低Write Request的时延,提高读写性能。
实施例一:
在本发明实施例中,通过设计部分预写请求减少写请求的执行时间,具体的,本例提供一种面向相变存储器的写请求优化装置,其示意图如图2所示,包括脏数据标记模块、访存请求生成模块、访存请求调度模块和访存请求执行模块。
其中,脏数据标记模块包括第一级缓存(L1Cache)与第二级缓存(L2Cache),主要是对CPU的读写请求进行处理;以及当CPU写L1Cache或当L1Cache中的脏数据写回L2Cache时,对相应的Dirty Tag进行置位;且在必要时,将脏的 Cache Line数据写回到LLC。
本例的第一级缓存执行以下操作:接收CPU的读写请求,读写请求含有读写物理地址;根据读写物理地址中第一级缓存规定的组索引确定第一级缓存中的缓存行组,在缓存行组中逐一遍历查找与所述读写物理地址中第一级缓存规定的标志相同的缓存行,若查找到某一缓存行且查找到的缓存行的有效位置位,则根据读写物理地址中的缓存块的偏移值将数据从缓存行读出或向缓存行中写入数据,且向缓存行中写入数据时将缓存行中相应字的脏位置位;若未查找到相同标志的缓存行或查找到的缓存行的有效位未置位,第一级缓存向第二级缓存发出一个读请求;第二级缓存接受读请求,并将新数据发送至第一级缓存中时,若缓存行组中没有空闲的缓存行,则第一级缓存选择缓存行组中的某一缓存行,并将其内容清空;若选择的缓存行中的脏位被置位时,第一级缓存向第二级缓存发出一个写请求,写请求将选择的缓存行中的缓存块写回第二级缓存,写回后,将新数据写入缓存行中,接着,第一级缓存重新执行CPU的读写请求。
第二级缓存执行以下操作:第二级缓存接收第一级缓存发出的读写请求时,根据读写物理地址中第二级缓存规定的组索引确定第二级缓存中的缓存行组,在缓存行组中逐一遍历查找与读写物理地址中第二级缓存规定的标志相同的缓存行,若查找到某一缓存行且查找到的缓存行的有效位置位,则根据读写物理地址中的缓存块的偏移值将数据从缓存行读出或向缓存行中写入数据,且向缓存行中写入数据时更新缓存行中的脏位;若未查找到相同标志的缓存行或查找到的缓存行的有效位未置位,第二级缓存向最后一级缓存发出一个读请求;最后一级缓存接受读请求,并将新数据发送至第二级缓存中时,若缓存行组中没有空闲的缓存行,则第二级缓存选择缓存行组中的某一缓存行,若选择的缓存行中的脏位被置位时,第二级缓存向最后一级缓存发出一个写请求,写请求将选择的缓存行中的缓存块写回所述最后一级缓存,写回后,将新数据写入到缓存行中,接着,第二级缓存重新执行第一级缓存的读写请求。
结合图3及下述的示例描述进一步了解脏数据标记模块的执行程序的具体操作:
当CPU向L1-Cache发出一个读写请求CPU_REQ(含有读写物理地址Addr) 时,L1-Cache首先根据Addr的组索引确定L1-Cache中的一个组,然后遍历该组中的Cache Line的Tag Bit。若缓存行L1_Line_a与Addr的标记相同且 L1_Line_a的V Bit置位,根据Addr中Cache Block偏移值将数据从L1_Line_a 读出或写入数据(CPU一次读写的长度为1个Word),当CPU_REQ为写请求时,需要将L1_Line_a中相应Word的Dirty Bit置位;若没有查到相同的标记或相应的V Bit未置位,则产生一个新的读请求L1_RD_REQ,尝试从L2-Cache 中读出相应Cache Line中的缓存块L2_Block_a到L1-Cache中的某个缓存组中 (根据物理地址Addr),但若该缓存组中没有空闲的Cache Line(即所有Cache Line的Dirty Line都置位),选择该组中的缓存行L1_Line_b,尝试将其内容清空。若L1_Line_b的Dirty Tag被置位时,产生一个写请求L1_WR_REQ,该请求会选择将L1_Line_b中的缓存块L1_Block写回到L2-Cache中,该写请求的内容还包含L1_Line_b的脏位L1_Dirty_Bit,写回后,将L2_Block_a写入 L1_Line_b中,最后在L1-Cache中重新执行读写请求CPU_REQ。
当L1-Cache向L2-Cache发出一个读写请求L1_REQ(含有物理地址Addr,当请求为写请求时,还包含脏位L1_Dirty_Bit)时,L2-Cache首先根据Addr的组索引确定L2-Cache中的一个组,然后遍历该组中的Cache Line的Tag Bit。若缓存行L2_Line_b的Tag Bit与Addr的标记相同且L2_Line_b的V Bit置位,根据Addr中Cache Block偏移将L2_Line_b中的数据读出或写入数据,若L1_REQ 为写请求,利用L1_Diry_Bit更新L2_Line_b中的脏位,其原有内容为 Old_Dirty_Bit。该更新操作表示为如下:
New_Dirty_Bit=Old_Dirty_Bit|L1_Dirty_Bit,
将Old_Dirty_Bit和L1_Dirty_Bit进行位或操作,并将New_Dirty_Bit重新存入L2_Line_b的脏位。若没有查到相应的Cache Line或相应Cache Line的V Bit 未置位,则产生一个新的读请求L2_RD_REQ,尝试从LLC中读出相应Cache Line的LLC_Block_a到L2-Cache中的某个缓存组(根据物理地址),但若该缓存组中没有空闲的Cache Line(即所有Cache Line的V Bit置位),选择一个缓存行L2_Line_c,若L2_Line_c的Dirty Tag被置位,则产生一个写请求 L2_WR_REQ,该请求会选择将L2_Line_c中的缓存块L2_Block_b写回到LLC 中,L2_WR_REQ还包含L2_Line_c的脏位L2_Dirty_Bit,写回后,将LLC_Block_c 写入L2_Line_c中,最后在L2-Cache中重新执行读写请求L1_REQ。
访存请求生成模块的主要物理结构包括最后一级缓存(LLC),最后一级缓存接收第二级缓存发出的读写请求时,根据读写物理地址中最后一级缓存规定的组索引确定最后一级缓存中的缓存行组,在缓存行组中逐一遍历查找与读写物理地址中最后一级缓存规定的标志相同的缓存行,若查找到某一缓存行且查找到的缓存行的有效位置位,则根据读写物理地址中的缓存块的偏移值将数据从缓存行读出或向所述缓存行中写入数据,且向缓存行中写入数据时更新缓存行中的脏位,判断所述缓存行中更新后的脏位与原脏位是否相同,若不同,产生部分预写请求,并将其发送至访存请求调度模块;若未查找到相同标志的缓存行或查找到的缓存行的有效位未置位,最后一级缓存向访存请求调度模块发出一个访存读请求;若缓存行组中没有空闲的缓存行,则最后一级缓存选择缓存行组中的某一缓存行,若选择的缓存行中的脏位被置位时,最后一级缓存向访存请求调度模块发出一个访存写请求,访存写请求将选择的缓存行中的缓存块写回相变存储器中,写回后,最后一级缓存重新执行第二级缓存的读写请求。
结合图4及下述的示例描述进一步了解访存请求生成模块执行程序的具体操作:
当L2-Cache向LLC发出一个读写请求L2_REQ(含有物理地址Addr,当请求为写请求时,还包含脏位L2_Dirty_Bit)时,LLC首先根据Addr的组索引确定LLC中的一个组,然后遍历该组中的Cache Line的Tag Bit。若缓存行 LLC_Line_b的Tag Bit与Addr的标记相同且LLC_Line_b的V Bit置位,根据 Addr中Cache Block偏移将LLC_Line_b中的数据读出或写入数据,若此时 L2_REQ为写请求,利用L2_Diry_Bit更新LLC_Line_b中的脏位其原有内容为 LLC_Old_Dirty_Bit。该更新操作表示为如下:
New_LLC_Dirty_Bit=Old_LLC_Dirty_Bit|L2_Dirty_Bit,
将Old_LLC_Dirty_Bit和L2_Dirty_Bit进行位或操作,并将 New_LLC_Dirty_Bit重新存入LLC_Line_b的脏位。
此时,若Old_LLC_Dirty_Bit和New_LLC_Dirty_Bit值不相同,则产生一条Partial-PreSET Request。Partial-PreSET Request的访存类型标志为“11”, Partial-PreSET Request内包含的物理地址为
Mem_Addr=(Addr_2>>6)<<6,
其中,“>>6”表示将地址右移6位,“<<6”表示将地址左移6位。 Partial-PreSET Request写入数据的格式表示为W0W1W2W3W4W5W6W7,其中,Wi (0≤i<8)表示一个字。写入数据的实际内容取决于如下:
Tag=New_LLC_Dirty_Bit^Old_LLC_Dirty_Bit;
其中,“^”表示异或操作。Tag的格式为B0B1B2B3B4B5B6B7,长度为8位。若Bi=1,Wi的内容为全1。若Bi=0,Wi的内容为全0。
若没有查到相应的Cache Line或相应Cache Line的V Bit未置位,则产生一个新的访存读请求MEM_R_REQ,尝试从相变存储器中读出相应内存行 Mem_Line到LLC中的某个缓存组(根据物理地址),MEM_R_REQ的访存类型标志为“01”,Memory Line索引为
Mem_Addr=(Addr_2>>6)<<6
若该缓存组中没有空闲的Cache Line(即所有Cache Line的V Bit置位),选择一个缓存行LLC_Line_c,若LLC_Line_c的Dirty Tag被置位,则产生一个写请求MEM_W_REQ,该请求会选择将LLC_Line_c中的缓存块LLC_Block_c 写回相变存储器中,MEM_R_REQ的访存类型标志为“10”,Memory Line索引由LLC_Line_b的标志Tag_Bit和LLC_Line_c所在的组索引Set_Index直接拼接而成,为:
Mem_Addr=(Tag_Bit<<s)+Set_Index;
其中,s表示组索引的长度。当MEM_W_REQ发送到内存控制器后,将 Mem_Line写入LLC_Line_c中,最后在LLC中重新执行访存请求L2_REQ。
在访存请求调度模块中,该模块主要包含在相变存储器的内存控制器中,物理结构包括读队列(Read Queue)、写队列(Write Queue)以及部分预写队列 (Partial-PreSETQueue)等。当内存控制器接收到访存请求后,按访存请求类别的不同,分配到不同的Queue。访存请求调度模块根据预设的优先级将读队列、写队列和部分预写队列发送至访存请求执行模块,访存请求调度模块的执行程序原理图如图5所示。
其中,预设的优先级如下:
优先将读请求发送至访存请求执行模块;
当写请求数据占写队列的80%空间时,优先将所有的写请求发送至访存请求执行模块,即:Number of Write Requests≥Size of Write Queue*80%;
当读队列为空且写队列不为空时,将一个写请求发送至访存请求执行模块;
当读队列和写队列均为空时,将一个部分预写请求发送至访存请求执行模块;
当访存请求执行模块执行部分预写请求时,接收到一个读请求时,暂停该部分预写请求的执行,该部分预写请求会在之后的某个时间眯继续执行。
在访存请求执行模块中,访存请求执行模块执行程序的原理图如图6所示,具体执行以下操作:
若接收到读请求,根据读请求中的内存行索引,将相应的内存行数据发送到所述最后一级缓存中;
若接收到写请求,根据写请求中的内存行索引,将写请求中的数据写入相应的内存行,本例中采用Read-Before-Write策略进行写入;
若接收到部分预写请求,根据预写请求中的内存行索引,找到相应的内存行,根据部分预写请求的写入数据对内存行中相应的字执行SET操作或不执行任何操作,如,根据写入数据W0W1W2W3W4W5W6W7,若Wi为全1,则对Memery Line 中相应的Word执行写1操作(即SET操作),写入方法采用Read-Before-Write 策略。若Wi为全0,则对Memery Line中相应的Word不执行任何操作。
实施例二:
为了详细阐述流程,根据实际产品参数,现做如下具体限定
a.相变存储器物理地址长度为36;
b.L1-Cache的容量为32KB,组数量为64个,每组含有8个Cache Line,组索引长度为6,标志位长度为24;
c.L2-Cache的容量为256KB,组数量为512个,每组含有8个Cache Line,组索引长度为9,标志位长度为21;
d.LLC的容量为4096KB,组数量为8192个,每组含有8个Cache Line,组索引长度为13,标志位长度为17;
e.Memory Line索引长度为30。
f.Read Queue、Write Queue以及Partial-PreSET Queue的大小为128。
本例以CPU访问如下物理地址为例进行说明。
W_REQ_a:0000 1101 0010 0000 1101 0010 0101 0001 1000(写操作)
具体阐述步骤如下:
步骤A.1:当脏数据标记模块的L1_Cache接收W_REQ_a时,首先解析其中的物理地址,得出组索引=010100,即组号为20,遍历第20组中8个Cache Line 的Tag Bit,读出其中的值,和W_REQ_a的前24位(0000 1101 0010 0000 1101 0010)比较。如下表所示,该组中的第6个Cache Line满足条件且V Bit置位。
Figure BDA0001378617230000121
根据Cache Block偏移中的Word索引值011,将CPU的数据写入该Cache Line的第3个Word,并将该Cache Line的Dirty Tag中的第3位置位,更新后的Dirty Tag为0010 1100
实施例三:
基于实施例二,本例以CPU访问如下物理地址为例进行说明。
R_REQ_b:1101 0010 0101 0001 1101 1001 0000 1101 0000(读操作)
具体阐述步骤如下:
步骤A.1.1:当脏数据标记模块的L1_Cache接收R_REQ_b时,首先解析其中的物理地址,得出组索引=000011,即组号为3,遍历第3组的中8个Cache Line 的Tag Bit,读出其中的值,和W_REQ_b的前24位(1101 0010 0101 0001 1101 1001)比较。遍历后,发现第三组中不存在相应的Cache Line,因此产生了Cache Miss,跳转到步骤A.2。
步骤A.1.2:L1_Cache接收到LLC_Line_Block后,在缓存块组号为3的组中查找一个空闲的Cache Line,如下表所示,第7个Cache Line的V Bit未置位,
Figure BDA0001378617230000122
将LLC_Line_Block写入其中,更新V Bit、Dirty Bit和Tag Bit。更新后,第7个Cache Line的内容如下:
Figure BDA0001378617230000131
在更新第1个Cache Line的同时,根据Word索引010,CPU将读取第2个 Word,继续执行R_REQ_b,并在此结束。
步骤A.2:发生Cache Miss后,在L1-Cache中生成一条读请求L1_R_REQ,该读请求包含物理地址1101 0010 0101 0001 1101 1001 0000 1100 0000(无需Cache Line偏移)。将L1_R_REQ发送到L2_Cache中。
步骤A.3.1:当脏数据标记模块的L2_Cache接受到L1_R_REQ时,首先解析L1_R_REQ的物理地址,得出组索引=001 0000 11,即组号为67,遍历第67 组的中8个Cache Line的Tag Bit,读出其中的值,和L1_R_REQ的前21位(1101 0010 0101 0001 1101 1)比较。遍历后,发现第67组中不存在相应的Cache Line, 因此再次产生了Cache Miss,跳转到步骤A.4。
步骤A.3.2:L2_Cache接收到LLC_Line_Block,在缓存块组号为67的组中查找一个空闲的Cache Line,如下表所示,第1个Cache Line的V Bit未置位,
Figure BDA0001378617230000132
将LLC_Line_Block写入其中,更新V Bit、Dirty Bit和Tag Bit。更新后,第1个Cache Line的内容如下:
Figure BDA0001378617230000133
在更新第1个Cache Line的同时,将LLC_Line_Block存入L1_Cache中,跳转到步骤A.1.2。
步骤A.4:发生Cache Miss后,在L2-Cache中生成一条读请求L2_R_REQ,该读请求包含物理地址1101 0010 0101 0001 1101 1001 0000 1100 0000,将 L2_R_REQ发送到LLC中。
步骤B.1.1:当访存请求生成模块的LLC接受到L2_R_REQ时,首先解析 L2_R_REQ的物理地址,得出组索引=101 1001 0000 11,即组号为5699,遍历第5699组的中8个CacheLine的Tag Bit,读出其中的值,和L1_R_REQ的前 17位(1101 0010 0101 0001 1)比较。遍历后,发现第5699组中存在相应的Cache Line。
将该Cache Line的缓存块LLC_Line_Block发送给L2_Cache,跳转到步骤 A.3.2。
实施例四:
基于实施例二,本例以CPU访问如下物理地址为例进行说明。
W_REQ_c:1111 1101 0001 0000 1101 0010 0111 0001 1000(写操作)
具体阐述步骤如下:
步骤A.1.1:当脏数据标记模块的L1_Cache接收W_REQ_c时,首先解析其中的物理地址,得出组索引=011100,即组号为28,遍历第28组的中8个 Cache Line的Tag Bit,读出其中的值,和W_REQ_c的前24位(1111 1101 0001 0000 1101 0010)比较。遍历后,发现第28组中不存在相应的Cache Line,因此产生了Cache Miss,跳转到步骤A.2。
步骤A.1.2:L1_Cache接收到LLC_Line_Block后,在缓存块组号为3的组中查找一个空闲的Cache Line,如下表所示,第7个Cache Line的V Bit未置位,
Figure BDA0001378617230000141
将LLC_Line_Block写入其中,更新V Bit、Dirty Bit和Tag Bit。更新后,第7个Cache Line的内容如下:
Figure BDA0001378617230000142
在更新第1个Cache Line的同时,根据Word索引011,CPU将写第3个 Word,更新tagbit,继续执行R_REQ_c,并在此结束。
步骤A.2:发生Cache Miss后,在L1-Cache中生成一条读请求L1_R_REQ,该读请求包含物理地址1111 1101 0001 0000 1101 0010 0111 0000 0000(无需Cache Line偏移)。将L1_R_REQ发送到L2_Cache中。
步骤A.3.1:当脏数据标记模块的L2_Cache接受到L1_R_REQ时,首先解析L1_R_REQ的物理地址,得出组索引=010 0111 00,即组号为156,遍历第156 组的中8个Cache Line的Tag Bit,读出其中的值,和L1_R_REQ的前21位(1111 1101 0001 0000 1101 0)比较。遍历后,发现第156组中不存在相应的Cache Line, 因此再次产生了Cache Miss,跳转到步骤A.4。
步骤A.3.2:L2_Cache接收到LLC_Line_Block,在缓存块组号为156的组中查找一个空闲的Cache Line,如下表所示,第6个Cache Line的V Bit未置位,
Figure BDA0001378617230000151
将LLC_Line_Block写入其中,更新V Bit、Dirty Bit和Tag Bit。更新后,第6个Cache Line的内容如下:
Figure BDA0001378617230000152
在更新第1个Cache Line的同时,将LLC_Line_Block存入L1_Cache中,跳转到步骤A.1.2。
步骤A.4:发生Cache Miss后,在L2-Cache中生成一条读请求L2_R_REQ,该读请求包含物理地址1111 1101 0001 0000 1101 0010 0111 0000 0000,将 L2_R_REQ发送到LLC中。
步骤B.1.1:当访存请求生成模块的LLC接受到L2_R_REQ时,首先解析 L2_R_REQ的物理地址,得出组索引=101 1001 0000 11,即组号为5276,遍历第5276组的中8个CacheLine的Tag Bit,读出其中的值,和L1_R_REQ的前 17位(1101 0010 0101 0001 1)比较。遍历后,发现第5276组中不存在相应的 Cache Line。生成一条读访存请求MEM_R_REQ,该读访存请求包含物理地址1111 1101 0001 0000 1101 0010 0111 0000 0000,将该请求发送至访存请求调度模块,跳转至步骤C.1.1。
步骤B.1.2:LLC接收到访存请求执行模块回传的MEM_R_REQ的Memory Line数据后,再次遍历第5276组的中8个Cache Line的V Bit,读出其中的值。
Figure BDA0001378617230000161
由于当前没有空闲的Cache Line,因此需要选择一个Cache Line将其写回到相变存储器。选择第0个Cache Line将其写回到相变存储器,生成一个 MEM_W_REQ,物理地址为1111 1110 0101 0000 1101 1001 0000 1100 0000。跳转至步骤C.1.2。将MEM_W_REQ发送至访存请求调度后,更新第5276组中的第0个Cache Line,更新后的Cache Line内容为:
Figure BDA0001378617230000162
接着,将第0个Cache Line中数据LLC_Line_Block向L2回传,跳转至步骤A.3.2。
步骤C.1.1:访存请求调度模块接收到该MEM_R_REQ后,将该访存请求放置到ReadQueue中。此时,Write Queue中的写访存请求数量为20,未达到Wirte Queue容量的80%,因此,暂不执行写访存请求,准备执行MEM_R_REQ。当前访存请求执行模块正在执行Partial-PreSET Request,访存请求调度模块取消 Partial-PreSET Request的执行,向访存请求执行模块发送访存请求 MEM_R_REQ。跳转到步骤D.1。
步骤C.1.2访存请求调度模块接收到该MEM_W_REQ后,将该访存请求放置到WriteQueue中。此时,Write Queue中的写访存请求数量为21,未达到Wirte Queue容量的80%,因此,暂不执行写访存请求,当之后某个时间点执行 MEM_W_REQ时,只需要在Memory Line(1111 1110 0101 0000 1101 1001 0000 11)中执行SET操作,结束(此时回到步骤B.1.2的未完成部分)。
步骤D.1:访存请求执行模块接收到MEM_R_REQ,解析其物理地址1111 1101 00010000 1101 0010 0111 0000 0000,根据Memory Line索引(1111 1101 0001 0000 11010010 0111 00)在相变存储器中找到相应的Memory Line数据,并将数据回传到LLC。跳转至步骤B.1.2。
实施例五:
基于实施例二,本例以CPU访问如下物理地址为例进行说明。
W_REQ_d:0001 1101 1001 0000 1101 00001101 0010 0101(写操作)
具体阐述步骤如下:
步骤A.1.1:当脏数据标记模块的L1_Cache接收W_REQ_d时,首先解析其中的物理地址,得出组索引=1101 00,即组号为52,遍历第52组的中8个 Cache Line的Tag Bit,读出其中的值,和W_REQ_d的前24位(0001 1101 1001 0000 1101 0000)比较。遍历后,发现第52组中不存在相应的Cache Line,因此产生了Cache Miss,跳转到步骤A.2。
步骤A.1.2:L1_Cache接收到LLC_Line_Block后,在缓存块组号为52的组中查找一个空闲的Cache Line,如下表所示,第0个Cache Line的V Bit未置位;
Figure BDA0001378617230000171
将LLC_Line_Block写入其中,更新V Bit、Dirty Bit和Tag Bit。更新后,第7个Cache Line的内容如下:
Figure BDA0001378617230000172
在更新第1个Cache Line的同时,根据Word索引100,CPU将写入第4个Word,继续执行W_REQ_d,并在此结束。
步骤A.2:发生Cache Miss后,在L1-Cache中生成一条读请求L1_R_REQ,该读请求包含物理地址0001 1101 1001 0000 1101 0000 1101 0000 0000(无需Cache Line偏移)。将L1_R_REQ发送到L2_Cache中。
步骤A.3.1:当脏数据标记模块的L2_Cache接受到L1_R_REQ时,首先解析L1_R_REQ的物理地址,得出组索引=000 1101 00,即组号为52,遍历第52 组的中8个Cache Line的Tag Bit,读出其中的值,和L1_R_REQ的前21位(0001 1101 1001 0000 1101 0)比较。遍历后,发现第52组中不存在相应的Cache Line, 因此再次产生了Cache Miss,跳转到步骤A.4。
步骤A.3.2:L2_Cache接收到LLC_Line_Block,在缓存块组号为52的组中查找一个空闲的Cache Line,如下表所示,所有的V bit已经置位,无空闲Cache Line,需生成一个写请求L2_W_REQ,选择第一个Cache Line,将其写回到LLC,该请求内含物理地址(11111101 1110 0101 0000 1000 1101 0000 0000),且含有脏位L2_Dirty_Bit(0111 0000),将该请求发送到LLC,跳转至步骤B.1.2。
Figure BDA0001378617230000181
步骤A.3.3:将L2_W_REQ写回LLC后,将LLC_Line_Block写入第0个 Cache Line,更新V Bit、Dirty Bit和Tag Bit。更新后,第1个Cache Line的内容如下:
Figure BDA0001378617230000182
在更新第1个Cache Line的同时,将LLC_Line_Block存入L1_Cache中,跳转到步骤A.1.2。
步骤A.4:发生Cache Miss后,在L2-Cache中生成一条读请求L2_R_REQ,该读请求包含物理地址0001 1101 1001 0000 1101 0000 1101 0000 0000,将 L2_R_REQ发送到LLC中。
步骤B.1.1:当访存请求生成模块的LLC接收到L2_R_REQ时,首先解析 L2_R_REQ的物理地址,得出组索引=101 0000 1101 00,即组号为5172,遍历第5172组的中8个CacheLine的Tag Bit,读出其中的值,和L1_R_REQ的前17位(00011101100100001)比较。遍历后,发现第5172组中存在相应的Cache Line。将该Cache Line的缓存块LLC_Line_Block发送给L2_Cache,跳转到步骤 A.3.2。
步骤B.1.2:当访存请求生成模块的LLC接收到L2_W_REQ时,首先解析 L2_R_REQ的物理地址,得出组索引=000 1000 1101 00,即组号为564,遍历第 564组的中8个CacheLine的Tag Bit,读出其中的值,和L1_R_REQ的前17 位(11111101 1110 0101 0)比较。
Figure BDA0001378617230000191
和第7个Cache Line的中Tag Bit匹配,且得出该Cache Line中脏位 LLC_Dirty_Bit(00110000),首先将L2_W_REQ内的数据写入第7个Cache Line 中。利用公式,更新第7个Cache Line的脏位为New_LLC_Dirty_Bit(0111 0000):
New_LLC_Dirty_Bit=Old_LLC_Dirty_Bit|L2_Dirty_Bit
由于LLC_Old_Dirty_Bit(00110000)和LLC_New_Dirty_Bit(01110000)值不相同,产生一条Partial-PreSET Request。该请求的物理地址为1111 1101 1110 0101 0000 1000 1101 0000 0000。包含的tag(01000000)为:
tag=New_LLC_Dirty_Bit^Old_LLC_Dirty_Bit;
该tag表示Partial-PreSET Request会对物理地址11111101 11100101 0000 1000 1101 0000 0000地址对应的Memory Line中的第6个字执行SET操作。(虽然New_LLC_Dirty_Bit表示有三个脏字,但是第4与5个脏字对应的 Partial-PreSET Request在之前已经完成。)
将Partial-PreSET Request发送到访存请求调度模块。
步骤C.1.1:访存请求调度模块接收到该Partial-PreSET Request后,将该访存请求放置到Partial-PreSET Queue中。此时,Write Queue和Read Queue中的读写访存请求数量为0,可以执行Partial-PreSET Request。向访存请求执行模块发送Partial-PreSETRequest。
步骤D.1:访存请求执行模块接收到Partial-PreSET Request,解析其物理地址1111 1101 1110 0101 0000 1000 1101 0000 0000,根据Memory Line索引(1111 1101 1110 0101 0000 1000 1101 00)在相变存储器中找到相应的Memory Line,利用Partial-PreSET Request中的tag信息,对该Memory Line中第6个字执行SET 操作。(当数据真正写回时,只需要在第6个字中执行RESET操作,因此缩短了写访存请求的时间。)
以上应用了具体个例对本发明进行阐述,只是用于帮助理解本发明,并不用以限制本发明。对于本发明所属技术领域的技术人员,依据本发明的思想,还可以做出若干简单推演、变形或替换。

Claims (6)

1.一种面向相变存储器的写请求优化装置,其特征在于,包括:脏数据标记模块、访存请求生成模块、访存请求调度模块和访存请求执行模块;
所述脏数据标记模块包括第一级缓存和第二级缓存,所述访存请求生成模块包括最后一级缓存;
所述第一级缓存执行以下操作:
接收CPU的读写请求,所述读写请求含有读写物理地址;
根据所述读写物理地址中第一级缓存规定的组索引确定第一级缓存中的缓存行组,在所述缓存行组中逐一遍历查找与所述读写物理地址中第一级缓存规定的标志相同的缓存行,若查找到某一缓存行且查找到的缓存行的有效位置位,则根据所述读写物理地址中的缓存块的偏移值将数据从所述缓存行读出或向所述缓存行中写入数据,且向所述缓存行中写入数据时将所述缓存行中相应字的脏位置位;若未查找到相同标志的缓存行或查找到的缓存行的有效位未置位,所述第一级缓存向所述第二级缓存发出一个读请求;第二级缓存接受读请求,并将新数据发送至第一级缓存中时,若所述缓存行组中没有空闲的缓存行,则所述第一级缓存选择所述缓存行组中的某一缓存行,并将其内容清空;若选择的缓存行中的脏位被置位时,所述第一级缓存向所述第二级缓存发出一个写请求,所述写请求将选择的缓存行中的缓存块写回所述第二级缓存,写回后,将新数据写入到所述缓存行中,接着,所述第一级缓存重新执行CPU的读写请求;
所述第二级缓存执行以下操作:
所述第二级缓存接收所述第一级缓存发出的读写请求时,根据读写物理地址中第二级缓存规定的组索引确定第二级缓存中的缓存行组,在所述缓存行组中逐一遍历查找与所述读写物理地址中第二级缓存规定的标志相同的缓存行,若查找到某一缓存行且查找到的缓存行的有效位置位,则根据所述读写物理地址中的缓存块的偏移值将数据从所述缓存行读出或向所述缓存行中写入数据,且向所述缓存行中写入数据时更新所述缓存行中的脏位;若未查找到相同标志的缓存行或查找到的缓存行的有效位未置位,所述第二级缓存向所述最后一级缓存发出一个读请求;最后一级缓存接受读请求,并将新数据发送至第二级缓存中时,若所述缓存行组中没有空闲的缓存行,则所述第二级缓存选择所述缓存行组中的某一缓存行,若选择的缓存行中的脏位被置位时,所述第二级缓存向所述最后一级缓存发出一个写请求,所述写请求将选择的缓存行中的缓存块写回所述最后一级缓存,写回后,将新数据写入到所述缓存行中,接着,所述第二级缓存重新执行第一级缓存的读写请求;
所述访存请求生成模块执行以下操作:
所述最后一级缓存接收所述第二级缓存发出的读写请求时,根据读写物理地址中最后一级缓存规定的组索引确定最后一级缓存中的缓存行组,在所述缓存行组中逐一遍历查找与所述读写物理地址中最后一级缓存规定的标志相同的缓存行,若查找到某一缓存行且查找到的缓存行的有效位置位,则根据所述读写物理地址中的缓存块的偏移值将数据从所述缓存行读出或向所述缓存行中写入数据,且向所述缓存行中写入数据时更新所述缓存行中的脏位,判断所述缓存行中更新后的脏位与原脏位是否相同,若不同,产生部分预写请求,并将其发送至访存请求调度模块;若未查找到相同标志的缓存行或查找到的缓存行的有效位未置位,所述最后一级缓存向所述访存请求调度模块发出一个访存读请求;若所述缓存行组中没有空闲的缓存行,则所述最后一级缓存选择所述缓存行组中的某一缓存行,若选择的缓存行中的脏位被置位时,所述最后一级缓存向所述访存请求调度模块发出一个访存写请求,所述访存写请求将选择的缓存行中的缓存块写回相变存储器中,写回后,所述最后一级缓存重新执行第二级缓存的读写请求;
所述访存请求调度模块执行以下操作:
所述访存请求调度模块包括读队列、写队列和部分预写队列,所述访存请求调度模块根据预设的优先级将所述读队列、写队列和部分预写队列发送至所述访存请求执行模块;
所述访存请求执行模块执行以下操作:
若接收到读请求,根据读请求中的内存行索引,将相应的内存行数据发送到所述最后一级缓存中;
若接收到写请求,根据写请求中的内存行索引,将写请求中的数据写入相应的内存行;
若接收到部分预写请求,根据预写请求中的内存行索引,找到相应的内存行,根据部分预写请求的写入数据对内存行中相应的字执行SET操作或不执行任何操作。
2.如权利要求1所述的写请求优化装置,其特征在于,所述写请求中还包括写数据的脏位信息,向所述缓存行中写入数据时更新缓存行中的脏位的具体操作是:将写数据的脏位和缓存行中原脏位进行位或操作,将位或的结果更新缓存行中的原脏位。
3.如权利要求1所述的写请求优化装置,其特征在于,所述部分预写请求的写入数据根据最后一级缓存的缓存行中的更新后的脏位与原脏位的异或操作结果进行确定。
4.如权利要求1所述的写请求优化装置,其特征在于,所述预设的优先级为:
优先将读请求发送至访存请求执行模块;
当写请求数据占写队列的80%空间时,优先将所有的写请求发送至访存请求执行模块;
当读队列为空且写队列不为空时,将一个写请求发送至访存请求执行模块;
当读队列和写队列均为空时,将一个部分预写请求发送至访存请求执行模块;
当访存请求执行模块执行部分预写请求时,接收到一个读请求时,暂停该部分预写请求的执行。
5.如权利要求1所述的写请求优化装置,其特征在于,所述第二级缓存和最后一级缓存的读写物理地址为所述CPU读写请求中的读写物理地址中缓存块无偏移的读写物理地址。
6.如权利要求1所述的写请求优化装置,其特征在于,所述部分预写请求的物理地址为所述第二级缓存的读写物理地址先右移6位,再左移6位获得。
CN201710693791.4A 2017-08-14 2017-08-14 一种面向相变存储器的写请求优化装置 Expired - Fee Related CN107506139B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710693791.4A CN107506139B (zh) 2017-08-14 2017-08-14 一种面向相变存储器的写请求优化装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710693791.4A CN107506139B (zh) 2017-08-14 2017-08-14 一种面向相变存储器的写请求优化装置

Publications (2)

Publication Number Publication Date
CN107506139A CN107506139A (zh) 2017-12-22
CN107506139B true CN107506139B (zh) 2020-09-08

Family

ID=60690915

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710693791.4A Expired - Fee Related CN107506139B (zh) 2017-08-14 2017-08-14 一种面向相变存储器的写请求优化装置

Country Status (1)

Country Link
CN (1) CN107506139B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110275841B (zh) * 2019-06-20 2020-09-04 上海燧原智能科技有限公司 访问请求处理方法、装置、计算机设备和存储介质
CN111522684A (zh) * 2019-12-31 2020-08-11 北京航空航天大学 一种同时纠正相变存储器软硬错误的方法及装置
CN113515474A (zh) * 2021-07-30 2021-10-19 上海阵量智能科技有限公司 数据处理装置、方法、计算机设备和存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102713828A (zh) * 2011-12-21 2012-10-03 华为技术有限公司 提供多设备镜像和条带功能的磁盘缓存方法、设备和系统
CN105095116A (zh) * 2014-05-19 2015-11-25 华为技术有限公司 缓存替换的方法、缓存控制器和处理器
CN106909515A (zh) * 2017-02-11 2017-06-30 郑州云海信息技术有限公司 面向混合主存的多核共享末级缓存管理方法及装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9471494B2 (en) * 2013-12-20 2016-10-18 Intel Corporation Method and apparatus for cache line write back operation

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102713828A (zh) * 2011-12-21 2012-10-03 华为技术有限公司 提供多设备镜像和条带功能的磁盘缓存方法、设备和系统
CN105095116A (zh) * 2014-05-19 2015-11-25 华为技术有限公司 缓存替换的方法、缓存控制器和处理器
CN106909515A (zh) * 2017-02-11 2017-06-30 郑州云海信息技术有限公司 面向混合主存的多核共享末级缓存管理方法及装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Boosting access parallelism to PCM-based main memory;Mohammad, A. et al;《International Symposium on Computer Architecture》;20161230;第695–706页 *
Enhancing lifetime and security of PCM-based main memory with start-gap wear leveling;Qureshi, M.K. et al;《IEEE/ACM International Symposium on Microarchitecture》;20091116;第14–23页 *

Also Published As

Publication number Publication date
CN107506139A (zh) 2017-12-22

Similar Documents

Publication Publication Date Title
US10241919B2 (en) Data caching method and computer system
US20210109659A1 (en) Use of outstanding command queues for separate read-only cache and write-read cache in a memory sub-system
CN107066393B (zh) 提高地址映射表中映射信息密度的方法
JP5440067B2 (ja) キャッシュメモリ制御装置およびキャッシュメモリ制御方法
US9785564B2 (en) Hybrid memory with associative cache
US20110238908A1 (en) Disc device
US20060224830A1 (en) Performance of a cache by detecting cache lines that have been reused
CN110018971B (zh) 缓存替换技术
CN109952565B (zh) 内存访问技术
US11914520B2 (en) Separate read-only cache and write-read cache in a memory sub-system
CN105095116A (zh) 缓存替换的方法、缓存控制器和处理器
US12007917B2 (en) Priority scheduling in queues to access cache data in a memory sub-system
US20090094435A1 (en) System and method for cache access prediction
CN107506139B (zh) 一种面向相变存储器的写请求优化装置
JPWO2011049051A1 (ja) キャッシュメモリおよびその制御方法
US20080301372A1 (en) Memory access control apparatus and memory access control method
US11055025B2 (en) Semiconductor memory device performing command merge operation and operation method thereof
JPH10275112A (ja) キャッシュメモリシステム
US8452920B1 (en) System and method for controlling a dynamic random access memory
US9116814B1 (en) Use of cache to reduce memory bandwidth pressure with processing pipeline
KR102707637B1 (ko) 명령 머지 동작을 수행하는 반도체 메모리 장치 및 그 동작 방법
US9760488B2 (en) Cache controlling method for memory system and cache system thereof
JP2006260378A (ja) 半導体集積回路
US11698856B2 (en) Maintaining sequentiality for media management of a memory sub-system
US11709599B2 (en) Memory controller and memory system

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
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20200908