CN110750356B - 适用于非易失性内存的多核交互方法、系统及存储介质 - Google Patents
适用于非易失性内存的多核交互方法、系统及存储介质 Download PDFInfo
- Publication number
- CN110750356B CN110750356B CN201910846676.5A CN201910846676A CN110750356B CN 110750356 B CN110750356 B CN 110750356B CN 201910846676 A CN201910846676 A CN 201910846676A CN 110750356 B CN110750356 B CN 110750356B
- Authority
- CN
- China
- Prior art keywords
- request
- interactive
- cpu
- module
- requests
- 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
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/505—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了适用于非易失性内存的多核交互方法、系统及存储介质,系统包括交互请求提交模块、交互请求调度模块、内核线程管理模块、CPU负载检测模块和系统崩溃恢复模块。本发明通过交互请求提交模块对交互请求环境进行初始化,然后通过交互请求调度模块对批量交互请求进行优化处理以及分发处理,接着通过内核线程管理模块为每个CPU分配内核线程;本发明实现了对批量交互请求的处理,能够充分发挥多核异步并发处理的优势,效率高且并发性高;另外,本发明还能通过CPU负载检测模块实时获取各个CPU的负载状况,以及通过系统崩溃恢复模块对系统数据进行恢复,提高了系统的稳定性,可广泛应用于计算机技术领域。
Description
技术领域
本发明涉及计算机技术领域,尤其是适用于非易失性内存的多核交互方法、系统及存储介质。
背景技术
非易失性内存具有字节可寻址、存储密度高、高性能读写和数据持久化保存等特性。为了发挥其字节可寻址和高速访问的特性,需要将非易失性内存直接连接于内存总线上,作为持久性内存设备来使用。
传统的易失性存储介质,如机械硬盘、固态盘等,因其读写速度较慢和大粒度读写等特性,操作系统特意引入多层次的I/O协议栈,以CPU开销为代价,形成多种读写优化策略,以此换取其I/O性能的改善。但是,因为非易失性内存与传统的易失性存储介质在性能、读写粒度、使用寿命等属性上存在较大差异,使得原有的多层次I/O协议栈不再适用于非易失性内存设备。
为了解决现有系统软件不适用于非易失性内存设备的问题,已存在的相关工作的一个共性是精简冗余的I/O操作栈,以此节约相应的CPU开销,并为了兼容上层的应用程序,去除块设备层和文件缓存,仅保留虚拟文件系统层和文件系统层次。并针对非易失性内存的特性,进行相关优化设计,更好地挖掘非易失性内存的优势。
由于非易失内存设备相较于传统外存设备的性能大幅度提升,使得原始的性能瓶颈逐渐从外存设备转移至I/O协议栈。因此,现有技术对传统的系统I/O协议栈进行了精简优化,去除了文件缓存和块设备层,仅保留虚拟文件系统层和文件系统层,以充分挖掘非易失性内存设备性能。
现有技术都从降低CPU开销为出发点,对系统I/O协议栈和非易失性内存文件系统进行了优化,但都忽略了现阶段非易失性内存设备读写数据机制的实现特性:非易失性内存执行数据读写操作需要占用大量CPU资源,来执行内存拷贝函数完成数据读写,具体为memcpy操作。
上层软件在提交I/O请求时,可选择同步或异步工作方式,同步I/O每次只能提交一个I/O请求,并需要等待其完成后才能返回;异步I/O方式可一次提交多个I/O请求,并且不需要等待它们完成,提交后可立即返回继续执行用户程序。在非易失性内存设备上,当上层软件使用同步方式提交I/O请求,若数据量较大,将导致进程在较长时间处于内存拷贝工作中,无法及时返回用户程序;当上层软件使用异步方式提交I/O请求,因非易失性内存设备上,系统I/O协议栈发生了变化(缺少块设备层的支持,部分I/O逻辑缺失),直接导致了异步方式失效,并退化为同步方式,即使用户程序一次提交多个请求,也需要等待它们全部完成后,才能返回。并且,内存拷贝操作需要读或写由用户进程所管理的内存空间,无论是同步还是异步方式,I/O请求都只能在发起该请求的用户进程上下文中执行,即用户程序只能利用单核资源执行内存拷贝工作,无法利用多核CPU资源。
其次,传统的块设备层负责管理和协调系统内所有的I/O请求,可以对I/O请求进行合并排序处理,以充分发挥存储设备性能。在非易失性内存设备上,在由于硬件原因所导致的读写性能不对称(写性能显著低于读性能)的情况下,块设备层的缺失,会使得系统无法管理I/O请求的执行顺序,也无法对I/O请求进行合并等优化操作。
发明内容
有鉴于此,本发明实施例提供一种效率高、稳定性高以及高并发的,适用于非易失性内存的多核交互方法、系统及存储介质。
第一方面,本发明实施例提供了适用于非易失性内存的多核交互方法,包括以下步骤:
通过交互请求提交模块对交互请求环境进行初始化,并获取批量交互请求;
通过交互请求调度模块对批量交互请求进行优化处理以及分发处理;
通过内核线程管理模块为每个CPU分配内核线程,以执行批量交互请求的读写操作;
通过CPU负载检测模块实时获取各个CPU的负载状况;
通过系统崩溃恢复模块对系统数据进行恢复;
其中,所述交互请求调度模块、CPU负载检测模块、内核线程管理模块和系统崩溃恢复模块均设于非易失性内存文件系统。
进一步,所述通过交互请求提交模块对交互请求环境进行初始化,并获取批量交互请求这一步骤,包括以下步骤:
通过交互请求环境初始化模块对交互请求的内存页面和数据结构进行初始化;
根据初始化后的内存页面和数据结构,获取批量交互请求;
其中,所述通过交互请求环境初始化模块对交互请求的内存页面和数据结构进行初始化包括以下步骤:
通过内存页面对异步进程已提交的交互请求的状态信息进行存储;
配置可提交的交互请求的请求数量上限,并根据所述请求数量上限申请相应数量的内存页面和数据结构。
进一步,所述通过交互请求调度模块对批量交互请求进行优化处理以及分发处理这一步骤,包括以下步骤:
对目标文件进行分类,获取目标文件的互斥锁;
查询目标文件的等待位图和交互请求等待队列;
判断交互请求的读写范围对应的文件等待位图的比特位是否为1,若是,则;反之,则将该交互请求按偏移量进行升序排序,并链接至等待队列;
将所述交互请求链接至等待队列中的冲突队列。
进一步,所述通过交互请求调度模块对批量交互请求进行优化处理以及分发处理这一步骤,还包括以下步骤:
逐一遍历交互请求等待队列中的所有冲突队列;
对冲突队列中存在的相邻的写请求,进行合并操作;
所述合并操作具体为:
对于数据范围相同的写请求部分,仅保留所述相邻的写请求中处于冲突队列位置靠后的写请求;
对于数据范围不相同的写请求部分,则将所述相邻的写请求合并到处于冲突队列位置靠后的写请求中。
进一步,所述通过内核线程管理模块为每个CPU分配内核线程,以执行批量交互请求的读写操作这一步骤,包括以下步骤:
遍历等待队列中的每一个交互请求,获取交互请求读写范围;
获取执行位图;
判断所述交互请求的读写范围与执行位图之间的比特位是否为0,若是,则将该比特位置1并执行下一步骤;反之,则不做处理;
判断所述交互请求是否属于冲突队列,若是,则执行下一步骤;反之,则将所述交互请求发送至负载匹配度最佳的CPU,并加入对应内核线程的执行队列;
从冲突队列的第二个节点开始遍历冲突队列;
检查是否存在读请求,若存在读请求,则将该读请求前的所有交互请求同时发送至同一内核线程;若不存在读请求,则将该冲突队列的所有交互请求发送至同一内核线程;
根据冲突队列的发送情况对等待位图中的比特位状态进行修改。
进一步,所述通过CPU负载检测模块实时获取各个CPU的负载状况这一步骤,包括以下步骤:
根据Linux系统的proc文件系统中cpuinfo文件信息,判断系统架构类型:
若计算机系统架构为SMP,则CPU负载检测模块只需要返回负载值最低的CPU核;
若为NUMA架构,则分别检查交互请求的目的地址和源地址所属的CPU模块:当两地址属于同一CPU模块时,则返回该CPU模块中负载最低的CPU核;当两地址不属于同一CPU模块时,则返回源地址所属CPU模块中负载最低的CPU核;
其中,每个CPU核的负载值由CPU负载检测模块根据Linux系统的proc文件系统中stat文件信息和执行队列中交互请求信息计算得到。
进一步,还包括交互请求的读写执行步骤和交互请求完成处理的步骤。
第二方面,本发明实施例还提供了一种适用于非易失性内存的多核交互系统,包括:
交互请求提交模块,用于对交互请求环境进行初始化,并获取批量交互请求;
交互请求调度模块,用于对批量交互请求进行优化处理以及分发处理;
内核线程管理模块,用于为每个CPU分配内核线程,以执行批量交互请求的读写操作;
CPU负载检测模块,用于实时获取各个CPU的负载状况;
系统崩溃恢复模块,用于对系统数据进行恢复;
其中,所述交互请求调度模块、CPU负载检测模块、内核线程管理模块和系统崩溃恢复模块均设于非易失性内存文件系统。
第三方面,本发明实施例还提供了一种适用于非易失性内存的多核交互系统,包括:
至少一个处理器;
至少一个存储器,用于存储至少一个程序;
当所述至少一个程序被所述至少一个处理器执行,使得所述至少一个处理器实现所述的适用于非易失性内存的多核交互方法。
第四方面,本发明实施例还提供了一种存储介质,其中存储有处理器可执行的指令,所述处理器可执行的指令在由处理器执行时用于执行所述的适用于非易失性内存的多核交互方法。
上述本发明实施例中的一个或多个技术方案具有如下优点:本发明的实施例通过交互请求提交模块对交互请求环境进行初始化,然后通过交互请求调度模块对批量交互请求进行优化处理以及分发处理,接着通过内核线程管理模块为每个CPU分配内核线程;本发明实现了对批量交互请求的处理,相较于现有的同步单核处理方法,本发明能够充分发挥多核异步并发处理的优势,效率高且并发性高;另外,本发明还能通过CPU负载检测模块实时获取各个CPU的负载状况,以及通过系统崩溃恢复模块对系统数据进行恢复,提高了系统的稳定性。
附图说明
图1为本发明实施例的整体步骤流程图;
图2为本发明实施例的系统结构示意图;
图3为本发明实施例的等待队列示意图;
图4为本发明实施例的I/O请求处理流程图;
图5为本发明实施例的I/O请求优化是流程图;
图6为本发明实施例的I/O请求分发流程图;
图7为本发明实施例的I/O请求读写执行流程图;
图8为本发明实施例的I/O请求完成处理流程图。
具体实施方式
下面结合说明书附图和具体实施例对本发明作进一步解释和说明。对于本发明实施例中的步骤编号,其仅为了便于阐述说明而设置,对步骤之间的顺序不做任何限定,实施例中的各步骤的执行顺序均可根据本领域技术人员的理解来进行适应性调整。
参照图1,本发明实施例提供了适用于非易失性内存的多核交互方法,包括以下步骤:
通过交互请求提交模块对交互请求环境进行初始化,并获取批量交互请求;
通过交互请求调度模块对批量交互请求进行优化处理以及分发处理;
通过内核线程管理模块为每个CPU分配内核线程,以执行批量交互请求的读写操作;
通过CPU负载检测模块实时获取各个CPU的负载状况;
通过系统崩溃恢复模块对系统数据进行恢复;
其中,所述交互请求调度模块、CPU负载检测模块、内核线程管理模块和系统崩溃恢复模块均设于非易失性内存文件系统。
进一步作为优选的实施方式,所述通过交互请求提交模块对交互请求环境进行初始化,并获取批量交互请求这一步骤,包括以下步骤:
通过交互请求环境初始化模块对交互请求的内存页面和数据结构进行初始化;
根据初始化后的内存页面和数据结构,获取批量交互请求;
其中,所述通过交互请求环境初始化模块对交互请求的内存页面和数据结构进行初始化包括以下步骤:
通过内存页面对异步进程已提交的交互请求的状态信息进行存储;
配置可提交的交互请求的请求数量上限,并根据所述请求数量上限申请相应数量的内存页面和数据结构。
进一步作为优选的实施方式,所述通过交互请求调度模块对批量交互请求进行优化处理以及分发处理这一步骤,包括以下步骤:
对目标文件进行分类,获取目标文件的互斥锁;
查询目标文件的等待位图和交互请求等待队列;
判断交互请求的读写范围对应的文件等待位图的比特位是否为1,若是,则;反之,则将该交互请求按偏移量进行升序排序,并链接至等待队列;
将所述交互请求链接至等待队列中的冲突队列。
进一步作为优选的实施方式,所述通过交互请求调度模块对批量交互请求进行优化处理以及分发处理这一步骤,还包括以下步骤:
逐一遍历交互请求等待队列中的所有冲突队列;
对冲突队列中存在的相邻的写请求,进行合并操作;
所述合并操作具体为:
对于数据范围相同的写请求部分,仅保留所述相邻的写请求中处于冲突队列位置靠后的写请求;
对于数据范围不相同的写请求部分,则将所述相邻的写请求合并到处于冲突队列位置靠后的写请求中。
其中,本实施例可利用Linux操作系统里的iovec结构体实现,以iovec结构体描述该部分写请求,并连接到其他写请求结构体上,实现写请求合并。
进一步作为优选的实施方式,所述通过内核线程管理模块为每个CPU分配内核线程,以执行批量交互请求的读写操作这一步骤,包括以下步骤:
遍历等待队列中的每一个交互请求,获取交互请求读写范围;
获取执行位图;
判断所述交互请求的读写范围与执行位图之间的比特位是否为0,若是,则将该比特位置1并执行下一步骤;反之,则不做处理;
判断所述交互请求是否属于冲突队列,若是,则执行下一步骤;反之,则将所述交互请求发送至负载匹配度最佳的CPU,并加入对应内核线程的执行队列;
从冲突队列的第二个节点开始遍历冲突队列;
检查是否存在读请求,若存在读请求,则将该读请求前的所有交互请求同时发送至同一内核线程;若不存在读请求,则将该冲突队列的所有交互请求发送至同一内核线程;
根据冲突队列的发送情况对等待位图中的比特位状态进行修改。
进一步作为优选的实施方式,所述通过CPU负载检测模块实时获取各个CPU的负载状况这一步骤,包括以下步骤:
根据Linux系统的proc文件系统中cpuinfo文件信息,判断系统架构类型:
若计算机系统架构为SMP,则CPU负载检测模块只需要返回负载值最低的CPU核;
若为NUMA架构,则分别检查交互请求的目的地址和源地址所属的CPU模块:当两地址属于同一CPU模块时,则返回该CPU模块中负载最低的CPU核;当两地址不属于同一CPU模块时,则返回源地址所属CPU模块中负载最低的CPU核。
其中,每个CPU核的负载值由CPU负载检测模块根据Linux系统的proc文件系统中stat文件信息和执行队列中交互请求信息计算并保存。
该过程的伪代码如下:
进一步作为优选的实施方式,还包括交互请求的读写执行步骤和交互请求完成处理的步骤。
参照图1,本发明实施例还提供了一种适用于非易失性内存的多核交互系统,包括:
交互请求提交模块,用于对交互请求环境进行初始化,并获取批量交互请求;
交互请求调度模块,用于对批量交互请求进行优化处理以及分发处理;
内核线程管理模块,用于为每个CPU分配内核线程,以执行批量交互请求的读写操作;
CPU负载检测模块,用于实时获取各个CPU的负载状况;
系统崩溃恢复模块,用于对系统数据进行恢复;
其中,所述交互请求调度模块、CPU负载检测模块、内核线程管理模块和系统崩溃恢复模块均设于非易失性内存文件系统。
参照图2,本发明针对的是非易失内存设备存储体系结构,通过具体的文件系统,例如:PMFS和NOVA等,对其I/O过程进行优化。本发明细分为五个模块:(1)I/O请求提交模块、(2)I/O请求调度模块、(3)内核线程管理模块、(4)CPU负载检测模块和(5)系统崩溃恢复模块。“I/O请求提交模块”为上层应用提供接口,用于用户进程初始化I/O环境、提交I/O请求和检查I/O执行状态;“I/O请求调度模块”组织和管理来自“I/O请求提交模块”的I/O请求,对它们进行处理和优化;“内核线程管理模块”管理系统创建的内核线程,接收并异步执行来自“I/O请求调度模块”的I/O请求;“CPU负载检测模块”则获取和监控当前系统内所有CPU的负载情况,为“I/O请求调度模块”提供运行依据,例如:当“I/O请求调度模块”需要发送I/O请求时,该模块将扫描系统中的所有可用CPU(以物理核为单位),并根据当前各个CPU的负载情况,选择执行该I/O请求的最佳CPU号;“系统崩溃恢复模块”负责在系统发生断电、宕机等意外情况后,再次运行时,恢复系统状态,使系统可以再次运行,保证系统数据一致性。
其中,本实施例中提及的“I/O”请求均表示交互请求。
本发明的具体过程主要包含9个环节,其技术总体路线是:在非易失内存设备的I/O协议栈上,通过加入真正的异步处理逻辑(创建内核线程),来实现对多核体系结构的利用,具体描述如下:
(1)I/O请求环境初始化
本发明所包含的I/O请求提交模块(图2所示),将在非易失内存设备上,为上层应用提供高效的批量异步I/O请求工作机制。因采用比现有同步方式更复杂的异步批量工作方式,上层应用需提前申请相应的系统资源,包括内存页面和表示I/O请求的数据结构,并对其初始化,部分内存资源将用于记录进程已提交I/O请求的状态。在异步工作方式中,进程提交I/O请求后,便返回用户程序执行,I/O请求的执行交由内核异步完成,因此内核需要记录I/O请求执行状态,供用户进程查询。
上层应用需通过由异步工作方式提供的系统调用,设置最大I/O请求数量,由系统调用在内核中申请相应数量的内存页面和I/O请求执行所需的数据结构,并初始化异步I/O环境。
(2)批量I/O请求提交
在初始化完成后,上层应用可根据I/O需求,初始化表示异步I/O请求的数据结构,填入相关信息,随后使用批量提交系统调用,提交I/O请求至内核空间。
(3)I/O请求处理
上层应用通过I/O请求提交系统调用进入内核态,在经历虚拟文件系统层后,进入文件系统层。文件系统为系统宽度的所有进程提供服务,其中包含许多共享资源。这里需要同步访问机制在多个进程之间保证共享资源的一致性,但也可能会成为系统并发或并行性能的制约因素,因此同步机制的设计至关重要。
本发明首先以文件为粒度,设置互斥锁,保护文件元数据的一致性,并为每个文件设置I/O请求等待队列和文件等待位图,这些数据结构也由文件互斥锁保护。每个文件还设立了文件执行位图,表示正在被读写的文件数据块,该数据结构由一个独立的自旋锁保护,在修改该位图时,需要先获取自旋锁。
每个I/O请求有一个相应的数据结构,记录其相关信息,例如:对文件的读/写偏移和大小,该数据结构中还包含两组双向链表指针。等待队列存储了对该文件的所有I/O请求,其利用一组双向链表指针,以双向链表形式,链接所有I/O请求。等待队列中的I/O请求按读写的偏移量升序排序。若存在读写范围重叠的I/O请求,则这些请求按加入等待队列的先后顺序,利用另一组双向链表指针,以双向链表形式相连,组成冲突队列(如图3所示)。文件等待位图以文件数据块为单位(文件数据块大小在初始化文件系统时由系统管理员设置),设置比特位,每个比特位代表对应数据块的状态。若文件数据块上存在等待执行的I/O请求,则位图中对应的比特位将置为1;若不存在等待执行的I/O请求,文件数据块空闲,则为0。在向等待队列插入I/O请求时,只需查询等待位图状态,即可得知是否存在读写范围重叠的I/O请求。文件执行位图的表示方法与等待位图相似,当文件数据块上存在正在执行的I/O请求时,则该文件数据块对应比特位为1,反之为0。
如图4所示,进程发出的I/O请求到达文件系统层次后,将按其目标文件进行划分,随后尝试获取该目标文件的互斥锁。如果一次没有获取成功,则进程进入睡眠状态,等待互斥锁;如果获取成功,则根据I/O请求的读写范围,查询文件等待位图,若位图中对应的比特位为0,则按偏移量升序排序,插入等待队列,并将位图对应比特位置1;若位图中对应比特位为1,则查找等待队列中,读写范围重叠的I/O请求,加入冲突队列。
文件互斥锁仅保护文件粒度的元数据,当该请求队列中的I/O请求进入执行过程时,本发明将使用更细粒度的,以I/O请求读写区域为单位的范围锁,不仅能够保护文件数据的一致性,还能提高多个I/O请求对单个文件内部访问的并行性。
(4)I/O请求优化
基于非易失内存的多核并发异步I/O工作机制,使得上层应用可批量发送I/O请求,也使得系统软件可在一定范围内对全局的文件读写操作进行优化,例如:在保证一致性和顺序性的前提下,合并I/O写请求,并对I/O请求进行排序优化,以此减少写操作数据量,从而缓解现阶段非易失内存设备在读写性能上不对称所带来的影响。
如图5所示,文件等待队列优化的步骤为:检查等待队列内的所有冲突队列。当冲突队列内存在相邻的写请求,则对写请求进行合并操作,对于相同数据范围的写入,仅保留在冲突队列位置更靠后的写请求;对于不同数据范围的写入,则合并冲突队列位置更靠后的写请求中(如图3中a、b所示)。该合并可利用操作系统提供的高级I/O方式,散布读/聚集写实现,如Linux操作系统中,可利用iovec结构体描述部分的写请求,再链接到另一个写请求结构体上,完成写请求合并。
(5)I/O请求分发
非易失性内存读写工作,需要由CPU来完成,而CPU资源以线程为单位进行分配。若在当前用户进程上下文中执行,则用户进程将忙于读写工作,无法返回用户态继续执行用户程序。为了充分发挥多核资源优势,本发明为每个CPU创建内核线程,并将I/O请求交由内核线程完成,并为每个内核线程创建由自旋锁保护的执行队列,存储多个I/O请求,内核线程顺序执行,以实现异步的工作机制。
当I/O请求提交进程经历I/O请求优化流程后,目标文件等待队列中,各请求已经过优化算法处理。此时,仍处在I/O请求提交进程的运行上下文中,并持有文件互斥锁。在I/O请求发送至内核线程执行时,需要考虑I/O请求所在冲突队列状态和文件执行位图情况。
具体流程如图6所示,遍历文件等待队列,判断每一个I/O请求的发送策略。首先,读取执行位图,查看读写范围内有无正在执行的I/O请求,若读写范围文件数据块对应的比特位为1,则跳过该I/O请求或该冲突队列;若读写范围文件数据块对应的比特位为0,则直接将对应比特位置1。此处仅修改比特位为0的数据块,不存在资源竞争现象,无需获取文件执行位图自旋锁。
当一个I/O请求不属于冲突队列,即无读写范围与该请求重叠的I/O请求,立即调用系统内CPU负载检测模块提供的调度函数,传递目标文件等待队列中需要被执行I/O请求的相关信息,该函数根据预设逻辑(在过程(6)中说明),返回执行该I/O请求的最佳CPU号。随后,调用系统内的内核线程管理模块提供的接口,获取对应内核线程自旋锁,将I/O请求加入执行队列。
当I/O请求属于冲突队列,则从冲突队列第二个节点开始遍历队列,检查是否存在读请求,若存在读请求,则将该读请求前的所有I/O请求一次发送至同一内核线程;若不存在读请求,则将整个队列整体发送至同一内核线程。文件等待位图中比特位状态,需根据冲突队列发送情况修改。
最后,进程释放文件互斥锁,返回用户态,执行用户程序。
本发明也兼容并保留原有的同步I/O工作机制,同步I/O在提交请求时也需要竞争文件互斥锁。若一次没有获取成功,则进程进入睡眠状态,等待互斥锁;若成功获取互斥锁,同步I/O需读取目标文件等待位图和文件执行位图(此处仅读取执行位图,无需获取自旋锁),检查需要读写的数据块是否空闲,若空闲,则立即执行数据复制工作,此过程进程将一直持有文件互斥锁。完成复制后,进程释放文件互斥锁,从内核层返回;若不空闲,则进程陷入阻塞状态,并在冲突请求全部完成后被唤醒,执行I/O请求。因为进程阻塞时,会持有文件互斥锁,所以,其余进程无法提交I/O请求,保证了使用同步I/O方式的进程拥有更高的优先级,避免饥饿现象,更符合用户程序设计逻辑。
(6)CPU实时负载情况
在现有的内存拷贝机制下,对非易失性内存设备进行数据读写,需要占用CPU资源,增加了CPU负载,最终影响到系统内的进程性能,这是因为:使用CPU进行数据复制时,无法避免地,由多核共享的CPU高速缓存中的数据,会被替换为此次文件数据复制的部分数据,导致运行在其上的进程运行性能受到影响。但发送该I/O请求的进程,在后续执行中,若需要访问文件数据,则可在高速缓存中直接命中,提高该进程的运行效率。因此,数据复制任务交由共享高速缓存的CPU进行时,可获得该I/O进程的运行效率提升。
在现有的计算机系统架构中,单一计算机的系统架构可分为对称多处理器(Symmetric Multi-Processor,SMP)和非一致存储访问(Non-Uniform MemoryAccess,NUMA)两类。更为常见的NUMA结构,其最基本的特征是:具有多个CPU模块,每个CPU模块由多个CPU核组成,并且每个模块具有独立的本地内存插槽。因此,在NUMA结构中,有远端内存和本地内存之分。CPU模块对本地插槽上内存的访问速度,将远远高于访问远端内存的速度。因此,当数据复制时,应尽量选择目的地址所属的CPU模块执行数据复制工作。
在I/O请求需要进行分发时,I/O请求调度模块,将调用CPU负载检测模块,
并传递I/O请求的相关信息。首先读取Linux系统的proc文件系统中cpuinfo文件信息,判断系统架构类型,若计算机系统架构为SMP,则CPU负载检测模块只需要返回负载值最低的CPU核;若为NUMA架构,则分别检查I/O请求目的地址和源地址所属的CPU模块,当两地址属于同一CPU模块时,则返回该CPU模块负载最低的CPU核,当两地址不属于同一CPU模块时,则返回源地址所属CPU模块中,负载最低的CPU核。每个CPU核的负载值由CPU负载检测模块根据Linux系统的proc文件系统中stat文件信息和执行队列中交互请求信息计算并保存。
(7)I/O请求读写执行和I/O请求完成处理
为了将用户进程从数据复制工作解耦,以实现异步I/O的工作机制,本发明为每个CPU创建内核线程,来执行分配到此CPU的数据复制工作。
如图7所示,在I/O请求加入执行队列时,首先,用户进程需要获取保护内核线程的自旋锁,若获取不成功,则处于忙等待状态,直至获取该锁。随后,用户进程将I/O请求加入执行队列。当新的I/O请求加入执行队列,CPU的负载也随之改变,用户进程需调用CPU负载检测模块函数,该函数根据新加入I/O请求的读写数据量,计算其负载,并调整该CPU总负载值,随后,释放自旋锁。若此时内核线程处于睡眠状态,则用户进程需唤醒内核线程。
内核线程工作时,首先查看执行队列状态,若队列不为空,则获取自旋锁,取下第一个I/O请求,释放自旋锁,执行数据读写工作。因为此工作过程简单快速,所以自旋锁将不会影响系统整体的并发性,实现高效的同步机制设计。
如图8所示,因异步工作机制的特殊性,用户进程无法得知I/O请求的状态,内核线程完成数据复制工作后,需要向用户进程传递I/O请求完成情况。在过程(1)中,I/O环境初始化步骤已为进程申请系统资源,因此,内核线程在完成数据复制工作后,只需在进程相应的系统资源中,写入I/O请求的最新状态,进程便可通过调用异步I/O工作方式提供的系统调用,获取I/O请求完成情况。
内核线程还需根据不同情况更新文件执行位图状态,若此时内核线程执行队列或文件等待队列存在相同读写范围的I/O请求,则执行位图不需要修改;反之则需要置0。
第一步,内核线程查看执行队列情况,若为空,则跳转至第二步;若不为空,
其中检查第一个I/O请求的读写范围,是否与已完成I/O请求相同,若相同则取下此请求,继续执行。若不相同,则执行第二步。
第二步,内核线程检查文件等待队列。首先,尝试获取文件互斥锁,若不成功,则自旋获取文件执行位图自旋锁,将已完成I/O请求读写范围对应的比特位置0;若成功,则检查文件等待位图,查看是否存在与已完成请求读写范围重复的I/O请求,若存在,则按过程(5)I/O请求分发流程,将I/O请求转移至内核线程执行;若不存在,直接修改文件执行位图,将已完成I/O请求读写范围对应的比特位置0。
(8)系统崩溃恢复
为了保证非易失内存设备中,系统超级块和inode表等元数据的一致性,本发明使用了撤销(undo)日志技术。当内核线程执行读和覆盖写操作时,需要修改的元数据只有对应文件inode节点中的访问时间变量,此时,仅需使用原子写操作,即可保证元数据的一致性,无需使用日志技术。当内核线程执行扩展写操作时,系统需为文件分配新的空间,并修改超级块、文件inode中的信息。因此,在写操作执行前,内核线程需要先将系统超级块和对应文件的inode节点写入日志区域,再执行具体的写操作,并修改系统元数据至新状态。
在发生系统崩溃,系统再次恢复运行时,可能存在未完全执行的操作,系统崩溃恢复模块需要先读取各CPU的日志区域,检查是否存在需要恢复的系统元数据,若存在,则将日志中保存的系统元数据写回至相应位置,恢复系统元数据的一致性。
本发明为了提供最优的系统性能,将系统中多数的数据结构,如文件位图、文件等待队列、内核线程执行队列,放置于内存中,降低系统对这些资源的访问延迟。当系统从意外崩溃状态恢复运行时,系统崩溃恢复程序需要从非易失性内存设备中读取文件系统超级块、inode表信息,重新创建内存中的数据结构。
为了降低系统整体软件开销,简化系统设计,本发明仅保证文件元数据的一致性,而不保证文件常规数据的一致性。
另外,参照图2,本发明利用Linux内核提供的Linux Kernel AIO异步I/O方法,通过修改优化开源系统PMFS,以I/O请求提交模块、I/O请求调度模块、内核线程管理模块、CPU负载检测模块和系统崩溃恢复模块5个模块为单位(图2),实现适用于非易失内存设备的多核I/O方法及系统。
以开源项目非易失性内存文件系统PMFS(PersistentMemoryFileSystem)为基础,进行优化修改,实现高并行性和高可扩展性的数据结构设计,并加入支持异步I/O工作方式的运行逻辑,实现I/O请求调度模块、内核线程管理模块、CPU负载检测模块和系统崩溃恢复模块。
具体技术实现路线如下:
(1)将原有的集中式日志修改为分布式:为每个CPU设立日志,并修改日志调用相关代码,去除日志资源同步机制,使每个CPU上运行的进程,直接使用属于该CPU的日志。并实现系统崩溃恢复模块,在源码文件journal.c中,添加崩溃恢复相应的工作逻辑。
(2)对集中式inode表重新设计,去除inode表使用的同步机制,修改inode分配逻辑,每个CPU只能从inode表特定范围里,申请inode资源,从而消除多核并发时的争用问题。
(3)修改pmfs_inode数据结构,增加一个__le64类型变量,作为文件等待队列的指针。
(4)修改源码文件inode.c中I/O路径代码和file.c文件中的pmfs_xip_file_operations结构体,并在此文件中加入异步工作机制逻辑。此逻辑实现的关键点为,使用Linux内核提供的用户进程内存页面锁定机制和内核高端内存映射技术,将用户内存地址转换为内核内存地址,使数据复制工作可转移至其他进程上下文执行,以实现I/O请求调度模块。
(5)修改源码文件inode.c,利用Linux工作队列(workqueue)机制,创建和管理内核线程,并实现内核线程管理模块的工作逻辑。按CPU数量,创建执行队列和与之关联的自旋锁,分配给内核线程使用,并实现其工作逻辑。
(6)修改源码文件inode.c,利用Linux内核的CPU调度子系统,通过proc文件系统读取stat文件,获取各CPU实时负载状态,并结合I/O请求调度模块部分逻辑,获得执行队列负载值,实现CPU负载检测模块。
内核级异步I/O工作方式,I/O请求提交模块的实现方法为,利用Linux内核提供的Linux Kernel AIO机制,兼容其读写接口和I/O状态通知方式,实现系统过程中的(1)I/O请求环境初始化,对应Linux Kernel AIO中的系统调用io_setup,(2)批量I/O请求提交,对应系统调用为io_submit,(3)I/O请求状态检测,对应系统调用io_getevents,(4)I/O请求完成处理,由内核线程调用Linux Kernel AIO逻辑中的aio_complete函数,记录I/O请求执行情况;并结合开源系统中,对异步工作机制逻辑的支持,让内核级异步I/O工作方式得以实施。
本发明实施例的系统的部署方式步骤如下:
(1)在一台兼容X86-64指令集的计算机上安装基于Linux4.15版本内核源码的操作系统发行版,例如Ubuntu、CentOS以及ArcLinux等。并且该计算机上配备非易失性内存设备;
(2)在内核启动参数上,加入memmap字段,隔离非易失性内存设备所使用的内存地址空间,让非易失性内存设备不做普通内存使用,如′memmap=2G$4G′则表示非易失性内存设备的内存地址空间为2GB~4GB,并将其隔离;
(3)将本发明的非易失性内存多核并行文件系统对应的Linux源码包(网络链接暂不公开),下载;
(4)非易失性内存多核并行文件系统的实现代码包含在此Linux源码包中,编译,然后安装;
(5)重新启动计算机,进入到上述描述的内核源码所对应的OS中;
(6)在重启之后的终端中,使用mount命令,将先前隔离的非易失性内存格式化为非易失性内存多核并行文件系统;
(7)非易失性内存多核并行文件系统部署完成。
(8)内核级异步I/O工作方式由上层应用根据其需求调用。使用时需包含LinuxKernel AIO相关头文件。
综上所述,本发明针对非易失性内存在读写数据时,需要由CPU完成数据读写,提出了多核并发异步数据读写工作机制,利用多核资源挖掘非易失性内存的读写性能。
本发明的技术方案基于国内外研究现状,对现存开源非易失性内存文件系统进行优化设计,引入高并发、高可扩展的数据结构设计和工作逻辑。为每个CPU设置独立的日志区域,消除日志争用;为每个CPU分配inode表资源;细化文件锁粒度,引入文件范围锁取代文件锁,让读写范围不冲突的读写请求可以并行执行;为每个CPU设置内核线程,充分发挥多核优势,用于执行数据读写任务。
本发明还在非易失性内存文件系统实现了对Linux Kernel AIO异步工作机制的支持。国内外研究成果尚未有相关的研究,相关成果仅支持同步I/O工作方式,上层应用通过同步I/O系统调用,每次仅能提交一个I/O请求,并且需要等待其执行完成后才能返回,若读写数据量较大,则进程将长时间陷入内核,无法返回用户程序继续执行。本发明支持的Linux Kernel AIO内核级异步I/O工作方式,使上层应用可利用Linux Kernel AIO原有接口,批量高效地提交I/O请求,且提交后立即返回用户程序。
与国内外现有研究成果相比,本发明提出了适用于非易失内存设备的多核I/O方法及系统,为上层应用提供了异步的高效的数据读写方式,将非易失性内存读写负载从用户程序解耦至内核线程,同步与异步的并存,也使得上层应用的设计更加灵活。充分利用系统内的CPU资源来执行数据复制工作,异步多核并发将带来比同步单核更大的I/O带宽和更小的I/O延迟,充分发挥非易失性内存的高性能。且异步机制兼容Linux Kernel AIO已实现的接口,使用Linux Kernel AIO的上层应用无需修改即可直接运行,减少上层应用重新编码的成本。
本发明实施例还提供了一种适用于非易失性内存的多核交互系统,包括:
至少一个处理器;
至少一个存储器,用于存储至少一个程序;
当所述至少一个程序被所述至少一个处理器执行,使得所述至少一个处理器实现所述的适用于非易失性内存的多核交互方法。
上述方法实施例中的内容均适用于本系统实施例中,本系统实施例所具体实现的功能与上述方法实施例相同,并且达到的有益效果与上述方法实施例所达到的有益效果也相同。
此外,本发明实施例还提供了一种存储介质,其中存储有处理器可执行的指令,所述处理器可执行的指令在由处理器执行时用于执行所述的数据处理方法。
在一些可选择的实施例中,在方框图中提到的功能/操作可以不按照操作示图提到的顺序发生。例如,取决于所涉及的功能/操作,连续示出的两个方框实际上可以被大体上同时地执行或所述方框有时能以相反顺序被执行。此外,在本发明的流程图中所呈现和描述的实施例以示例的方式被提供,目的在于提供对技术更全面的理解。所公开的方法不限于本文所呈现的操作和逻辑流程。可选择的实施例是可预期的,其中各种操作的顺序被改变以及其中被描述为较大操作的一部分的子操作被独立地执行。
此外,虽然在功能性模块的背景下描述了本发明,但应当理解的是,除非另有相反说明,所述的功能和/或特征中的一个或多个可以被集成在单个物理装置和/或软件模块中,或者一个或多个功能和/或特征可以在单独的物理装置或软件模块中被实现。还可以理解的是,有关每个模块的实际实现的详细讨论对于理解本发明是不必要的。更确切地说,考虑到在本文中公开的装置中各种功能模块的属性、功能和内部关系的情况下,在工程师的常规技术内将会了解该模块的实际实现。因此,本领域技术人员运用普通技术就能够在无需过度试验的情况下实现在权利要求书中所阐明的本发明。还可以理解的是,所公开的特定概念仅仅是说明性的,并不意在限制本发明的范围,本发明的范围由所附权利要求书及其等同方案的全部范围来决定。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,“计算机可读介质”可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。
计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同物限定。
以上是对本发明的较佳实施进行了具体说明,但本发明并不限于所述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可做作出种种的等同变形或替换,这些等同的变形或替换均包含在本申请权利要求所限定的范围内。
Claims (8)
1.适用于非易失性内存的多核交互方法,其特征在于:包括以下步骤:
通过交互请求提交模块对交互请求环境进行初始化,并获取批量交互请求;
通过交互请求调度模块对批量交互请求进行优化处理以及分发处理;
通过内核线程管理模块为每个CPU分配内核线程,以执行批量交互请求的读写操作;
通过CPU负载检测模块实时获取各个CPU的负载状况;
通过系统崩溃恢复模块对系统数据进行恢复;
其中,所述交互请求调度模块、CPU负载检测模块、内核线程管理模块和系统崩溃恢复模块均设于非易失性内存文件系统;
所述通过交互请求调度模块对批量交互请求进行优化处理以及分发处理这一步骤,包括以下步骤:
对目标文件进行分类,获取目标文件的互斥锁;
查询目标文件的等待位图和交互请求等待队列;
判断交互请求的读写范围对应的文件等待位图的比特位是否为1,若是,则将所述交互请求链接至等待队列中的冲突队列;反之,则将该交互请求按偏移量进行升序排序,并链接至等待队列;
所述通过内核线程管理模块为每个CPU分配内核线程,以执行批量交互请求的读写操作这一步骤,包括以下步骤:
遍历等待队列中的每一个交互请求,获取交互请求读写范围;
获取执行位图;
判断所述交互请求的读写范围与执行位图之间的比特位是否为0,若是,则将该比特位置1并执行下一步骤;反之,则不做处理;
判断所述交互请求是否属于冲突队列,若是,则执行下一步骤;反之,则将所述交互请求发送至负载匹配度最佳的CPU,并加入对应内核线程的执行队列;
从冲突队列的第二个节点开始遍历冲突队列;
检查是否存在读请求,若存在读请求,则将该读请求前的所有交互请求同时发送至同一内核线程;若不存在读请求,则将该冲突队列的所有交互请求发送至同一内核线程;
根据冲突队列的发送情况对等待位图中的比特位状态进行修改。
2.根据权利要求1所述的适用于非易失性内存的多核交互方法,其特征在于:所述通过交互请求提交模块对交互请求环境进行初始化,并获取批量交互请求这一步骤,包括以下步骤:
通过交互请求环境初始化模块对交互请求的内存页面和数据结构进行初始化;
根据初始化后的内存页面和数据结构,获取批量交互请求;
其中,所述通过交互请求环境初始化模块对交互请求的内存页面和数据结构进行初始化包括以下步骤:
通过内存页面对异步进程已提交的交互请求的状态信息进行存储;
配置可提交的交互请求的请求数量上限,并根据所述请求数量上限申请相应数量的内存页面和数据结构。
3.根据权利要求1所述的适用于非易失性内存的多核交互方法,其特征在于:所述通过交互请求调度模块对批量交互请求进行优化处理以及分发处理这一步骤,还包括以下步骤:
逐一遍历交互请求等待队列中的所有冲突队列;
对冲突队列中存在的相邻的写请求,进行合并操作;
所述合并操作具体为:
对于数据范围相同的写请求部分,仅保留所述相邻的写请求中处于冲突队列位置靠后的写请求;
对于数据范围不相同的写请求部分,则将所述相邻的写请求合并到处于冲突队列位置靠后的写请求中。
4.根据权利要求1所述的适用于非易失性内存的多核交互方法,其特征在于:所述通过CPU负载检测模块实时获取各个CPU的负载状况这一步骤,包括以下步骤:
根据Linux系统的proc文件系统中cpuinfo文件信息,判断系统架构类型:
若计算机系统架构为SMP,则CPU负载检测模块只需要返回负载值最低的CPU核;
若为NUMA架构,则分别检查交互请求的目的地址和源地址所属的CPU模块:当两地址属于同一CPU模块时,则返回该CPU模块中负载最低的CPU核;当两地址不属于同一CPU模块时,则返回源地址所属CPU模块中负载最低的CPU核;
其中,每个CPU核的负载值由CPU负载检测模块根据Linux系统的proc文件系统中stat文件信息和执行队列中交互请求信息计算得到。
5.根据权利要求1所述的适用于非易失性内存的多核交互方法,其特征在于:还包括交互请求的读写执行步骤和交互请求完成处理的步骤。
6.适用于非易失性内存的多核交互系统,其特征在于:包括:
交互请求提交模块,用于对交互请求环境进行初始化,并获取批量交互请求;
交互请求调度模块,用于对批量交互请求进行优化处理以及分发处理;
内核线程管理模块,用于为每个CPU分配内核线程,以执行批量交互请求的读写操作;
CPU负载检测模块,用于实时获取各个CPU的负载状况;
系统崩溃恢复模块,用于对系统数据进行恢复;
其中,所述交互请求调度模块、CPU负载检测模块、内核线程管理模块和系统崩溃恢复模块均设于非易失性内存文件系统;
所述交互请求调度模块,具体用于:
对目标文件进行分类,获取目标文件的互斥锁;
查询目标文件的等待位图和交互请求等待队列;
判断交互请求的读写范围对应的文件等待位图的比特位是否为1,若是,则将所述交互请求链接至等待队列中的冲突队列;反之,则将该交互请求按偏移量进行升序排序,并链接至等待队列;
所述内核线程管理模块,具体用于:
遍历等待队列中的每一个交互请求,获取交互请求读写范围;
获取执行位图;
判断所述交互请求的读写范围与执行位图之间的比特位是否为0,若是,则将该比特位置1并执行下一步骤;反之,则不做处理;
判断所述交互请求是否属于冲突队列,若是,则执行下一步骤;反之,则将所述交互请求发送至负载匹配度最佳的CPU,并加入对应内核线程的执行队列;
从冲突队列的第二个节点开始遍历冲突队列;
检查是否存在读请求,若存在读请求,则将该读请求前的所有交互请求同时发送至同一内核线程;若不存在读请求,则将该冲突队列的所有交互请求发送至同一内核线程;
根据冲突队列的发送情况对等待位图中的比特位状态进行修改。
7.适用于非易失性内存的多核交互系统,其特征在于:包括:
至少一个处理器;
至少一个存储器,用于存储至少一个程序;
当所述至少一个程序被所述至少一个处理器执行,使得所述至少一个处理器实现如权利要求1-5中任一项所述的适用于非易失性内存的多核交互方法。
8.一种存储介质,其中存储有处理器可执行的指令,其特征在于:所述处理器可执行的指令在由处理器执行时用于执行如权利要求1-5中任一项所述的适用于非易失性内存的多核交互方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910846676.5A CN110750356B (zh) | 2019-09-09 | 2019-09-09 | 适用于非易失性内存的多核交互方法、系统及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910846676.5A CN110750356B (zh) | 2019-09-09 | 2019-09-09 | 适用于非易失性内存的多核交互方法、系统及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110750356A CN110750356A (zh) | 2020-02-04 |
CN110750356B true CN110750356B (zh) | 2022-03-29 |
Family
ID=69276129
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910846676.5A Active CN110750356B (zh) | 2019-09-09 | 2019-09-09 | 适用于非易失性内存的多核交互方法、系统及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110750356B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112214302B (zh) * | 2020-10-30 | 2023-07-21 | 中国科学院计算技术研究所 | 一种进程调度方法 |
CN113050886B (zh) * | 2021-02-23 | 2022-09-20 | 山东师范大学 | 面向嵌入式内存数据库的非易失性内存存储方法及系统 |
CN114153383A (zh) * | 2021-11-05 | 2022-03-08 | 广州文远知行科技有限公司 | 一种车辆自动驾驶系统的数据压缩存储方法及装置 |
CN114257548B (zh) * | 2021-12-21 | 2023-07-18 | 上海交通大学医学院附属瑞金医院 | 一种用于康复设备的大批量数据交换方法及装置 |
CN114022148B (zh) * | 2021-12-24 | 2022-04-22 | 杭州趣链科技有限公司 | 基于区块链的交易冲突检测方法、装置、设备和存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101266561A (zh) * | 2008-04-29 | 2008-09-17 | 中兴通讯股份有限公司 | 一种在多核多线程处理器中的核间消息通信方法 |
CN101615203A (zh) * | 2009-07-23 | 2009-12-30 | 中兴通讯股份有限公司 | 并发控制方法及装置 |
CN101706742A (zh) * | 2009-11-20 | 2010-05-12 | 北京航空航天大学 | 一种基于多核动态划分的非对称虚拟机i/o调度方法 |
EP2662771A1 (en) * | 2011-01-07 | 2013-11-13 | Fujitsu Limited | Scheduling method, and multi-core processor system |
CN104657115A (zh) * | 2015-03-12 | 2015-05-27 | 浪潮集团有限公司 | 一种集群文件系统客户端多核并发负载实现方法 |
CN105874426A (zh) * | 2014-11-10 | 2016-08-17 | 华为技术有限公司 | 一种系统调用命令的批处理方法及装置 |
-
2019
- 2019-09-09 CN CN201910846676.5A patent/CN110750356B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101266561A (zh) * | 2008-04-29 | 2008-09-17 | 中兴通讯股份有限公司 | 一种在多核多线程处理器中的核间消息通信方法 |
CN101615203A (zh) * | 2009-07-23 | 2009-12-30 | 中兴通讯股份有限公司 | 并发控制方法及装置 |
CN101706742A (zh) * | 2009-11-20 | 2010-05-12 | 北京航空航天大学 | 一种基于多核动态划分的非对称虚拟机i/o调度方法 |
EP2662771A1 (en) * | 2011-01-07 | 2013-11-13 | Fujitsu Limited | Scheduling method, and multi-core processor system |
CN105874426A (zh) * | 2014-11-10 | 2016-08-17 | 华为技术有限公司 | 一种系统调用命令的批处理方法及装置 |
CN104657115A (zh) * | 2015-03-12 | 2015-05-27 | 浪潮集团有限公司 | 一种集群文件系统客户端多核并发负载实现方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110750356A (zh) | 2020-02-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110750356B (zh) | 适用于非易失性内存的多核交互方法、系统及存储介质 | |
US6643753B2 (en) | Methods and systems for managing heap creation and allocation | |
US6848021B2 (en) | Efficient data backup using a single side file | |
US11132294B2 (en) | Real-time replicating garbage collection | |
US11620215B2 (en) | Multi-threaded pause-less replicating garbage collection | |
US20060200500A1 (en) | Method of efficiently recovering database | |
US7149865B2 (en) | Memory allocation using mask-bit pattern to encode metadata within memory address | |
US9454481B2 (en) | Affinity group access to global data | |
US6804761B1 (en) | Memory allocation system and method | |
US9307024B2 (en) | Efficient storage of small random changes to data on disk | |
CN112612623B (zh) | 一种共享内存管理的方法和设备 | |
US7376758B2 (en) | I/O dependency graphs | |
CN113568908A (zh) | 一种键值请求并行调度方法及系统 | |
US10152278B2 (en) | Logical to physical sector size adapter | |
CN112748869A (zh) | 一种数据处理方法及装置 | |
EP1020801A2 (en) | Dynamic slot allocation and tracking of multiple memory requests | |
CN113282407B (zh) | 基于持久性内存的用户层异步io方法与系统 | |
CN113791916B (zh) | 对象更新、读取方法及装置 | |
CN112948336B (zh) | 数据加速方法及缓存单元、电子设备及存储介质 | |
US7979660B2 (en) | Paging memory contents between a plurality of compute nodes in a parallel computer | |
CN115794368A (zh) | 业务系统、内存管理方法及装置 | |
CN112486410A (zh) | 一种持久性内存文件读写方法、系统、装置及存储介质 | |
CN111506458A (zh) | 一种提升f2fs文件系统事务性能的方法、模块及存储系统 | |
KR20210058613A (ko) | 단일 파일의 병렬 읽기/쓰기를 위한 락킹 방법 및 이를 구현하는 컴퓨팅 장치 | |
US9251100B2 (en) | Bitmap locking using a nodal lock |
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 |