CN108431784B - 访问请求处理方法、装置及计算机*** - Google Patents
访问请求处理方法、装置及计算机*** Download PDFInfo
- Publication number
- CN108431784B CN108431784B CN201580085465.4A CN201580085465A CN108431784B CN 108431784 B CN108431784 B CN 108431784B CN 201580085465 A CN201580085465 A CN 201580085465A CN 108431784 B CN108431784 B CN 108431784B
- Authority
- CN
- China
- Prior art keywords
- data
- log
- page
- cache page
- log data
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0804—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
- G06F12/0868—Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1041—Resource optimization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/31—Providing disk cache in a specific location of a storage system
- G06F2212/313—In storage device
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/46—Caching storage objects of specific type in disk cache
- G06F2212/461—Sector or disk block
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/50—Control mechanisms for virtual memory, cache or TLB
- G06F2212/502—Control mechanisms for virtual memory, cache or TLB using adaptive policy
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7203—Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本申请公开了一种访问请求处理方法、装置及计算机***。该计算机***包括处理器和非易失性内存NVM。在该计算机***中,当接收到写请求时,处理器根据该写请求确定目标缓存页。在确定所述NVM中存储有所述目标缓存页的日志链log chain之后,该处理器在所述目标缓存页的log chain中***记录有第二log数据片信息的第二数据节点。其中,所述log chain中已包含有记录第一log数据片信息的第一数据节点,该第二log数据片为该写请求待写入的至少一部分数据。进一步的,在确定所述第二log数据片的页内位置与所述第一log数据片的页内位置有重叠之后,该处理器在所述第一数据节点中将所述第一log数据片中与所述第二log数据片重叠的数据设置为无效数据。
Description
技术领域
本发明涉及存储技术领域,尤其涉及一种访问请求处理方法、装置及计算机***。
背景技术
在存储***中,通常采用写前日志(Write-ahead logging,WAL)的方式来保持数据的一致性。根据这种方式,所有写入存储***的数据都先写入外存设备(例如,磁盘)的日志文件中,后续再根据日志文件更新旧数据。当***出现掉电或宕机等故障时,可以根据日志恢复数据,保证数据的一致性。随着下一代非易失性存储器(Non-Volatile Memory,NVM)技术的发展,由于下一代NVM 具有读写速度较快,并且能够按字节寻址,因此下一代NVM可以被作为***的内存使用。这种以NVM为介质的存储级内存(Storage Class Memory,SCM)具有非易失性的特点,为存储***中的数据一致性保护提供了新的方法。
在现有技术中的一种基于SCM实现数据一致性的方法中,缓存 (cache)和日志(log)共享SCM的存储空间。在这种实现方式中,一个SCM 块既可以作为cache块,也可以作为log块。在SCM中,以一个块为内存空间的基本单位,通常,一个块的大小可以为4k。每个块有三个状态对:frozen/normal, dirty/clean,up-to-date/out-of-date。frozen用于表示该块是log块,也就是说,该块中的数据可以作为日志使用。normal用于表示该块是cache块,也就是说,该块作为缓存使用。dirty用于表示该块中存储的数据已经被修改。clean用于表示该块中存储的数据未被修改过。up-to-date用于表示该块中存储的数据是最新的版本。out-of-date用于表示该块中存储的数据是旧版本。在更新数据过程中,首先在内存中为数据分配一个块,将该块的状态记录为(normal,clean,up-to-date)。当将数据写入该块后,更新该块的状态为(normal,dirty,up-to-date)。处于(normal, dirty,up-to-date)状态的块可以直接读或写,也就是说,可以直接从处于(normal, dirty,up-to-date)状态的块中读数据或者向处于(normal,dirty,up-to-date)状态的块中写数据。当本次写操作完成后,事务提交时,该内存块被作为日志块使用,该内存块的状态被修改为(frozen,dirty,up-to-date)。当后续有新数据写入该内存块时,该内存块的状态被修改为(frozen,dirty,out-of-date)。处于(frozen, dirty,out-of-date)状态的内存块可以被写回到磁盘中。在将该内存块写回磁盘之后,该内存块变为空闲块(free block),可以供新的写操作使用。这种将SCM既作为cache空间又作为log空间的方法与WAL的方式相比虽然减少了数据写操作,但需要维护各个块的状态,造成***的较大开销。并且,这种方式必须以块为粒度实现数据的更新,在更新的数据小于一个块时,会造成写放大的问题,使得实际写入磁盘的数据比本身需要写入磁盘的数据更多。
发明内容
本发明实施例中提供的一种访问请求处理方法、装置及计算机***,能够在保护数据一致性的基础上减少***开销。
第一方面,本申请提供一种访问请求处理方法。该方法可以由计算机***执行。所述计算机***包括处理器和非易失性内存(NVM)。在所述计算机***中,当所述处理器接收到携带有所述文件标识、缓存区指针以及待写入数据的大小的写请求时,所述处理器可以根据所述写请求中携带的文件标识获取访问位置。其中,所述缓存区指针用于指向缓存待写入数据的缓存区,所述待写入数据为所述写请求要访问的目标文件的修改数据,所述访问位置指示所述写请求在所述目标文件中写入数据的起始地址。进一步的,所述处理器可以根据所述访问位置、所述待写入数据的大小以及缓存页的大小确定目标缓存页。所述目标缓存页是内存中用于缓存所述目标文件中被所述待写入数据修改的文件数据的内存页。在确定所述NVM中存储有所述目标缓存页中的第一目标缓存页的日志链 (log chain)之后,所述处理器在所述第一目标缓存页的log chain中***第二数据节点。其中,所述第一目标缓存页的log chain中包含有第一数据节点,所述第一数据节点中包含有第一log数据片的信息,所述第一log数据片包括所述第一目标缓存页在一次修改过程中的修改数据。所述第二log数据片是从所述缓存区指针指向的缓存区中获得的至少一部分待写入数据。所述第二log数据片的信息包括所述第二log数据片或者所述第二log数据片在所述SCM中的存储地址。进一步的,在确定所述第二log数据片的页内位置与所述第一log数据片的页内位置有重叠之后,所述处理器在所述第一数据节点中将所述第一log数据片中与所述第二log数据片重叠的数据设置为无效数据。
本申请提供的访问请求处理方法,本申请提供的访问请求处理方法,当处理器根据其接收的写请求需要对某个文件的数据进行修改时,所述处理器并没有直接将修改的数据写入该文件的目标缓存页中,而是将修改的数据写入所述 NVM的存储空间中,并采用logchain的形式记录目标缓存页的每一次修改数据的信息。由于所述NVM具有非易失性,并且在所述NVM中采用了log chain的记录方式来存储写入数据,能够将目标缓存页在多次修改过程中的修改数据按照时间先后顺序记录下来,从而便于识别log数据片的版本关系,保证了存储的数据与写入数据之间的一致性。本申请提供的访问请求处理方法与现有技术中通过维护内存块的不同状态来保持数据一致性的方式相比,由于相对于写更新的过程,状态维护对***开销的影响较大,因此,使用本申请提供的访问请求处理方法,在访问请求处理过程中能够减小计算机***的***开销。并且,由于在本申请提供的访问请求处理方法中,log数据片的大小可以比页(page)更小,因此,本申请提供的访问请求处理方法可以支持对比页更小粒度的文件修改,修改方式更加灵活。
进一步的,在本申请提供的访问请求处理方法中,通过将该目标缓存页的logchain中已有的数据节点的log数据片中与本次修改的数据重叠的部分设置为无效数据的方式,使得所述目标缓存页的log chain中记录的log数据片均为该缓存页的最新修改数据。从而在读取数据的过程中,可以直接根据目标缓存页的log chain中记录的log数据片的信息将log数据片更新到目标缓存页中,从而能够提高读取数据的速度。
进一步的,在本申请提供的访问请求处理方法中,所述处理器根据所述写请求将待写入的数据写入所述NVM中后,可以向应用响应写入成功消息。所述写入成功消息用于指示待写入数据已经成功被写入存储设备中。从而可以减少访问请求的处理时延。
在一种可能的实现方式中,在确定所述NVM中存储有所述第一目标缓存页的日志链的过程中,所述处理器具体可以根据所述第一目标缓存页的缓存页结构中的下述字段中的至少一个字段来确定所述NVM中存储有所述第一目标缓存页的日志链:“log head”、“logtail”、“logs”以及“log dirty”。其中,所述“log head”字段用于指向所述第一目标缓存页的log chain的首地址,所述“log tail”字段用于指向所述第一目标缓存页的log chain中最后一个数据节点的首地址,所述logs字段用于指示所述第一目标缓存页的log chain中的数据节点的数量,所述“log dirty”用于指示所述第一目标缓存页与所述目标缓存页的log chain的数据节点指示的log数据片是否同步。
在又一种可能的实现方式中,当所述处理器判断所述NVM中未存储有所述第一目标缓存页的log chain时,所述处理器可以在所述NVM中为所述第一目标缓存创建logchain。从而能够在新创建的log chain中***数据节点,并在***的数据节点中记录所述第一目标缓存页的log数据片的信息。
在又一种可能的实现方式中,在执行在所述第一目标缓存页的log chain中***新的数据节点的操作过程中,所述处理器可以在所述第一目标缓存页的log chain的尾部或头部***所述第二数据节点。其中,在***所述第二数据节点后,所述第一目标缓存页的log chain中包含有根据所述第一目标缓存页的更新顺序依次链接的至少两个数据节点。根据这种顺序***第二数据节点的方式,能够使所述第一目标缓存页的log chain中的不同数据节点中的log数据片依据对第一目标缓存页更新版本的新旧顺序进行链接。从而,可以根据第一目标缓存页的log chain中的数据节点的先后顺序识别出所述第一目标缓存页的不同更新版本。在读取数据的过程中,能够保证读取的数据的正确性。
在又一种可能的实现方式中,所述处理器还可以根据所述第一目标缓存页的logchain中记录的至少一个log数据片的信息将所述log chain中的至少一个log数据片更新到所述第一目标缓存页中,以获得更新后的第一目标缓存页,并将所述更新后的第一目标缓存页的数据存储于所述计算机***的外存设备中。根据这种方式,能够更新磁盘中的文件数据,保持数据的一致性。并且,在本申请提供的访问请求处理方法中,将数据写入所述NVM中后,无需立即将所述NVM中的修改数据写入所述计算机***的外存中。而是在需要回收所述NVM 的内存空间或在对所述计算机***进行恢复的过程中,将所述NVM中存储的log数据片更新到对应的缓存页,并根据更新后的缓存页更新磁盘中的文件数据。这种将修改数据延迟合并到目标缓存页,并将合并后的目标缓存页写入磁盘的方式,与现有的保持数据一致性的写前日志(write ahead log,WAL)方式以及写前拷贝(copy on write)方式相比,能够减少***的写放大。
在又一种可能的实现方式中,当所述第二log数据片的页内位置与所述第一log数据片的页内位置部分重叠时,所述处理器在所述第一数据节点中,根据第一log数据片与所述第二log数据片重叠的数据的页内位置修改所述第一 log数据片的页内位置信息,以将所述第一log数据片中与所述第二log数据片重叠的数据设置为无效数据。其中,所述第一log数据片的页内位置信息包括所述第一log数据片的“页内偏移”和“log数据长度”中的至少一个信息。
在又一种可能的实现方式中,当所述第二log数据片的页内位置包括所述第一log数据片的页内位置时,所述处理器通过删除所述第一数据节点的方式将所述第一log数据片中与所述第二log数据片重叠的数据设置为无效数据。
在又一种可能的实现方式中,当所述第一log数据片的页内位置包括所述第二log数据片的页内位置时,所述处理器将所述第一数据节点***成第一子数据节点以及第二子数据节点,并分别在所述第一子数据节点和所述第二子数据节点中记录所述第一log数据片中未与所述第二log数据片重叠的数据,以将第一log数据片中与所述第二log数据片重叠的数据设置为无效数据。其中,所述第一子数据节点以及所述第二子数据节点的数据结构与所述第一数据节点的数据结构相同。
在又一种可能的实现方式中,在将所述更新后的第一目标缓存页的数据存储于所述计算机***的外存设备中之后,所述处理器还可以回收所述第一目标缓存页的logchain。从而能够回收所述NVM的存储空间,节省***资源。
在又一种可能的实现方式中,所述第二log数据片的信息还包括:所述第二log数据片的页内位置信息以及所述第二数据节点的相邻数据节点的地址信息。其中,所述第二log数据片的页内位置是指第二log数据片在所述第一目标缓存页中的位置,所述第二log数据片的页内位置信息可以包括:页面内偏移、 log数据长度等信息。其中,所述页面内偏移用于指示所述第二log数据片在所述第一目标缓存页中的起始位置,所述log数据长度用于指示所述第二log数据片的长度。所述第一数据节点的相邻数据节点的地址信息可以根据所述第二数据节点中的“上一个log地址”以及“下一个log地址”的信息获得。所述“上一个log地址”用于指示上一个数据节点在所述NVM中的起始地址,所述“下一个log地址”用于指示下一个数据节点在所述NVM中的起始地址。根据所述第二log数据片的信息能够确定所述第一目标缓存页的最新修改数据。从而能够根据所述第一目标缓存页的log chain获得各个数据节点的先后顺序,进而能够根据所述第一目标缓存页的log chain中的各个数据节点中记录的信息确定所述第一目标缓存页的不同更新版本。
第二方面,本申请提供了一种计算机***,所述计算机***包括非易失性内存NVM以及与所述NVM连接的处理器,所述处理器用于执行上述第一方面以及第一方面的各种可能的实现方式中所述的方法。
第三方面,本申请提供了一种访问请求处理装置,所述访问请求处理装置应用于计算机***中,所述计算机***包括非易失性内存(NVM),所述访问请求处理装置包括用于执行上述第一方面以及第一方面的各种可能的实现方式中所述的方法的模块。
第四方面,本申请提供了一种计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令用于执行前述第一方面中所述的方法。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是本发明的一些实施例。
图1为本发明实施例提供的一种计算机***架构示意图;
图2为本发明实施例提供的一种计算机***的信令示意图;
图3为本发明实施例提供的一种访问请求处理方法流程图;
图4为本发明实施例提供的一种数据处理示意图;
图5为本发明实施例提供的一种缓存页结构及日志链结构的示意图;
图6为本发明实施例提供的一种数据合并方法流程图;
图7为本发明实施例提供的又一种计算机***的信令示意图;
图8为本发明实施例提供的又一种访问请求处理方法流程图;
图9为本发明实施例提供的一种访问请求处理装置的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述。显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。
图1为本发明实施例提供的一种计算机***架构示意图。图1所示的计算机***架构是一种混合内存的计算机***架构。在图1所示的计算机***架构中,动态随机存储器(Dynamic Random Access Memory,DRAM)和相变存储器(Phase Change Memory,PCM)均作为内存使用。如图1所示,计算机***100可以包括:中央处理器(Central ProcessingUnit,CPU)105、北桥芯片 110、南桥芯片115、动态随机存储器DRAM 120、相变存储器PCM125以及磁盘130。
中央处理器(CPU)105是计算机***的核心,CPU 105可以调用计算机***100中不同的软件程序实现不同的功能。例如,CPU 105能够实现对 DRAM 120、PCM 125以及磁盘130的访问。可以理解的是,在本发明实施例中,中央处理器(CPU)105仅仅是处理器的一个示例。除了中央处理器(CPU)105 外,处理器还可以是其他特定集成电路(ApplicationSpecific Integrated Circuit, ASIC),或者是被配置成实施本发明实施例的一个或多个集成电路。
北桥芯片110通常用来处理计算机***100中的高速信号,具体的,北桥芯片110可以用于处理CPU、内存以及南桥芯片之间的通信。北桥芯片110 通过前端总线与CPU 105连接。北桥芯片110通过内存总线与DRAM 120和PCM 125连接。根据这种方式,DRAM 120和PCM125均与内存总线连接,通过北桥芯片110与CPU 105通信。本领域技术人员可以理解的是,北桥芯片110可以与CPU 105集成在一起。
南桥芯片115用于负责CPU 105与外部设备之间的通信。CPU105与南桥芯片115可以通过高速***组件互联(Peripheral Component Interconnect Express,PCI-E)总线或直接媒体接口(Direct Media Interface,DMI)总线等通信总线进行通信,以实现CPU 105对外设部件互连标准(PeripheralComponentInterconnect,PCI)接口设备、通用串行总线(Universal Serial Bus,USB)接口设备及串行ATA(Serial Advanced TechnologyAttachment,SATA) 接口设备等设备的控制。例如,南桥芯片115可以通过串行ATA(SerialAdvanced Technology Attachment,SATA)接口连接磁盘130,从而,CPU 105可以通过南桥芯片115与磁盘130进行通信,实现对磁盘130的控制。在本发明实施例中,南桥芯片包括但不限于集成南桥,例如平台控制中枢(Platform Controller Hub, PCH)。
动态随机存储器(Dynamic Random Access Memory,DRAM)120 通过内存总线与北桥芯片110连接。DRAM 120可以通过北桥芯片110实现与 CPU 105之间的通信。CPU 105能够高速访问DRAM 120,对DRAM 120中的任一存储单元进行读或写操作。DRAM 120具有访问速度快的优点,因此通常 DRAM 120作为主内存使用。通常DRAM 120用来存放操作***中各种正在运行的软件、输入和输出数据以及与外存交换的信息等。然而,DRAM 120是易失性的,当计算机关闭电源后,DRAM 120中的信息将不再保存。本领域技术人员知道,DRAM是易失性内存(volatile memory)的一种,实际应用中还可以采用其他的随机存储器(RandomAccess Memory,RAM)作为计算机***的内存。例如,还可以采用静态随机存储器(StaticRandom Access Memory,SRAM) 作为计算机***的内存。
PCM 125是一种新型的非易失性存储器(Non-Volatile Memory, NVM)。在本发明实施例中,PCM 125与DRAM 120共同作为计算机***100 的内存。由于这些新型NVM能够按字节(Byte)寻址,将数据以位(bit)为单位写入非易失性存储器中,因而能够作为内存使用。与DRAM 120相比,由于 PCM 125具有非易失性的特点,从而能够更好地保存数据。在本发明实施例中,可以将能够作为内存使用的非易失性存储器称为存储级内存(StorageClass Memory,SCM)。需要说明的是,在本发明实施例中,图1中所示的PCM 125 仅仅只是SCM的一种示例。除了PCM外,SCM还可以包括:阻变存储器 (Resistive Random AccessMemory,RRAM)、磁性存储器(Magnetic Random Access Memory,MRAM)或铁电式存储器(Ferroelectric Random Access Memory, FRAM)等其他的新型非易失性存储器,在此不对本发明实施例中的SCM的具体类型进行限定。
磁盘130可以通过串行ATA(Serial Advanced Technology Attachment, SATA)接口、小型计算机***接口(Small Computer System Interface,SCSI) 等接口与南桥芯片115连接。磁盘130用于存储数据,作为计算机***100的外存设备使用。通常,作为外存设备的存储介质需要具有非易失性的特点,当计算机关闭电源后,存储于外存的数据仍然会被保存。并且,外存的存储容量较大。可以理解的是,磁盘130仅仅是外存设备的一种示例,作为外存设备的存储器除了可以是磁盘130外,还可以是固态硬盘(Solid State Drives,SSD)、机械硬盘 (Hard Disk Drive,HDD)、光盘、存储阵列等其他能够存储数据的非易失性的存储设备。
可以理解的是,图1所示的计算机***仅仅是计算机***的一种示例。实际应用中,随着计算机技术的发展,新一代的计算机***中,CPU 105可以不通过北桥芯片与内存连接,DRAM 120和PCM 125可以通过双倍速率 (Double Data Rate,DDR)总线与CPU 105进行通信。并且,CPU 105也可以不通过南桥芯片来连接磁盘130。例如,CPU 105可以通过主机总线适配卡(Host Bus Adaptor,HBA)连接磁盘130。在本发明实施例中,并不对具体的计算机***内部器件之间的连接形式进行限定,只要是包括非易失性内存(non-volatilememory,NVM)的计算机***即可。换一种表达方式,本发明实施例中所述的计算机***为包括永久性内存(persistent memory,PM)的计算机***。
在图1所示的计算机***中,为了确保即使在计算机***100出现掉电、宕机或软件故障等情况下,写入的数据也不丢失,保护数据的一致性,在本发明实施例中,可以通过在PCM 125中建立的日志链(log chain)保持数据的一致性。下面将结合图2和图3对图1所示的计算机***100如何在保持数据一致性的基础上减少***开销进行详细介绍。图2为本发明实施例提供的计算机***100的信令示意图,图3为本发明实施例提供的一种访问请求处理方法。并且为了描述方便,图2仅将图1所示的计算机***100中在访问请求处理过程中涉及的器件进行了图示。图3以计算机***100处理写请求为例进行图示。需要说明的是,CPU 105在对访问请求进行处理的过程中,均是通过调用CPU 105数据处理逻辑(图2中未示出)来实现的。可以理解的是数据处理逻辑可以是实现本发明实施例的请求处理方法的程序。在计算机***运行过程中,数据处理逻辑可以存储于DRAM 120中。
本领域技术人员可以知道,文件***是操作***中负责管理和存储文件信息的软件结构。从***角度来看,文件***是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的***。文件***由三部分组成:文件***的接口、对文件操纵和管理的软件集合、文件数据和属性。当进程读文件或写文件时,操作***会先根据文件名打开进程要访问的目标文件,然后再根据接收的读请求或写请求对打开的目标文件进行读操作或写操作。其中,文件名可以是文件的全路径名,是目标文件在磁盘中的位置信息的逻辑描述。例如目标文件的文件名可以为:D:\FILE\file1。在通过文件的全路径名打开文件的过程中,需要按照文件的全路径逐层查找,不停的读磁盘,并在内存创建相应的数据结构以表示目标文件的目录结构。在打开文件后,根据读请求或写请求访问目标文件的过程中,如果还按照目标文件的全路径名对文件进行读操作或写操作,会涉及频繁读磁盘或写磁盘,过程比较复杂,处理时间也会比较长。因此,实际应用中,在操作***打开目标文件的过程中,操作***会为该进程访问的目标文件分配一个文件句柄,并在进程内部维护了一个文件句柄数组。其中,文件句柄可以通过数字来表示,例如,文件句柄可以为:fd 0、fd1或fd 2。文件句柄数组中存储有指向文件描述信息的指针。文件描述信息中包含有指向文件目录结构、元数据(metadata)以及访问位置等信息的指针。文件目录结构用于描述文件的逻辑位置,文件目录结构存储于内存中,进程通过文件目录结构能够定位目标文件的位置。元数据是用于描述文件数据的数据,具体的,元数据中包含有文件数据的组织、数据域及其关系的信息。访问位置用于指示进程当前访问的起始位置。访问位置可以是逻辑上的一个位置。通常,访问位置信息可以为0,用于代表从文件的起始地址开始访问。在打开文件的过程中也可以通过***调用设置文件访问位置为除0之外的其他位置。在访问文件(读/写文件)过程中,进程也可以根据文件句柄通过***调用设置文件访问位置。本领域人员知道,在随机读写的情况下,访问位置可以是通过***调用设置的任意一个访问位置,在顺序读写的情况下,当前访问的访问位置即为上一次访问的结束位置。在对目标文件进行读操作或写操作的过程中,进程可以根据该目标文件的文件句柄在进程维护的文件句柄数组中找到目标文件描述信息。在文件描述信息中查找到文件的元数据及访问位置等信息,从而实现对目标文件的读操作或写操作。可以理解的是,文件句柄是当前进程在读/写目标文件的过程中识别目标文件的一种文件标识。在本发明实施例中,文件标识还可以是除文件句柄之外的其他文件描述符,在此不做限定,只要能够使进程通过文件标识识别出目标文件并找到目标文件的描述信息即可。
如前所述,由于内存具有访问速度快的优点,内存(例如图1中的 DRAM 120和PCM125)可以用来存放操作***中各种正在运行的软件、输入和输出数据以及与外存交换的信息。因此,当访问目标文件时,运行于计算机***100中的操作***会先将待访问的目标文件的文件数据从磁盘130加载到内存中。在本发明实施例中,可以将内存中用于缓存文件数据的内存页称为缓存页。为了描述方便,下面以将目标文件的文件数据加载到DRAM 120中为例进行描述。例如,如图2中所示,DRAM 120中的“缓存页1”和“缓存页2”均用于缓存“文件1”的文件数据210,因此,“缓存页1”和“缓存页2”均为磁盘130中存储的“文件1”的缓存页。可以理解的,不同的缓存页中缓存的文件数据不同。通常,一个页(page)的大小为4k个字节(Byte),即一个页有4096个字节。在本发明实施例中,一个缓存页的大小通常也为4K字节。实际应用中,还可以将缓存页的大小设置为8KB或16KB,在此不对缓存页的大小进行限定。
本发明实施例提供的对访问请求进行处理的过程主要涉及在目标文件被打开后根据目标文件的写请求以及读请求分别对目标文件进行写操作或读操作的过程。如图2以及图3中的步骤300所示,当CPU 105接收到写请求200 时,CPU 105可以调用数据处理逻辑1051处理所述写请求200。写请求200中携带有文件标识、缓存区指针以及待写入数据的大小。所述文件标识为进程打开所述写请求200要访问的目标文件时为所述目标文件分配的文件句柄。进程根据所述文件标识能够找到所述目标文件的文件描述信息。所述缓存区指针用于指向缓存待写入数据的缓存区。本领域技术人员可以知道,缓存区可以是在DRAM120或PCM 125中划分出的一段存储空间。所述写入数据的大小即为缓存所述待写入数据的缓存区的长度。例如,所述待写入数据的大小可以为100个字节。
在步骤305中,CPU 105根据所述文件标识获取访问位置。其中,所述访问位置用于指示所述写请求200在目标文件中写入数据的起始地址。在本发明实施例中,当CPU 105接收写请求200后,CPU 105可以以所述写请求200 中携带的文件标识为索引,通过进程维护的文件句柄数组找到目标文件的描述信息,并在所述目标文件的描述信息中找到所述写请求200要访问的所述目标文件中的访问位置。其中,所述访问位置为所述写请求200在所述目标文件中写入数据的起始地址。在本发明实施例中,所述访问位置可以是一个逻辑的访问位置。例如,访问位置可以第一文件的第89个字节。
在步骤310中,CPU 105根据所述访问位置、所述待写入数据的大小以及缓存页的大小确定N个目标缓存页以及与所述N个目标缓存页中的目标缓存页OCPi对应的log数据片logi(x,y)。其中,i的取值从1到N,所述N为不小于1的整数,x表示该log片相对于该文件页的起始偏移,y表示该log片的长度。例如,log数据片为log1(10,30),则表示该log数据片的起始偏移为第1目标缓存页的第10个字节,且该log数据片的长度为30个字节。在本步骤中,当 CPU 105获得写请求200的访问位置之后,CPU 105可以根据所述访问位置、所述待写入数据的大小以及缓存页的大小计算所述写请求200要访问的目标缓存页的逻辑页号,从而能够根据计算出的逻辑页号确定所述写请求200要访问的目标缓存页。如前所述,缓存页是内存中用于缓存文件数据的内存页。因此,在本发明实施例中,目标缓存页是内存中用于缓存所述目标文件中被所述待写入数据修改的文件数据的内存页。
例如,若所述访问位置为访问第一文件的第89个字节,所述待写入数据的大小为212个字节,也就是说,所述写请求200要从第一文件的第89个字节开始向第一文件中写入212个字节。为了描述方便,以一个缓存页的大小为 100个字节为例进行描述。根据这种方式,第一文件的第0-99个字节构成第一文件的第1页p1,第一文件的第100-199个字节构成第一文件的第2页p2,第一文件的第200-299个字节构成第一文件的第3页p3,第一文件的第300-399个字节构成第一文件的第4页p4,依次类推。因此,CPU 105可以根据访问位置、待写入数据大小以及缓存页的大小计算所述写请求要访问第一文件的第1页至第4 页,也就是说,第一文件的第1页至第4页被确定为目标缓存页,i的取值为1~4。
进一步的,CPU 105可以确定分别写入第一文件的第1页至第4页中的4个数据片:log1(89,11)、log2(0,100)、log3(0,100)以及log4(0,1)。具体的, CPU 105可以确定待写入第1页的log数据片log1(89,11),待写入第2页的log 数据片log2(0,100),待写入第3页的log数据片log3(0,100)以及待写入第4页的 log数据片log4(0,1)。其中,log1(89,11)用于表示从第1页的第89个字节的位置开始的11个字节,log2(0,100)用于表示从第2页的第0个字节的位置开始的100 个字节,log3(0,100)用于表示从第3页的第0个字节的位置开始的100个字节, log4(0,1)用于表示从第3页的第0个字节的位置开始的1个字节。在本发明实施例中,log数据片是指待写入每一个目标缓存页的数据的集合。换一种表达方式, log数据片是每一个目标缓存页的修改数据。
在步骤315中,CPU 105确定每一个目标缓存页OCPi对应的log数据片logi(x,y)的位置信息。在CPU 105获得每一个目标缓存页OCPi对应的log 数据片logi(x,y)后,进一步的,CPU 105还可以根据待写入每一个目标缓存页中的数据片的大小将缓存区中缓存的待写入数据划分为4个部分,从而可以获得与每一个目标缓存页对应的log数据片的位置信息。其中,log数据片的位置信息是指的待写入每一个目标缓存页的数据在写请求200中携带的缓存区指针指向的缓存区中的位置。例如,如图4所示,CPU 105能够根据待写入4个页面的数据片的信息将缓存区中缓存的待写入数据划分为4个部分:buf1(0,11)、 buf2(11,100)、buf3(111,100)和buf4(211,1),从而得到各个log数据片的位置信息。其中,buf1(0,11)用于表示log1(89,11)的数据为缓存区中从第0个字节开始的11 个字节,buf2(11,100)用于表示log2(0,100)的数据为缓存区中从第11个字节开始的100个字节,buf3(111,100)用于表示log3(0,100)的数据为缓存区中从第111 个字节开始的100个字节,buf4(211,1)用于表示log4(0,1)的数据为缓存区中从第 211个字节开始的1个字节。
可以理解的是,实际应用中,写请求200要访问的目标缓存页可能是一个缓存页也可以是多个缓存页,也就是说,N的值可以是不小于1的整数。换一种表达方式,一个访问请求中携带的待写入数据可以是只写入一个页面中的数据,也可以是需要写入多个页面中的数据。上面是以写入多个目标缓存页为例进行说明。在另一种情形下,以访问位置为第一文件的第89个字节,且一个页面的大小为100个字节为例,若待写入数据的大小为5个字节,也就是说,CPU 105需要根据写请求200从第一文件的第89个字节开始向第一文件中写入5个字节。在这种情况下,CPU 105只会涉及对第一文件的第1页进行修改,即N=1。从而,CPU105可以根据所述第一访问位置、所述待写入数据的大小以及缓存页的大小计算写入第一页的log数据片为logp1(89,5)。进一步的,CPU 105可以获得写入该目标缓存页的log数据片的位置信息:buf(0,5),该位置信息为写请求 200中携带的缓存区指针指向的缓存区。
在步骤320中,CPU 105判断所述PCM 125中是否存储有目标缓存页OCPi的日志链log chain,所述目标缓存页OCPi的log chain用于记录目标缓存页OCPi的至少一次修改数据信息。当所述PCM 125中未存储有目标缓存页 OCPi的logchain结构时,该方法进入步骤325,否则该方法进入步骤330。本领域技术人员可以知道,当CPU 105接收写请求200后,CPU105还可以根据写请求200中携带的文件标识获得所述目标文件的元数据信息。在本发明实施例中,目标文件的元数据信息中包含有所述目标文件的缓存页结构信息。当CPU 105 在步骤210中确定出所述写请求200待访问的所述N个目标缓存页后,CPU 105 可以从所述目标文件的元数据信息中获得所述N个目标缓存页的缓存页结构。进而能够根据缓存页结构中记录的信息判断所述PCM 125中是否存储有目标缓存页OCPi的log chain。
图5为本发明实施例提供的一种缓存页结构及日志链结构的示意图。在本发明实施例中,如图2所示,缓存页可以缓存于所述DRAM120中,缓存页的log chain可以存储于PCM125中。如图5所示,缓存页结构405中图示了多个缓存页的缓存页结构。例如,图5中所示的第一缓存页结构、第二缓存页结构以及第N缓存页结构,其中所述N为大于2的整数。本领域技术人员可以知道,缓存页结构用于描述缓存页的元数据信息,例如,缓存页结构可以用于描述缓存页的偏移位置、大小以及是否加锁等信息。在本发明实施例中,每个缓存页都有相应的缓存页结构,每个缓存页结构中还包含有该缓存页的日志链log chain的信息。具体的,每个缓存页结构中至少包含有下述字段:log head、log tail、logs、 dirty和logdirty,下面将分别对这几个字段进行描述。
log head日志头,用于指向所述缓存页的日志链(log chain)的首地址,其中,所述日志链存储于所述PCM 125中,所述缓存页的log chain的首地址中可以包括所述缓存页所属的文件的inode以及所述缓存页的逻辑页号,其中,文件的inode用于确定所述缓存页所属的文件,所述逻辑页号用于确定缓存页。
log tail日志尾,用于指向所述缓存页的log chain中最后一个数据节点的首地址。在本发明实施例中,每一个缓存页的日志链由对所述缓存页的至少一次修改过程中动态生成的数据节点组成。一个数据节点用于记录该缓存页在一次修改过程中的一个log数据片的信息,其中,log数据片是指该缓存页在一次修改过程中的修改数据。每一个数据节点中包含有存储log数据片的数据域、存储其他数据节点地址的指针域及其他信息域,所述其他信息域可以用于存储该数据节点的地址等其他信息。
logs日志,用于指示所述缓存页的log chain中的数据节点的数量。
dirty脏,用于指示缓存页中是否有脏数据。换一种表达方式,“dirty”用于指示缓存页与磁盘中的文件数据是否同步。例如,当“dirty”指示位为1时,表示缓存页中存在脏数据,表示缓存页中的数据与磁盘中的文件数据不一致。当“dirty”指示位为0时,表示缓存页中的数据与磁盘中的文件数据一致。
log dirty日志脏,用于指示缓存页与该缓存页的日志链log chain的数据节点指示的log数据片是否同步。例如,当“log dirty”字段为1时,表示该缓存页的log chain的数据节点指示的log数据片中有新数据,数据节点中的数据与缓存页中的数据不一致。当“logdirty”字段为0时,表示该缓存页的log chain 的数据节点指示的log数据片与缓存页中的数据一致。换一种表达方式,当“log dirty”字段为1时,表示该缓存页的log chain的数据节点指示的log数据片尚未被更新到缓存页中。当“log dirty”字段为0时,表示该缓存页的log chain的数据节点指示的log数据片已经被更新到缓存页中。
在本发明实施例中,当CPU 105确定了目标缓存页后,以一个目标缓存页为例,CPU105可以从所述目标文件的元数据信息中获得所述目标缓存页的缓存页结构,从而CPU 105能够根据所述目标缓存页的缓存页结构中的“log head”指示位或“log tail”指示位判断所述PCM 125中是否存储有所述目标缓存页的日志链(log chain)。具体的,当CPU 105在所述目标缓存页OCPi的缓存页结构中确定“log head”或“log tail”为空时可以确定该目标缓存页OCPi尚未被修改过,该目标缓存页没有log chain。当CPU 105在所述目标缓存页OCPi的缓存页结构中确定“log head”或“log tail”中包含有地址时,说明该目标缓存页已经被修改过,且CPU 105可以根据log head字段中记录的地址指针找到所述目标缓存页OCPi的log chain。以图5中所示的第一缓存页为目标缓存页为例,当第一缓存页结构中的loghead为空时,说明所述第一缓存页没有log chain。当第一缓存页结构中的log head中包含有地址时,说明所述PCM 125中存储有所述第一缓存页的log chain。可以理解的是,实际应用中,也可以通过所述目标缓存页的缓存页结构中的“logs”或“log dirty”等字段来判断该目标缓存页是否有log chain。例如,当logs为0时,说明该目标缓存页没有log chain。当“logs”不为0时,说明该目标缓存页有log chain。本发明实施例中不对判断所述PCM 125中是否存储有所述目标缓存页的日志链(log chain)的具体方式进行限定。
在步骤325中,CPU 105在所述PCM 125中为所述目标缓存页OCPi创建log chain。当CPU 105在步骤320中根据所述目标缓存页的缓存页结构中的信息判断所述PCM 125中未存储有目标缓存页OCPi的log chain时,CPU 105 可以在所述PCM 125中为所述目标缓存页创建log chain。在为目标缓存页创建 log chain时,可以根据待写入数据的大小在所述PCM 125中分配物理空间,并在该分配的物理空间中初始化log chain的数据结构。
在本发明实施例中,所述PCM 125中存储有每一个被更新的缓存页的log chain。换一种表达方式,每一个被更新的缓存页都有一个log chain。log chain用于记录缓存页的至少一次修改信息。如图5所示,在实际应用中,可以为文件***创建一个全局日志链(global log chain)结构,具体可以如图5中的 410所示。该全局日志链结构410包含多个缓存页的日志链。每个缓存页的日志链可以看成是该全局日志链中的一个节点或者子日志链。日志链结构410中可以包括控制信息4100以及各缓存页的日志链。其中控制信息4100中包括全局日志头(global log head)指针以及全局日志尾(global log tail)指针。Globallog head 指针用于指向全局日志链结构410中的第一个缓存页的日志链的首部。具体的,global log head指针用于指向所述PCM 125中的全局日志链结构的首地址。 Global logtail指针用于指向全局日志链结构410中最后一个缓存页的日志链的首地址。在本发明实施例中,缓存页的日志链的首地址即为图5中所示的缓存页地址,缓存页地址可以包括所述缓存页所属的文件的inode以及所述缓存页的逻辑页号。文件的inode用于确定所述缓存页所属的文件,所述逻辑页号用于确定缓存页。
如图5所示,每一个缓存页的日志链由对所述缓存页的至少一次修改过程中形成的数据节点组成。数据节点中包含有log数据片的信息以及指向其他数据节点的指针等信息。所述log数据片的信息可以包括log数据片或log数据片在PCM 125中的存储地址。实际应用中,当CPU 105为某个缓存页创建log chain之后,需要将全局日志链的控制信息中的global log tail指针指向所述新创建的缓存页的log chain结构的首地址,根据这种方式,可以将所述新创建的缓存页的log chain按照创建时间的先后顺序挂载在该文件***的全局log chain中,从而在计算机***出现故障后恢复过程中能够根据全局log chain中的各个缓存页的log chain对写入计算机***中的数据进行恢复,从而能够保持数据的一致性,且便于***管理。
为了描述方便,以图5中的第一缓存页的日志链4105为例对每一个缓存页的日志链的结构进行具体描述。如图5所示,第一缓存页的日志链4105 包括第一数据节点41051以及第二数据节点41052。在第一数据节点41051和第二数据片41052节点中均可以包括log数据片的信息、指向其他数据节点的指针以及log数据片的逻辑位置信息等。可以理解的是,对第一缓存页修改一次即可得到一个log数据片。在本发明实施例中,可以将对第一缓存页修改过程中的log 数据片记录于第一缓存页的log chain 4105中。例如,可以将在所述第一缓存页的第一次修改过程中获得的第一log数据片存储于第一数据节点41051中,将在所述第一缓存页的第二次修改过程中获得的第二log数据片存储于第二数据节点 41052中。
在本发明实施例中,log chain中的“Log数据片”字段用于记录所述缓存页的本次修改数据的信息。例如,如图5中所示,第一数据节点41051中的“log数据片”用于指示第一缓存页的第一次修改数据,第二数据节点41052中的“log数据片”用于指示第一缓存页的第二次修改数据。实际应用中,在一种情形下,可以在“log数据片”部分直接记录修改的数据,在另一种情形下,也可以将修改的数据存储于PCM 125中的其他存储空间,然后在“log数据片”部分记录修改的数据的地址。在本发明实施例中不对log-chain结构中的数据存储方式进行限定,只要能够根据log-chain查找到缓存页的多次修改数据即可。
在将log数据片记录于log chain的过程中,可以按照对目标缓存页的修改顺序依次记录各个log数据片。在本发明实施例中,为了记录对目标缓存页的修改顺序,在logchain中的每个数据节点中均包含有指向其他数据节点的指针的信息。指向其他数据节点的指针可以包括如下字段:上一个log地址、下一个log地址等字段。其中,“上一个log地址”用于指示上一个数据节点的地址。具体的,“上一个log地址”用于指示上一个数据节点在SCM中的起始地址。例如,如图5所示,由于“页面内偏移”字段是数据节点中的首个字段,因此,“上一个log地址”可以指向上一个数据节点中的log数据片中的“页面内偏移”字段。所述上一个数据节点为本数据节点的前一次***的数据节点,用于指示目标缓存页在前一次修改过程中的修改数据的信息。“下一个log地址”用于指示下一个数据节点的地址。具体的“下一个log地址”用于指示下一个数据节点在SCM 中的起始地址。例如,如图5所示,“下一个log地址”可以指向下一个数据节点中的log数据片中的“页面内偏移”字段。所述下一个数据节点为本数据节点的下一次***的数据节点,用于指示目标缓存页在下一次修改过程中的修改数据的信息。可以理解的是,一个缓存页的日志链结构中的首个数据节点中的“上一个log地址”字段为空。例如,图4中的第一数据节点41051为第一缓存页的log chain4105中的首个数据节点。因此,在第一数据节点41051中,“上一个log地址”指示位为空。类似的,一个缓存页的日志链中的最后一个数据节点中的“下一个log地址”字段为空。当一个数据节点中的“下一个log地址”指示位为空时说明该数据节点为与该数据节点对应的缓存页的最后一次修改。
在本发明实施例中,为了记录log数据片在目标缓存页中的具体信息,每个数据节点中还包含有log数据片的页内位置信息。log数据片的页内位置信息可以包括:页面内偏移、log数据长度等信息。log数据片的页内位置是指log 数据片在目标缓存页中的位置。具体的,“页面内偏移”用于指示该log数据片在缓存页中的起始位置。“log数据长度”用于指示该log数据片的长度信息。
在本发明实施例中,为了建立缓存页的log chain与缓存页的联系,在每个缓存页的log chain中,该缓存页的第一个数据节点中还包括“缓存页地址”信息,其中,“缓存页地址信息”可以包括文件inode以及逻辑页号。其中,文件inode用于指示该log chain所属的文件,逻辑页号用于指示该log chain所属的缓存页。如图4所示,第一缓存页的第一个数据节点41051中的“缓存页地址”字段中包括有第一缓存页所属的文件的inode和第一缓存页的逻辑页号。进一步的,为了建立多个缓存页的log chain之间的联系,在每个缓存页的第一个数据节点中还包含有指示下一个页面的指针信息,“下一个页面”用于指示文件***中下一个被修改的文件的缓存页的log chain中的第一个数据节点。根据“下一个页面”的指针能够找到该文件***中下一个被修改的缓存页的log chain。
在步骤330中,CPU 105在为所述目标缓存页OCPi的log chain中***数据节点,所述***的数据节点中包含有log数据片logi(x,y)的信息。在本发明实施例中,一种情形下,当CPU 105在所述PCM 125中为所述目标缓存页OCPi创建log chain之后,该方法可以进入步骤330,以便CPU 105在创建的log chain 中***数据节点并记录本次修改过程中的log数据片的信息。在另一种情形下,当CPU 105在步骤320判断所述PCM 125中存储有目标缓存页OCPi的log chain 时,该方法可以进入步骤330,CPU 105可以在目标缓存页OCPi已有的log chain 中***数据节点并记录本次修改过程中的log数据片的信息。其中,log数据片的信息具体可以包括log数据片或log数据片在所述PCM 125中的存储地址。log 数据片的信息还可以包括指向其他数据节点的指针以及log数据片的位置等信息。例如,当CPU 105为第一缓存页创建了log chain结构后,可以在第一缓存页的 log chain结构中记录第一log数据片的信息。具体的,可以直接将第一log数据片中的数据记录在第一数据节点41051中的“log数据片”字段中,也可以将第一 log数据片在PCM 125中的存储地址记录在第一数据节点41051中的“log数据片”字段中,在此不做限定。并且,还可以在第一数据节点41051中记录第一log 数据片的位置、长度以及指向其他数据节点的指针等信息。
为了描述清楚,以前述的待写入第1页的log数据片为log1(89,11),且第1页为图4所示的第一缓存页为例。当CPU 105为第一缓存页创建log chain 4105后,可以在第一数据节点41051的“缓存页地址”字段记录所述第一文件的inode以及该第一缓存页的逻辑页号,并在第一数据节点41051的“页面内偏移”字段中记录89,在“log数据长度”中记录11,在“log数据片”字段中记录 buf1(0,11)的数据或者在“log数据片”字段中记录数据片log1(89,11)在PCM 125 中的存储地址。
本领域技术人员可以知道,由于链表结构中的各个节点是可以在***运行过程中动态生成并***的,因此,第一缓存页的log chain 4105中的各个数据节点也是可以动态生成并***的。当有新的数据节点生成时,需要相应更新该链表中的已有数据节点中的指向其他数据节点的指针,同时也需要更新缓存页结构中的log tail指针。例如,第一数据节点41051为第一缓存页的第一个数据节点,因此在创建第一数据节点41051时,第一数据节点41051中的“上一个log 地址”以及“下一个log地址”为空。当***运行过程中,动态生成第二数据节点 41052后,可以根据第二数据节点41052更新第一数据节点41051中的“下一个 log地址”的指针,将第一数据节点41051中的“下一个log地址”的指针指向第二数据节点41052在PCM 125中的起始地址。并且,还需要将第一缓存页结构中的log tail指针更新为指向第二数据节点41052在PCM 125中的起始地址。具体的,由于“页面内偏移”字段为第二数据节点41052的首个字段,因此,可以将第一数据节点41051中的“下一个log地址”的指针指向第二数据节点41052中“页面内偏移”字段,并将第一缓存页结构中的log tail指针更新为指向第二数据节点 41052中“页面内偏移”字段。其中,“页面内偏移”用于指示第二数据节点41052 的log数据片在第一缓存页中的位置。
在本发明实施例中,当CPU 105在步骤320判断所述PCM 125中存储有目标缓存页OCPi的log chain时,在本步骤中,CPU 105可以在目标缓存页 OCPi已有的log chain的尾部***数据节点并记录本次修改过程中的log数据片的信息。例如,当在步骤320中CPU 105根据第一缓存页结构中的log tail字段不为空时,可以确定所述PCM 125中存储有所述第一缓存页的log chain结构。换一种表达方式,当第一缓存页结构中的log tail字段不为空时,说明在本次修改之前第一缓存页已经被修改过。在这种情况下,在本步骤中,CPU 105可以根据第一缓存页结构中的log tail字段查找到第一缓存页的log chain 4105中的最后一个数据节点。在本发明实施例中,第一缓存页的最后一个数据节点中存储有距离当前时间最近一次修改的数据信息,或者说第一缓存页的最后一个数据节点中存储有第一缓存页的最后一个修改版本。当CPU 105找到第一缓存页的最后一个数据节点后,CPU 105可以将在所述最后一个数据节点之后附加一个新的数据节点,在附加的所述新的数据节点中存储有所述数据片logi(x,y)的信息。以第一缓存页的log chain中最后一个数据节点为第一数据节点41051,新修改的数据为数据片logi(x,y),且新的数据节点为第二数据节点41052为例,CPU 105可以在第二数据节点41052中存储数据片logi(x,y)的信息。其中,所述数据节点41052 中存储的log数据片logi(x,y)(也可称为第二log数据片)为对所述第一目标缓存页在本次修改过程中的修改数据,具体的,所述第二log数据片是从所述缓存区指针指向的缓存区中获得的至少一部分待写入数据。所述数据片logi(x,y)的信息可以包括数据片logi(x,y)、log数据长度、页面内偏移及指向其他数据节点的指针信息。在本发明实施例中,在***新的数据节点后,CPU105可以根据新***的数据节点更新目标缓存页OCPi的缓存页结构。具体的,CPU 105可以将所述缓存页的log tail指针指向新***的数据节点中的“页面内偏移”,并且更新 OCPi的缓存页结构中的数据节点的数量。例如,在将第二数据节点41052***第一缓存的log chain 4105后,CPU 105可以将第一缓存页的缓存页结构中的log tail指向第二数据节点41052中的“页面内偏移”,并更新所述第一缓存页的缓存页结构中“logs”指示位,更新后的“logs”指示位用于指示所述第一缓存页的log chain中包含有两个数据节点。
可以理解的是,本发明实施例中提供的这种将目标缓存页的修改数据按照修改顺序依次记录在log chain中的方式,便于通过log chain中的数据节点的先后顺序识别出所述目标缓存页的不同更新版本。实际应用中,在依次***数据节点的过程中,除了依次在log chain的尾部按照从前往后的顺序***数据节点外,也可以在log chain的头部按照从后往前的顺序依次***数据节点。在本发明实施例中不对具体的***顺序进行限定,只要能够按照log chain中的数据节点识别出目标缓存页的更新顺序即可。
当在步骤330中,CPU 105在目标缓存页OCPi的log chain中***新的数据节点后,如步骤335所示,CPU 105还可以进一步判断目标缓存页OCPi的log chain中是否包含有至少两个数据节点。具体的,在步骤335中,CPU 105 可以根据目标缓存页OCPi的缓存页结构中的“logs”标识位进行判断。当CPU 105 判断目标缓存页OCPi的log chain中包含有至少两个数据节点时,该方法进入步骤340。当CPU 105判断目标缓存页OCPi的log chain中包含有至少两个数据节点时,则CPU 105返回执行步骤330以处理下一个访问请求。
在步骤340中,CPU 105判断所述***的数据节点中记录的log数据片logi的页内位置是否与所述其他数据节点记录的log数据片的页内位置有重叠。如前所述,log数据片的页内位置是指log数据片在目标缓存页中的位置。log数据片的页内位置具体可以根据log chain中的“页面内偏移”和“log数据长度”这两个信息获得。例如,如图4所示,若第一数据节点41051中的“页面内偏移”为30,“log数据长度”为40,则第一数据节点41051中的log数据片的页内位置为第一缓存页中的第30-70个字节。当在步骤330中,CPU 105在所述目标缓存页的log chain中***新的数据节点后,在步骤340中,CPU 105可以根据所述logchain中的各个数据节点中记录的log数据片的页内位置信息,判断新***数据节点中记录的log数据片logi的页内位置是否与其他数据节点中记录的log 数据片的页内位置有重叠。实际应用中,CPU 105可以将新***的数据节点中记录的log数据片logi的页内位置分别与其他数据节点中记录的log数据片的页内位置进行比较。例如,如图4所示,CPU 105可以根据第二数据节点41052中记录的log数据片的页内位置与第一数据节点41051中记录的log数据片的页内位置进行比较,判断所述第二数据节点41052中记录的log数据片的页内位置与所述第一数据节点41051中记录的log数据片的页内位置是否有重叠。在本步骤中,若CPU 105判断所述***的数据节点中记录的log数据片logi的页内位置与所述其他数据节点记录的log数据片的页内位置有重叠,则该方法进入步骤345。若 CPU 105判断所述***的数据节点中记录的log数据片logi的页内位置与所述其他数据节点记录的log数据片的页内位置没有重叠,CPU 105返回执行步骤330 以处理下一个访问请求。在本发明实施例中,若CPU 105判断所述***的数据节点中记录的log数据片logi的页内位置与所述其他数据节点记录的log数据片的页内位置没有重叠,则说明所述新***的数据节点以及所述logchain中的其他数据节点中记录的log数据片均为所述目标缓存页的最新修改数据。
在步骤345中,CPU 105分别在所述其他数据节点中,将所述其他数据节点中记录的log数据片中与所述***的数据节点中的log数据片重叠的数据设置为无效数据。从而使目标缓存页OCPi的log chain记录的数据为最新修改数据。具体的,在本步骤中,CPU 105将所述其他数据节点中记录的log数据片中与所述***的数据节点中的log数据片重叠的数据设置为无效数据的方式可以采用以下举例几种方式。为了描述方便,下面以图4所示的第一缓存页的log chain 4105中的第一数据节点41051和第二数据节点41052为例进行描述。其中,以第二数据节点41052为CPU 105处理写请求200的过程中新***的数据节点为例。
在一种情形下,第二数据节点41052中记录的log数据片的页内位置包括第一数据节点41051中记录的log数据片的页内位置。换一种表达方式,第一数据节点41051中记录的log数据片被本次写请求处理过程中新***的第二数据节点41052中记录的log数据片完全覆盖。或者说,在本次写操作过程中,CPU 105根据写请求200对第一数据节点41051中记录的log数据片中的全部数据进行了改写。例如,若第一数据节点41051中记录的log数据片的页内位置为第一缓存页的第30-60个字节,第二数据节点41052中记录的log数据片的页内位置为第一缓存页的第20-80个字节,则第二数据节点41052中记录的log数据片页内位置包括第一数据节点41051中记录的log数据片的页内位置。在这种情形下, CPU 105将所述其他数据节点中记录的log数据片中与所述***的数据节点中的 log数据片重叠的数据设置为无效数据的方式可以是:1.CPU 105可以将第一数据节点41051删除;2.CPU 105也可以在第一数据节点41051中增加一个无效标识位,用于指示第一数据节点41051中记录的数据无效;或3.CPU 105还可以将第一数据节点41051中的“log数据长度”信息修改为0,用以指示第一数据节点41051中没有包括修改的数据。
在又一种情形下,第二数据节点41052中记录的log数据片的页内位置与第一数据节点41051中记录的log数据片的页内位置部分重叠。换一种表达方式,在本次写操作过程中,CPU 105根据写请求200对第一数据节点41051中记录的log数据片进行了部分修改。在这种情形下,CPU 105可以根据第一数据节点41051的log数据片与所述第二数据接的41052的log数据片重叠的数据的页内位置修改所述第一数据节点41051中的log数据片的页内位置信息,以将所述第一数据节点41051中记录的log数据片中与所述***的第二数据节点41052 中的log数据片重叠的数据设置为无效数据。具体的,CPU 105可以通过修改第一数据节点41051中的“页内偏移”和“log数据长度”字段中的至少一个信息,来将所述第一数据节点41051中记录的log数据片中与所述***的第二数据节点 41052中的log数据片重叠的数据设置为无效数据。例如,若第一数据节点41051 中记录的log数据片的页内位置为第一缓存页的第30-60个字节,第二数据节点 41052中记录的log数据片的页内位置为第一缓存页的第50-80个字节,则确定第二数据节点41052中记录的log数据片的页内位置与第一数据节点41051中记录的log数据片的页内位置部分重叠。在这种情形下,CPU 105可以将第一数据节点41051中的“log数据长度”由30个字节修改为20个字节。修改后的第一数据节点41051中的记录的log数据片的页内位置从第一缓存页的第30个字节开始的20个字节。根据这种方式,第一数据节点41051中的记录的log数据片是第一缓存页的第30-50个字节的修改数据。而第一数据节点41051的50-60个字节的数据通过这种方式被设置为无效数据。
在又一种情形下,第一数据节点41051中记录的log数据片的页内位置包括第二数据节点41052中记录的log数据片的页内位置。换一种表达方式,在本次写操作过程中,CPU105根据写请求200只对第一数据节点41051中记录的log数据片中的部分数据进行了改写。在这种情形下,CPU 105可以通过将所述其他数据节点分别***成两个子节点的方式来将所述其他数据节点中记录的log数据片中与所述***的数据节点中的log数据片重叠的数据设置为无效数据。例如,CPU 105可以通过将所述第一数据节点41051***成第一子数据节点和第二子数据节点,***后的第一子数据节点和第二子数据节点分别记录第一数据节点41051的log数据片中未与第二数据节点41052中的log数据片重叠的数据,从而将第一数据节点41051的log数据片中与第二数据节点41052中的log数据片重叠的数据设置为无效数据。其中,所述第一子数据节点以及所述第二子数据节点的数据结构与所述第一数据节点的数据结构相同。所述第一数据节点41051 中的被无效的数据数据不包括在所述第一子数据节点中记录的log数据片的信息以及在所述第二子数据节点中记录的log数据片的信息。需要说明的是,***后的两个子数据节点在log chain中可以位于第一数据节点41051的位置。具体的,在第一数据节点41051***成第一子数据节点和第二子数据节点之后,第一子数据节点中的“上一个log地址”的信息与第一数据节点41051中的“上一个log 地址”的信息相同,第一子数据节点中的“下一个log地址”用于指向第二子数据节点的起始地址。第二子数据节点中的“上一个log地址”用于指向第一子数据节点的起始地址,第二子数据节点中的“下一个log地址”的信息与第一数据接的 41051中的“下一个log地址”的信息相同。
例如,若第一数据节点41051中记录的log数据片的页内位置为第一缓存页的第30-60个字节,第二数据节点41052中记录的log数据片的页内位置为第一缓存页的第40-50个字节,则CPU 105可以确定第一数据节点41051中记录的log数据片的页内位置包括第二数据节点41052中记录的log数据片的页内位置。在这种情况下,CPU 105可以将第一数据节点41051***成两个子数据节点,其中,第一个子数据节点中记录的log数据片为:log1(30,10),用于表示第一缓存页中第30个字节开始的10个字节的修改数据。第二子数据节点中记录的 log数据片为:log1(51,10),用于表示第一缓存页中第51个字节开始的10个字节的修改数据。根据这种方式,第一子数据节点中的log数据片的“页内偏移”为30,“log数据长度”为10。第二子数据节点中的log数据片的“页内偏移”为 51,“log数据长度”为10。从而,通过这种方式,第一数据节点41051中的第 40-50个字节(与第二数据节点41052中的log数据片重叠部分的数据)被设置为无效数据。
可以理解的是,上述几种情形仅仅只是本发明实施例提供的几种无效数据的方式。实际应用中,在确定新***的数据节点中的log数据片的页内位置与log chain中的其他数据节点记录的log数据片的页内位置有重叠后,还可以采用例如删除重叠区域的数据等方式无效其他数据节点中记录的重叠部分的数据。在本发明实施例中不对具体无效数据的方式进行限定。通过本发明实施例提供的方法,在目标缓存页的log chain中***新的数据节点中,通过将新***的数据节点中记录的log数据片与其他数据节点中记录的log数据片进行比较,并无效其他数据节点中与所述新***的数据节点中的log数据片重叠的部分数据的方式,可以使所述目标缓存页的log chain只记录所述目标缓存页的最新修改数据。
可以理解的是,在每一个写请求处理过程中,当在目标缓存页的log chain中新***数据节点时,均需要将当前***的数据节点中的log数据片与该 log chain中已有的数据节点的log数据片进行比较,以无效该log chain中已有的数据节点中与当前***的数据节点中的log数据片重复的数据。通过这种方式,可以使目标缓存页的log chain中的每一个数据节点记录的均为目标缓存页的最新修改数据。并且,由于log chain中的各数据节点均是依据对缓存页的修改时间的先后顺序依次获得的,根据这种方式,可以根据目标缓存页的log chain中记录的log数据片来确定目标缓存页的不同修改版本。
在本发明实施例中,CPU 105根据写请求200将待写入的数据205 写入PCM 125中(如图2所示)后,可以向应用响应写入成功消息,所述写入成功消息用于指示待写入数据已经成功被写入存储设备中,从而可以减少访问请求的处理时延。可以理解的是,实际应用中,CPU 105可以在将待写入数据写入目标缓存页的log chain中之后(如步骤330所示)即向应用返回写入成功消息,也可以在根据新***的数据节点更新了目标缓存页的logchain中其他数据节点的信息(如步骤345所示)之后再向应用返回写入成功消息。
需要说明的是,在本发明实施例中,为了描述清楚,从步骤320开始,以CPU 105向一个目标缓存页写数据为例进行描述。实际应用中,当在步骤310中CPU 105确定有多个目标缓存页时,CPU 105可以对每个目标缓存页依次分别执行步骤320至步骤345的动作之后,再返回执行步骤300,以处理下一个访问请求。
在本发明实施例中,当CPU 105根据访问请求需要对某个文件的数据进行修改时,CPU 105并没有直接将修改的数据写入该文件的缓存页中,而是将修改的数据写入PCM 125空间中,并采用log chain的形式记录缓存页每一次修改过程中的修改数据的信息。并且,在本发明实施例中,缓存页的log chain 中记录的log数据片均为该缓存页的最新修改数据。由于PCM 125具有非易失性,这种在PCM 125中采用log chain来存储目标缓存页的最新修改数据的方式,能够将目标缓存页在多次修改过程中的修改数据按照时间先后顺序记录下来,从而便于识别目标缓存页的修改版本,保证了存储的数据与写入的数据之间的一致性。图3提供的访问请求处理方法与现有技术中通过维护内存块的不同状态来保持数据一致性的方式相比,由于状态维护相对于写更新的过程来说对***的开销较大,因此,本发明提供的计算机***100在访问请求处理过程中的***开销较小。并且,由于本发明实施例中log数据片的大小可以比页(page)更小,因此,可以支持对比页更小粒度的文件修改,修改方式更加灵活。
如图2所示,在本发明实施例提供的计算机***100中,在将待写入数据205以图3所示的方法写入PCM 125后,在一些情况下可以触发合并操作,将PCM 125中的log数据片更新到DRAM 120的缓存页中,并将合并后的缓存页写入磁盘130中。例如,一种情形下,为了节省***存储空间,需要及时回收PCM 125的存储空间,并回收缓存页的log chain。在这种情况下,CPU 105 需要先将PCM 125中的log数据片更新到DRAM 120中,然后将DRAM 120中更新后的缓存页写入磁盘130中,以更新磁盘中的文件数据,保持数据的一致性。本发明实施例中,当设定的条件满足时,例如,当达到设定的时间或PCM 125 中的存储空间低于预设阈值时,CPU 105可以执行前述的数据合并操作。另一种情形下,当计算机***在处理写数据的过程中遇到故障时,在计算机***被重新启动后,可以根据所述PCM 125中的log chain进行数据写回恢复,保证写入的数据不丢失,以保持数据的一致性。在这种情形下,需要先将PCM 125中的log 数据片更新到DRAM 120的缓存页中,再将更新后的缓存页写入磁盘130中。
下面将结合图6对图2中所示的将log数据片215更新到DRAM 120 的缓存页中并写入磁盘130中的过程进行描述。图6为本发明实施例提供的一种数据合并方法,可以理解的是,对每一个有log chain的缓存页都可以按照图6 所示的方法进行合并操作。为了描述方便,仍然以图3中所述的任意一个目标缓存页OCPi的log chain为例进行描述。
在步骤600中,CPU 105根据所述目标缓存页OCPi的log chain中记录的至少一个log数据片的信息将所述log chain中的至少一个log数据片215更新到所述目标缓存页中,以获得更新后的目标缓存页OCPi。在本发明实施例中,由于目标缓存页OCPi的log chain中记录的log数据片215均为所述目标缓存页的最新修改数据,因此,在本步骤中,CPU 105可以根据目标缓存页OCPi的log chain中记录的每一个log数据片215的页内位置信息,将各log数据片215更新到目标缓存页中,以得到更新后的目标缓存页OCPi。具体的,CPU 105可以用log chain中的各个log数据片分别替换所述目标缓存页OCPi中与各log数据片的位置相同的数据,以得到更新后的目标缓存页。以第一缓存页的log chain 中包括第一数据节点41051和第二数据节点41052,且第一数据节点41051中记录的log数据片的页内位置为第30-50字节,第二数据节点41052中记录的log 数据片的页内位置为第80-90字节为例。CPU105可以用第一数据节点41051中记录的log数据片替换所述第一缓存页中第30-50字节的数据。并且,CPU 105 可以用第二数据节点41052中记录的log数据片替换所述第一缓存页中第80-90 字节的数据,从而得到更新后的第一缓存页。
在获得更新后的目标缓存页后,在步骤605中,CPU 105将更新后的目标缓存页中的数据220存储于所述计算机***的磁盘130中。通过这种方式,可以将修改的数据写入磁盘130中,以保持数据的一致性。实际应用中,当将目标缓存页的log chain中记录的log数据片更新到目标缓存页并写入磁盘130中后,可以回收所述目标缓存页的log chain。例如,CPU 105可以删除所述缓存页的log chain,从而能够回收PCM 125的存储空间。
实际应用中,在需要回收log chain占用的存储空间时,CPU 105具体可以通过每一个缓存页的缓存页结构中的“dirty”字段确定是否需要将该缓存页的数据刷回磁盘130中。以一个缓存页为例,当“dirty”字段为1时,CPU 105 确定需要将该缓存页的数据刷回磁盘130中,当“dirty”字段为0时,CPU 105确定不需要将该缓存页的数据刷回磁盘130中。在CPU 105确定需要将该缓存页的数据刷回磁盘130中时,CPU 105还需要进一步根据该缓存页的缓存页结构中的“log dirty”字段判断是否需要将PCM 125中的log数据片215更新到该缓存页中。例如,当“log dirty”字段为1时,说明PCM 125中包含有该缓存页的新修改数据,CPU 105需要先将PCM 125中的log数据片215更新到DRAM 120中的缓存页中后,再将更新后的缓存页的数据220刷回磁盘130中。当“log dirty”字段为0时,说明该缓存页的logchain中的log数据片215已经被更新到该缓存页中,PCM 125中未包含该缓存页的新修改数据,CPU 105可以直接将该缓存页中的数据刷回磁盘130中。
可以理解的是,在本发明实施例中,由于在将待写入数据205写入 PCM 125中后,就可以向应用返回写入成功消息。由于log chain中的log数据片 215并不是以页为粒度的修改数据,因此,采用本发明的访问请求处理方法能够支持对文件的小粒度的修改。并且,在本发明实施例中,将数据写入PCM 125 中后,并未立即将PCM 125中的修改数据写入磁盘130中,而是在满足一定条件时,才将所述PCM 125中存储的log数据片215更新到对应的缓存页,并根据合并后的缓存页更新磁盘中的文件数据。这种延迟合并数据并将合并后的数据写入磁盘的方式,与现有的保持数据一致性的写前日志(write ahead log,WAL) 方式以及写前拷贝(copy on write)相比,能够减少***的写放大。
如前所述,本发明实施例中,在计算机***出现故障被重新启动后,也可以根据所述PCM 125中的log chain进行数据写回恢复,保证写入的数据不丢失,以保持数据的一致性。具体的,在计算机***发生故障并重新启动后, CPU 105可以根据PCM 125中的全局logchain控制信息中的全局log head指针,依次对每一个有log chain的缓存页进行数据恢复。具体的,对于任意一个有log chain的缓存页,CPU 105能够遍历该缓存页的log chain中的每一个log数据片,并按照图6所示的方法将该log chain中的各个log数据片更新到缓存页中。然后再将更新后的缓存页的数据写入到磁盘130中。通过这种方式能够保证写入的数据不丢失。
图2-图3从写数据的过程对本发明实施例提供的访问请求处理方法进行了描述。下面将从读数据的过程对本发明实施例提供的访问请求处理方法进行进一步的说明。图7为本发明实施例提供的计算机***100的又一种信令示意图,图7对图1所示的计算机***100中各个器件在读数据过程中的信令交互过程进行了图示。图8为本发明实施例提供的又一种访问请求处理方法的流程图,图8以读取数据为例进行图示。图8所示的方法可以由图7所示的计算机*** 100中CPU 105通过调用数据处理逻辑1051来实现。下面将结合图7和图8对如何从本发明实施例提供的计算机***100中读取数据进行详细的描述。如图8 所示,该方法可以包括下述步骤。
在步骤800中,CPU105接收读请求700。如图7所示,当CPU 105 接收到读请求700时,CPU 105可以调用数据处理逻辑1051处理所述读请求700。所述读请求中携带有文件标识以及待读取的数据的大小。具体对文件标识的描述可以参见前面的描述。在图8所示的实施例中,读请求700中携带的文件标识可以是待访问的目标文件的文件句柄,还可以是除文件句柄之外的其他文件描述符,在此不做限定,只要能够使进程通过文件标识识别出目标文件并找到目标文件的描述信息即可。例如,读请求700中携带的文件标识可以为磁盘130中第二文件的文件标识。需要说明的是,本发明实施例中的第一文件和第二文件仅仅是不同访问流程中访问的文件的区分,不对具体的文件进行限定。根据这种方式,第一文件和第二文件可以是相同的文件也可以是不同的文件。
在步骤805中,CPU 105根据所述文件标识获取访问位置。其中,所述访问位置用于指示所述读请求在所述目标文件中要读取的数据的起始地址。所述访问位置可以是一个逻辑的访问位置。在本步骤中,CPU 105如何根据所述读请求700中携带的文件标识获取访问位置的描述与步骤305类似,具体可以参见步骤305的描述。
在步骤810中,CPU 105根据所述访问位置、所述待读取的数据的大小以及所述缓存页的大小确定M个目标缓存页以及在所述M个目标缓存页中的目标缓存页OCPj中待读取的数据的位置信息。其中,j的取值从1到M,所述M为不小于1的整数。如前所述,一个页(page)的大小通常为4k个字节(Byte)。该步骤中,CPU105确定M个目标缓存页的方式与在步骤310中CPU 105确定 N个目标缓存页的方式类似,具体可以参见步骤310的描述。
进一步的,在本步骤中,CPU 105具体可以根据访问位置、所述待读取的数据的大小以及所述缓存页的大小确定在所述M个目标缓存页中的目标缓存页OCPj中待读取的数据的位置信息。为了描述方便,以所述目标缓存页OCPj是所述DRAM中缓存的所述第二文件的文件页,且以一个缓存页的大小为100 个字节为例。若在步骤805中确定的访问位置为第二文件的150个字节,待读取数据的大小为210个字节,则CPU 105可以确定目标缓存页为第二文件的第二缓存页p2(包含第二文件的第100-199字节)、第三缓存页p3(包含第二文件的第200-299字节)和第四缓存页p4(包含第二文件的第300-399字节)。并且, CPU 105能够确定出所述读请求700待读取的数据的位置信息分别为p2(50,49)、 p3(0,100)和p4(0,61)。其中,p2(50,49)用于表示从第二缓存页中的第 50个字节的位置开始的49个字节,p3(0,100)用于表示从第三缓存页中的第 0个字节的位置开始的100个字节,p4(0,61)用于表示从第四缓存页中的第0 个字节的位置开始的61个字节。可以理解的是,读请求700要访问的目标缓存页也可能是一个缓存页也可以是多个缓存页,也就是说,M的值可以是不小于1 的整数。为了描述方便,在本发明实施例中,可以将确定的M个目标缓存页以及目标缓存页OCPj中待读取的数据的位置信息称为待读取的数据的信息705。如图7所示,在CPU 105确定待读取的数据的置信息705之后,CPU 105可以根据确定的待读取的数据的信息705读取DRAM120中缓存的数据。
在图8所示的实施例中,当获得读请求700对各个目标缓存页OCPj中待读取的数据的位置信息后,CPU 105可以分别对每一个目标缓存页OCPj执行下述操作。可以理解的是,实际应用中,当在步骤810中CPU 105只确定有一个目标缓存页时,CPU 105可以只对确定的一个目标缓存页执行下述操作。当在步骤810中CPU 105确定出多个目标缓存页时,也就是说,当CPU 105根据读请求700确定待读取的数据需要分别从多个目标缓存页读取时,CPU105可以对每一个目标缓存页分别执行下述操作。为了描述清楚,下面将以对一个目标缓存页的操作方法为例进行描述。
在步骤815中,CPU 105判断所述PCM 125中是否存储有目标缓存页OCPj的logchain,所述目标缓存页OCPj的log chain用于记录目标缓存页OCPj的至少一个log数据片的信息。在本发明实施例中,所述目标缓存页的log chain 中包含有至少一个数据节点,其中,每一个数据节点中包含有一个log数据片的信息,每个log数据片为所述目标缓存页在一次修改过程中的修改数据。当所述 PCM 125中未存储有目标缓存页OCPj的log chain时,该方法进入步骤820,否则该方法进入步骤825。实际应用中,当CPU 105在步骤810中确定出所述读请求700待访问的所述M个目标缓存页后,CPU 105可以从所述目标文件的元数据信息中获得所述M个目标缓存页的缓存页结构。进而能够根据缓存页结构中记录的信息判断所述PCM 125中是否存储有所述M个目标缓存页中的目标缓存页OCPj的log chain结构。缓存页结构以及log chain结构可以参见图5所示,关于缓存页结构的描述以及如何根据目标缓存页OCPj的缓存页结构判断所述PCM 125中是否存储有所述目标缓存页OCPj的log chain的方式与图3中的步骤320 类似,具体可以参见步骤320的描述。
在步骤820中,CPU 105根据所述目标缓存页OCPj中待读取的数据的位置信息从所述DRAM中读取所述目标缓存页OCPj的数据。如步骤320中所述,对于任意一个目标缓存页,CPU 105能够根据该目标缓存页的缓存页结构中的“log head”或“log tail”判断所述PCM125中是否存储有所述目标缓存页的log chain。当在步骤815中,CPU 105根据所述目标缓存页OCPj的缓存页结构确定所述PCM 125中未存储有所述目标缓存页OCPj的log chain时,说明所述目标缓存页OCPj的数据未被修改过,因此,CPU 105可以根据所述待读取数据的位置直接从所述DRAM中读取所述目标缓存页OCPj中的数据。如图7所示,CPU 105 可以从DRAM120中的缓存页中获取读取的数据720。
在步骤825中,CPU105根据所述目标缓存页OCPj的log chain中的至少一个log数据片的信息将所述至少一个log数据片更新到所述目标缓存页,以获得更新后的目标缓存页OCPj’。当在步骤815中,CPU 105根据所述目标缓存页OCPj的缓存页结构确定所述PCM 125中存储有所述目标缓存页OCPj的log chain时,说明所述目标缓存页OCPj的数据已被修改过,因此,CPU 105需要将存储于PCM 125中的log chain中的数据更新至DRAM中的目标缓存页中。具体的,可以将目标缓存页OCPj的log chain中的log数据片215合并至目标缓存页中,以得到更新后的目标缓存页OCPj’。在本发明实施例中,由于目标缓存页OCPj的logchain中记录的均是所述缓存页的最新修改数据,因此,在数据合并过程中,CPU 105可以根据所述目标缓存页OCPj的log chain中的至少一个log数据片的信息将所述至少一个log数据片更新到所述目标缓存页。具体的,CPU 105 能够根据目标缓存页OCPj的log chain中的数据节点记录的log数据片的页内位置信息分别将各个log数据片合并至所述目标缓存页OCPj中,以得到更新后的目标缓存页OCPj’。为了描述清楚,以图4所示的第一缓存页为读请求700要读取的目标缓存页OCPj为例。如图4所示,第一缓存页的log chain中包括第一数据节点41051和第二数据节点41052,若第一数据节点41051中记录的log数据片的页内位置为第30-50字节,第二数据节点41052中记录的log数据片的页内位置为第80-90字节。则CPU105可以用第一数据节点41051中记录的log数据片替换所述第一缓存页中第30-50字节的数据。并且,CPU 105可以用第二数据节点41052中记录的log数据片替换所述第一缓存页中第80-90字节的数据,从而得到更新后的第一缓存页。
在步骤830中,CPU 105根据所述目标缓存页OCPj中待读取的数据的位置信息从所述更新后的目标缓存页OCPj’中读取数据。可以理解的是,待读取数据的位置信息是指待读取数据在目标缓存页中的逻辑位置。当在步骤825 中,CPU 105根据所述PCM 125中存储的所述目标缓存页OCPj的log chain中的数据更新所述目标缓存页OCPj,获得更新后的目标缓存页OCPj’后,CPU 105能够根据在步骤810中确定的目标缓存页OCPj中待读取的数据的位置信息从所述更新后的目标缓存页OCPj’中读取数据。例如,若在步骤810中确定在第一缓存页中读取的数据的位置信息为第15-50个字节,则在本步骤中,CPU 105可以从所述更新后的第一缓存页中读取第15-50个字节的数据。如图7所示,CPU 105 可以从DRAM 120中更新后的目标缓存页中获取读取的数据720。
本领域技术人员可以知道,实际应用中,当DRAM 120中没有待读取的数据时,操作***会先从磁盘中将待读取的数据加载在DRAM 120中,然后从所述DRAM的缓存页中读取数据。
从图8描述的读数据过程可以看出,本发明实施例提供的访问请求处理方法,由于将缓存页的待修改数据都通过log chain的方式存储于PCM 125 中,因此可以支持比页的粒度更小的数据修改。当需要读取缓存页中的数据时,可以根据log chain中的数据节点中的log数据片获得读取数据时最新的缓存页数据,从而能够读取正确的数据。在本发明实施例中,由于目标缓存页的log chain 中记录的均是所述缓存页的最新修改数据的信息。根据这种方式,目标缓存页的 log chain中的修改数据的页内位置相互不会重叠。因此在读取数据的过程中, CPU 105不用根据log chain中记录的数据节点的信息识别目标缓存页的有效数据,而是可以直接根据目标缓存页的log chain中记录的log数据片的信息将log数据片更新到目标缓存页中,从而能够提高读取数据的速度。
图9为本发明实施例提供的一种访问请求处理装置的结构示意图。该装置可以应用于包含有非易失性内存NVM的计算机***中,例如,该装置可以应用于如图1所示的计算机***中。如图9所示,所述访问请求处理装置90 可以包括下述模块。
接收模块900,用于接收写请求。所述写请求中携带有文件标识、缓存区指针以及待写入数据的大小。所述缓存区指针用于指向缓存待写入数据的缓存区,所述待写入数据为所述写请求要访问的目标文件的修改数据。
获取模块905,用于根据所述文件标识获取访问位置。所述访问位置用于指示所述写请求在所述目标文件中写入数据的起始地址。
确定模块910,用于根据所述访问位置、所述待写入数据的大小以及缓存页的大小确定目标缓存页,其中,所述目标缓存页是内存中用于缓存所述目标文件中被所述待写入数据修改的文件数据的内存页。
所述确定模块910,还用于确定所述NVM中存储有所述目标缓存页中的第一目标缓存页的日志链log chain。所述第一目标缓存页的log chain中包含有第一数据节点,其中,所述第一数据节点中包含有第一log数据片的信息。所述第一log数据片包括所述第一目标缓存页在一次修改过程中的修改数据。
***模块915,用于在所述第一目标缓存页的log chain中***第二数据节点。所述第二数据节点中包含有所述第一目标缓存页的第二log数据片的信息。所述第二log数据片为对所述第一目标缓存页在本次修改过程中的修改数据。具体的,所述第二log数据片是从所述缓存区指针指向的缓存区中获得的至少一部分待写入数据。所述第二log数据片的信息包括所述第二log数据片或者所述第二log数据片在所述SCM中的存储地址。
比较模块920,用于确定所述第二log数据片的页内位置与所述第一 log数据片的页内位置有重叠。其中,所述第二log数据片的页内位置为所述第二log数据片在所述第一目标缓存页中的位置,所述第一log数据片的页内位置为所述第一log数据片在所述第一目标缓存页中的位置。
无效模块925,用于在所述第一数据节点中将所述第一log数据片中与所述第二log数据片重叠的数据设置为无效数据。
在本发明实施例中,所述第二log数据片的信息还包括:所述第二log 数据片在所述目标缓存页中的偏移量、所述第二log数据片的长度以及所述第二数据节点的相邻数据节点的地址信息。
实际应用中,***模块915在执行在所述目标缓存页的log chain中***新的数据节点的操作中,***模块915具体可以在所述目标缓存页的log chain的尾部或头部***新的数据节点。其中,在***所述新的数据节点后,所述目标缓存页的log chain中包含有根据所述目标缓存页的更新顺序依次链接的至少两个数据节点。
在一种情形下,当所述第二log数据片的页内位置与所述第一log数据片的页内位置部分重叠时,所述无效模块925具体用于在所述第一数据节点中,根据第一log数据片与所述第二log数据片重叠的数据的页内位置修改所述第一 log数据片的页内位置信息,以将所述第一log数据片中与所述第二log数据片重叠的数据设置为无效数据。其中,所述第一log数据片的页内位置信息包括所述第一log数据片的“页内偏移”和“log数据长度”中的至少一个信息。
在又一种情形下,所述无效模块925具体用于当所述第二log数据片的页内位置包括所述第一log数据片的页内位置时,删除所述第一数据节点。
在另一种情形下,当所述第一log数据片的页内位置包括所述第二 log数据片的页内位置时,所述无效模块925具体用于将所述第一数据节点***成第一子数据节点以及第二子数据节点,并分别在所述第一子数据节点和所述第二子数据节点中记录所述第一log数据片中未与所述第二log数据片重叠的数据,以将第一log数据片中与所述第二log数据片重叠的数据设置为无效数据。其中,所述第一子数据节点以及所述第二子数据节点的数据结构与所述第一数据节点的数据结构相同。
进一步的,访问请求处理装置90还可以包括更新模块930、存储模块935和回收模块940。所述更新模块930用于根据所述第一目标缓存页的log chain中记录的至少一个log数据片的信息将所述log chain中的至少一个log数据片更新到所述第一目标缓存页中,以获得更新后的第一目标缓存页。所述存储模块935用于将所述更新后的第一目标缓存页的数据存储于所述计算机***的外存设备中。所述回收模块940用于在将所述更新后的第一目标缓存页的数据存储于所述计算机***的外存设备(例如图1所示的磁盘130)中之后,回收所述第一目标缓存页的log chain。
本发明实施例所提供的访问请求处理装置90可以参见前述实施例描述的访问请求处理方法。各个模块功能的详细描述可分别参见前述实施例中对图 2-6的描述,在此不再赘述。
本发明实施例还提供一种实现访问请求处理方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令用于执行前述任意一个方法实施例所述的方法流程。本领域普通技术人员可以理解,前述的存储介质包括:U盘、移动硬盘、磁碟、光盘、随机存储器(Random-Access Memory,RAM)、固态硬盘(Solid State Disk,SSD)或者其他非易失性存储器(non-volatile memory)等各种可以存储程序代码的非短暂性的(non-transitory) 机器可读介质。
需要说明的是,本申请所提供的实施例仅仅是示意性的。所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。在本发明实施例、权利要求以及附图中揭示的特征可以独立存在也可以组合存在。在本发明实施例中以硬件形式描述的特征可以通过软件来执行,反之亦然。在此不做限定。
Claims (21)
1.一种访问请求处理方法,所述方法由计算机***执行,其中,所述计算机***包括处理器和混合内存,所述混合内存包括动态随机存储器DRAM以及非易失性内存NVM,其特征在于,包括:
接收写请求,所述写请求中携带有文件标识、缓存区指针以及待写入数据的大小,所述缓存区指针用于指向缓存待写入数据的缓存区,所述待写入数据为所述写请求要访问的目标文件的修改数据,所述缓存区是所述DRAM或所述NVM中划分出的一段存储空间;
根据所述文件标识获取访问位置,所述访问位置用于指示所述写请求在所述目标文件中写入数据的起始地址;
根据所述访问位置、所述待写入数据的大小以及缓存页的大小确定目标缓存页,其中,所述目标缓存页是所述DRAM中用于缓存所述目标文件中被所述待写入数据修改的文件数据的内存页;
确定所述NVM中存储有所述目标缓存页中的第一目标缓存页的日志链log chain,所述第一目标缓存页的log chain中包含有第一数据节点,其中,所述第一数据节点中包含有第一log数据片的信息,所述第一log数据片包括所述第一目标缓存页在一次修改过程中的修改数据;
在所述第一目标缓存页的log chain中***第二数据节点,所述第二数据节点中包含有所述第一目标缓存页的第二log数据片的信息,其中,所述第二log数据片是从所述缓存区指针指向的缓存区中获得的至少一部分待写入数据,所述第二log数据片的信息包括所述第二log数据片或者所述第二log数据片在所述NVM中的存储地址;
确定所述第二log数据片的页内位置与所述第一log数据片的页内位置有重叠,其中,所述第二log数据片的页内位置为所述第二log数据片在所述第一目标缓存页中的位置,所述第一log数据片的页内位置为所述第一log数据片在所述第一目标缓存页中的位置;
在所述第一数据节点中将所述第一log数据片中与所述第二log数据片重叠的数据设置为无效数据。
2.根据权利要求1所述的方法,其特征在于,所述在所述第一目标缓存页的log chain中***第二数据节点包括:
在所述第一目标缓存页的log chain的尾部或头部***第二数据节点,其中,在***所述第二数据节点后,所述第一目标缓存页的log chain中包含有根据所述第一目标缓存页的更新顺序依次链接的至少两个数据节点。
3.根据权利要求1所述的方法,其特征在于,还包括:
根据所述第一目标缓存页的log chain中记录的至少一个log数据片的信息将所述logchain中的至少一个log数据片更新到所述第一目标缓存页中,以获得更新后的第一目标缓存页;
将所述更新后的第一目标缓存页的数据存储于所述计算机***的外存设备中。
4.根据权利要求1-3任意一项所述的方法,其特征在于,
所述在所述第一数据节点中将所述第一log数据片中与所述第二log数据片重叠的数据设置为无效数据包括:
当所述第二log数据片的页内位置与所述第一log数据片的页内位置部分重叠时,在所述第一数据节点中,根据第一log数据片与所述第二log数据片重叠的数据的页内位置修改所述第一log数据片的页内位置信息,以将所述第一log数据片中与所述第二log数据片重叠的数据设置为无效数据,其中,所述第一log数据片的页内位置信息包括所述第一log数据片的“页内偏移”和“log数据长度”中的至少一个信息。
5.根据权利要求1-3任意一项所述的方法,其特征在于,所述在所述第一数据节点中将所述第一log数据片中与所述第二log数据片重叠的数据设置为无效数据包括:
当所述第二log数据片的页内位置包括所述第一log数据片的页内位置时,删除所述第一数据节点。
6.根据权利要求1-3任意一项所述的方法,其特征在于,所述在所述第一数据节点中将所述第一log数据片中与所述第二log数据片重叠的数据设置为无效数据包括:
当所述第一log数据片的页内位置包括所述第二log数据片的页内位置时,将所述第一数据节点***成第一子数据节点以及第二子数据节点,其中,所述第一子数据节点以及所述第二子数据节点的数据结构与所述第一数据节点的数据结构相同;
分别在所述第一子数据节点和所述第二子数据节点中记录所述第一log数据片中未与所述第二log数据片重叠的数据,以将第一log数据片中与所述第二log数据片重叠的数据设置为无效数据。
7.根据权利要求3所述的方法,其特征在于,还包括:
在将所述更新后的第一目标缓存页的数据存储于所述计算机***的外存设备中之后,回收所述第一目标缓存页的log chain。
8.一种计算机***,所述计算机***包括混合内存以及与所述混合内存连接的处理器,所述混合内存包括动态随机存储器DRAM以及非易失性内存NVM,其特征在于,所述处理器用于:
接收写请求,所述写请求中携带有文件标识、缓存区指针以及待写入数据的大小,所述缓存区指针用于指向缓存待写入数据的缓存区,所述待写入数据为所述写请求要访问的目标文件的修改数据,所述缓存区是所述DRAM或所述NVM中划分出的一段存储空间;
根据所述文件标识获取访问位置,所述访问位置用于指示所述写请求在所述目标文件中写入数据的起始地址;
根据所述访问位置、所述待写入数据的大小以及缓存页的大小确定目标缓存页,其中,所述目标缓存页是所述DRAM中用于缓存所述目标文件中被所述待写入数据修改的文件数据的内存页;
确定所述NVM中存储有所述目标缓存页中的第一目标缓存页的日志链log chain,所述第一目标缓存页的log chain中包含有第一数据节点,其中,所述第一数据节点中包含有第一log数据片的信息,所述第一log数据片包括所述第一目标缓存页在一次修改过程中的修改数据;
在所述第一目标缓存页的log chain中***第二数据节点,所述第二数据节点中包含有所述第一目标缓存页的第二log数据片的信息,其中,所述第二log数据片是从所述缓存区指针指向的缓存区中获得的至少一部分待写入数据,所述第二log数据片的信息包括所述第二log数据片或者所述第二log数据片在所述NVM中的存储地址;
确定所述第二log数据片的页内位置与所述第一log数据片的页内位置有重叠,其中,所述第二log数据片的页内位置为所述第二log数据片在所述第一目标缓存页中的位置,所述第一log数据片的页内位置为所述第一log数据片在所述第一目标缓存页中的位置;
在所述第一数据节点中将所述第一log数据片中与所述第二log数据片重叠的数据设置为无效数据。
9.根据权利要求8所述的计算机***,其特征在于,所述处理器具体用于:
在所述第一目标缓存页的log chain的尾部或头部***第二数据节点,其中,在***所述第二数据节点后,所述第一目标缓存页的log chain中包含有根据所述第一目标缓存页的更新顺序依次链接的至少两个数据节点。
10.根据权利要求8所述的计算机***,其特征在于,所述处理器还用于:
根据所述第一目标缓存页的log chain中记录的至少一个log数据片的信息将所述logchain中的至少一个log数据片更新到所述第一目标缓存页中,以获得更新后的第一目标缓存页;
将所述更新后的第一目标缓存页的数据存储于所述计算机***的外存设备中。
11.根据权利要求8-10任意一项所述的计算机***,其特征在于,所述处理器具体用于:
当所述第二log数据片的页内位置与所述第一log数据片的页内位置部分重叠时,在所述第一数据节点中,根据第一log数据片与所述第二log数据片重叠的数据的页内位置修改所述第一log数据片的页内位置信息,以将所述第一log数据片中与所述第二log数据片重叠的数据设置为无效数据,其中,所述第一log数据片的页内位置信息包括所述第一log数据片的“页内偏移”和“log数据长度”中的至少一个信息。
12.根据权利要求8-10任意一项所述的计算机***,其特征在于,所述处理器具体用于:
当所述第二log数据片的页内位置包括所述第一log数据片的页内位置时,删除所述第一数据节点。
13.根据权利要求8-10任意一项所述的计算机***,其特征在于,所述处理器具体用于:
当所述第一log数据片的页内位置包括所述第二log数据片的页内位置时,将所述第一数据节点***成第一子数据节点以及第二子数据节点,其中,所述第一子数据节点以及所述第二子数据节点的数据结构与所述第一数据节点的数据结构相同;
分别在所述第一子数据节点和所述第二子数据节点中记录所述第一log数据片中未与所述第二log数据片重叠的数据,以将第一log数据片中与所述第二log数据片重叠的数据设置为无效数据。
14.根据权利要求10所述的计算机***,其特征在于,所述处理器还用于:
在将所述更新后的第一目标缓存页的数据存储于所述计算机***的外存设备中之后,回收所述第一目标缓存页的log chain。
15.一种访问请求处理装置,其特征在于,所述访问请求处理装置应用于计算机***中,所述计算机***包括混合内存,所述混合内存包括动态随机存储器DRAM以及非易失性内存NVM,所述访问请求处理装置包括:
接收模块,用于接收写请求,所述写请求中携带有文件标识、缓存区指针以及待写入数据的大小,所述缓存区指针用于指向缓存待写入数据的缓存区,所述待写入数据为所述写请求要访问的目标文件的修改数据,所述缓存区是所述DRAM或所述NVM中划分出的一段存储空间;
获取模块,用于根据所述文件标识获取访问位置,所述访问位置用于指示所述写请求在所述目标文件中写入数据的起始地址;
确定模块,用于根据所述访问位置、所述待写入数据的大小以及缓存页的大小确定目标缓存页,其中,所述目标缓存页是所述DRAM中用于缓存所述目标文件中被所述待写入数据修改的文件数据的内存页;
所述确定模块,还用于确定所述NVM中存储有所述目标缓存页中的第一目标缓存页的日志链log chain,所述第一目标缓存页的log chain中包含有第一数据节点,其中,所述第一数据节点中包含有第一log数据片的信息,所述第一log数据片包括所述第一目标缓存页在一次修改过程中的修改数据;
***模块,用于在所述第一目标缓存页的log chain中***第二数据节点,所述第二数据节点中包含有所述第一目标缓存页的第二log数据片的信息,其中,所述第二log数据片是从所述缓存区指针指向的缓存区中获得的至少一部分待写入数据,所述第二log数据片的信息包括所述第二log数据片或者所述第二log数据片在所述NVM中的存储地址;
比较模块,用于确定所述第二log数据片的页内位置与所述第一log数据片的页内位置有重叠,其中,所述第二log数据片的页内位置为所述第二log数据片在所述第一目标缓存页中的位置,所述第一log数据片的页内位置为所述第一log数据片在所述第一目标缓存页中的位置;
无效模块,用于在所述第一数据节点中将所述第一log数据片中与所述第二log数据片重叠的数据设置为无效数据。
16.根据权利要求15所述的装置,其特征在于,所述***模块具体用于:
在所述第一目标缓存页的log chain的尾部或头部***第二数据节点,其中,在***所述第二数据节点后,所述第一目标缓存页的log chain中包含有根据所述第一目标缓存页的更新顺序依次链接的至少两个数据节点。
17.根据权利要求15所述的装置,其特征在于,还包括:
更新模块,用于根据所述第一目标缓存页的log chain中记录的至少一个log数据片的信息将所述log chain中的至少一个log数据片更新到所述第一目标缓存页中,以获得更新后的第一目标缓存页;
存储模块,用于将所述更新后的第一目标缓存页的数据存储于所述计算机***的外存设备中。
18.根据权利要求15-17任意一项所述的装置,其特征在于,所述无效模块具体用于:
当所述第二log数据片的页内位置与所述第一log数据片的页内位置部分重叠时,在所述第一数据节点中,根据第一log数据片与所述第二log数据片重叠的数据的页内位置修改所述第一log数据片的页内位置信息,以将所述第一log数据片中与所述第二log数据片重叠的数据设置为无效数据,其中,所述第一log数据片的页内位置信息包括所述第一log数据片的“页内偏移”和“log数据长度”中的至少一个信息。
19.根据权利要求15-17任意一项所述的装置,其特征在于,所述无效模块具体用于:
当所述第二log数据片的页内位置包括所述第一log数据片的页内位置时,删除所述第一数据节点。
20.根据权利要求15-17任意一项所述的装置,其特征在于,所述无效模块具体用于:
当所述第一log数据片的页内位置包括所述第二log数据片的页内位置时,将所述第一数据节点***成第一子数据节点以及第二子数据节点,其中,所述第一子数据节点以及所述第二子数据节点的数据结构与所述第一数据节点的数据结构相同;
分别在所述第一子数据节点和所述第二子数据节点中记录所述第一log数据片中未与所述第二log数据片重叠的数据,以将第一log数据片中与所述第二log数据片重叠的数据设置为无效数据。
21.根据权利要求17所述的装置,其特征在于,还包括:
回收装置,用于在将所述更新后的第一目标缓存页的数据存储于所述计算机***的外存设备中之后,回收所述第一目标缓存页的log chain。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011295810.6A CN112416812B (zh) | 2015-12-30 | 访问请求处理方法、装置及计算机*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2015/099930 WO2017113211A1 (zh) | 2015-12-30 | 2015-12-30 | 访问请求处理方法、装置及计算机*** |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011295810.6A Division CN112416812B (zh) | 2015-12-30 | 访问请求处理方法、装置及计算机*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108431784A CN108431784A (zh) | 2018-08-21 |
CN108431784B true CN108431784B (zh) | 2020-12-04 |
Family
ID=59224048
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580085465.4A Active CN108431784B (zh) | 2015-12-30 | 2015-12-30 | 访问请求处理方法、装置及计算机*** |
Country Status (4)
Country | Link |
---|---|
US (2) | US10606746B2 (zh) |
EP (2) | EP3385846B1 (zh) |
CN (1) | CN108431784B (zh) |
WO (1) | WO2017113211A1 (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2017113213A1 (zh) * | 2015-12-30 | 2017-07-06 | 华为技术有限公司 | 访问请求处理方法、装置及计算机*** |
WO2017113211A1 (zh) | 2015-12-30 | 2017-07-06 | 华为技术有限公司 | 访问请求处理方法、装置及计算机*** |
CN111414344B (zh) * | 2020-03-25 | 2023-03-14 | 电子科技大学 | 一种应用于遥爆***的数据保存方法 |
CN111913913B (zh) * | 2020-08-07 | 2024-02-13 | 北京星辰天合科技股份有限公司 | 访问请求的处理方法和装置 |
US11989126B2 (en) * | 2022-05-13 | 2024-05-21 | Micron Technology, Inc. | Tracking memory modifications at cache line granularity |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2011090500A1 (en) * | 2010-01-19 | 2011-07-28 | Rether Networks Inc. | Random write optimization techniques for flash disks |
CN103838676A (zh) * | 2012-11-22 | 2014-06-04 | 华为技术有限公司 | 数据存储***、数据存储方法及pcm桥 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5893140A (en) | 1996-08-14 | 1999-04-06 | Emc Corporation | File server having a file system cache and protocol for truly safe asynchronous writes |
GB0123415D0 (en) | 2001-09-28 | 2001-11-21 | Memquest Ltd | Method of writing data to non-volatile memory |
US20060184719A1 (en) * | 2005-02-16 | 2006-08-17 | Sinclair Alan W | Direct data file storage implementation techniques in flash memories |
US8452929B2 (en) | 2005-04-21 | 2013-05-28 | Violin Memory Inc. | Method and system for storage of data in non-volatile media |
KR101498673B1 (ko) * | 2007-08-14 | 2015-03-09 | 삼성전자주식회사 | 반도체 드라이브, 그것의 데이터 저장 방법, 그리고 그것을포함한 컴퓨팅 시스템 |
WO2009107506A1 (en) | 2008-02-29 | 2009-09-03 | Kabushiki Kaisha Toshiba | Memory system |
US10949415B2 (en) * | 2011-03-31 | 2021-03-16 | International Business Machines Corporation | Logging system using persistent memory |
US9274937B2 (en) * | 2011-12-22 | 2016-03-01 | Longitude Enterprise Flash S.A.R.L. | Systems, methods, and interfaces for vector input/output operations |
US9626288B2 (en) * | 2013-08-14 | 2017-04-18 | Skyera, Llc | Address translation for a non-volatile memory storage device |
US9342457B2 (en) * | 2014-03-11 | 2016-05-17 | Amazon Technologies, Inc. | Dynamically modifying durability properties for individual data volumes |
CN103955528B (zh) * | 2014-05-09 | 2015-09-23 | 北京华信安天信息科技有限公司 | 写入文件数据的方法、读取文件数据的方法以及装置 |
CN105159818B (zh) | 2015-08-28 | 2018-01-02 | 东北大学 | 内存数据管理中日志恢复方法及其仿真*** |
WO2017113211A1 (zh) | 2015-12-30 | 2017-07-06 | 华为技术有限公司 | 访问请求处理方法、装置及计算机*** |
-
2015
- 2015-12-30 WO PCT/CN2015/099930 patent/WO2017113211A1/zh active Application Filing
- 2015-12-30 EP EP15911840.5A patent/EP3385846B1/en active Active
- 2015-12-30 CN CN201580085465.4A patent/CN108431784B/zh active Active
- 2015-12-30 EP EP20152574.8A patent/EP3754508B1/en active Active
-
2018
- 2018-06-26 US US16/018,602 patent/US10606746B2/en active Active
-
2020
- 2020-01-21 US US16/748,372 patent/US11030092B2/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2011090500A1 (en) * | 2010-01-19 | 2011-07-28 | Rether Networks Inc. | Random write optimization techniques for flash disks |
CN103838676A (zh) * | 2012-11-22 | 2014-06-04 | 华为技术有限公司 | 数据存储***、数据存储方法及pcm桥 |
Also Published As
Publication number | Publication date |
---|---|
CN112416812A (zh) | 2021-02-26 |
EP3754508A1 (en) | 2020-12-23 |
US20180300236A1 (en) | 2018-10-18 |
US10606746B2 (en) | 2020-03-31 |
EP3754508B1 (en) | 2023-03-22 |
US20200159655A1 (en) | 2020-05-21 |
CN108431784A (zh) | 2018-08-21 |
EP3385846B1 (en) | 2020-02-12 |
EP3385846A1 (en) | 2018-10-10 |
US11030092B2 (en) | 2021-06-08 |
WO2017113211A1 (zh) | 2017-07-06 |
EP3385846A4 (en) | 2019-01-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108431783B (zh) | 访问请求处理方法、装置及计算机*** | |
US11030092B2 (en) | Access request processing method and apparatus, and computer system | |
US11853549B2 (en) | Index storage in shingled magnetic recording (SMR) storage system with non-shingled region | |
CN105843551B (zh) | 高性能和大容量储存重复删除中的数据完整性和损耗电阻 | |
US10468077B2 (en) | Adaptive object buffering and meta-data indexing using persistent memory to improve flash memory durability in tiered storage | |
CN107784121B (zh) | 一种基于非易失内存的日志文件***的小写优化方法 | |
US11782632B2 (en) | Selective erasure of data in a SSD | |
CN110196818B (zh) | 缓存数据的方法、缓存设备和存储*** | |
US10552377B2 (en) | Data discard method for journaling file system and memory management apparatus thereof | |
US10552335B2 (en) | Method and electronic device for a mapping table in a solid-state memory | |
US20240020240A1 (en) | Method for storing l2p table, system, device, and medium | |
KR20200060220A (ko) | 비휘발성 메모리 기반 파일 시스템 및 이를 이용한 데이터 갱신 방법 | |
CN111414320B (zh) | 基于日志文件***的非易失内存构建磁盘cache的方法及*** | |
TWI737189B (zh) | 易於從固態儲存裝置之故障中還原的方法、電腦系統,及固態儲存裝置 | |
CN106775501A (zh) | 基于非易失内存设备的数据去冗余方法及*** | |
CN107273306A (zh) | 一种固态硬盘的数据读取、数据写入方法及固态硬盘 | |
CN115640238A (zh) | 针对持久化内存的可靠内存映射i/o实现方法及*** | |
CN112416812B (zh) | 访问请求处理方法、装置及计算机*** | |
US11586353B2 (en) | Optimized access to high-speed storage device | |
US20200272424A1 (en) | Methods and apparatuses for cacheline conscious extendible hashing | |
CN109002265B (zh) | 一种数据处理的方法以及相关装置 | |
US20240192860A1 (en) | Method and device for log structured merge-tree based key-value data storage | |
CN110703981A (zh) | 一种数据读写方法、终端及计算机可读存储介质 |
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 |