CN111061652B - 一种基于mpi-io中间件的非易失内存管理方法与系统 - Google Patents
一种基于mpi-io中间件的非易失内存管理方法与系统 Download PDFInfo
- Publication number
- CN111061652B CN111061652B CN201911309824.6A CN201911309824A CN111061652B CN 111061652 B CN111061652 B CN 111061652B CN 201911309824 A CN201911309824 A CN 201911309824A CN 111061652 B CN111061652 B CN 111061652B
- Authority
- CN
- China
- Prior art keywords
- pool
- file
- data
- mpi
- metadata
- 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/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
- 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/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/547—Messaging middleware
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于MPI‑IO中间件的非易失内存管理方法与系统,本发明非易失内存管理方法包括MPI进程在初始化时向操作系统申请或恢复非易失内存设备中的非易失内存空间,MPI进程在进程结束前释放对应的非易失内存空间,且可利用非易失内存设备缓存IO数据,MPI进程根据非易失内存空间中缓存的缓存元数据完成对目标文件的读取或写入。本发明可统一管理高性能计算环境中的多个非易失内存设备;缓存IO数据,减小程序的IO开销;针对大规模计算中的文件进行高效临时存储与恢复;非独占使用非易失内存设备,充分利用硬件资源;不修改提供给用户的API,简单易用。
Description
技术领域
本发明涉及非易失内存在大规模计算领域的应用技术,具体涉及一种基于MPI-IO中间件的非易失内存管理方法与系统。
背景技术
近年来,高性能计算在科研、工程中发挥显著的作用:大规模的科学、工程计算问题,需要使用高性能计算机集群进行建模、演算。高性能计算需要处理大量数据,包括读取模型、读写checkpoint文件(检查点文件)等。模型文件、checkpoint文件数据量大,程序从外存中读入或写出到外存均需要产生大量IO请求与严重的IO负载。由于外存设备的物理性质限制,以及高性能计算环境中复杂的IO模式,IO负载可显著影响应用的性能。
相变存储器(Phase Change Memory,PCM)、旋转传递扭矩存储器(Spin-TransferTorque Memory,STTM)等非易失内存设备的产生为存储系统提供了新的设计思路。非易失内存设备具有速度快、延迟小、容量大、可按字节寻址、非易失等特点。将非易失内存设备部署在DIMM接口,可大幅增加程序可用的内存空间、提高持久化存储的性能,对计算机存储性能的改善具有重要意义。非易失内存将在未来部署在超算系统的每一个节点上。
进程运行的堆空间可部署在非易失内存之上。NV-heaps技术将非易失内存上的空间映射到进程的堆空间,使得进程可以在非易失内存上创建和维护需要的数据结构。使用此技术时,需要注意DRAM中堆空间与非易失内存中堆空间的指针的管理、对象的引用计数等。该技术将非易失内存视为普通内存使用,适用于程序数据对象的创建与维护;但由于非易失内存数据在掉电后不丢失的特点,需要谨慎地维护非易失对象以及与其相关的指针,以避免程序崩溃后不可回收空间。非易失内存也可用于持久化存储。NOVA文件系统是为非易失内存设计的文件系统。该技术将文件系统的索引节点(Inode)、目录(directory)、与用户数据存放在非易失内存中。系统运行时,将关键的索引信息加载到DRAM中,加速文件系统的运行。此类技术实现了文件系统的功能,将非易失内存作为高性能的持久化存储设备使用;但技术面向所有文件,缺乏针对性,且运行时独占非易失内存设备。此外,上述两种技术方案只对单节点的非易失内存进行管理,未能够统一地管理多个节点中的非易失内存设备。
MPI-IO是消息传递协议(Message Passing Interface)的IO模块,是高性能计算环境下广泛使用的IO接口。在并行计算编程模型下,MPI-IO将多个线程的IO请求进行转发和聚合,组织成为大颗粒的连续的IO请求再发送至系统,从而减小存储系统的IO负载。使用MPI-IO中间件管理非易失内存,向用户提供熟悉的MPI-IO接口、向系统发起POSIX API调用,将文件缓存数据的管理隐藏在中间过程中,具备良好的易用性与兼容性。
使用MPI-IO对非易失内存设备进行管理,需要对数据进行充分的利用与高效的管理。在高性能计算环境中,多个计算节点协同完成一个MPI程序的作业;此MPI程序产生的多个进程,将协同地管理非易失内存设备;同时,MPI进程按需向存储节点发起IO请求,访问文件的元数据与数据。非易失内存中数据缓存的组织与管理、多个进程之间的数据共享、以及缓存数据的一致性问题等是管理非易失内存的关键。
发明内容
本发明要解决的技术问题:针对现有技术的上述问题,基于非易失内存掉电数据不丢失、低访问延迟、大容量、可按字节寻址、较高价格的特点,提供一种基于MPI-IO中间件的非易失内存管理方法与系统,本发明可统一管理高性能计算环境中的多个非易失内存设备;缓存IO数据,减小程序的IO开销;针对大规模计算中的文件进行高效临时存储与恢复;非独占使用非易失内存设备,充分利用硬件资源;不修改提供给用户的API,简单易用。
为了解决上述技术问题,本发明采用的技术方案为:
一种基于MPI-IO中间件的非易失内存管理方法,实施步骤包括:
1)MPI进程在初始化时向操作系统申请或恢复非易失内存设备中的非易失内存空间;
2)MPI进程需要打开目标文件时,计算目标文件大小并划分成固定大小的分块,为每一分块创建缓存元数据,并将缓存元数据分布到参与文件访问的各个MPI进程中;
3)MPI进程根据非易失内存空间中缓存的缓存元数据完成对目标文件的读取或写入;
4)MPI进程检测本进程中关于目标文件的缓存元数据,若缓存元数据所描述的缓存为写缓存,则将其写回文件系统;清理与目标文件相关的缓存以及缓存元数据,关闭目标文件;
5)MPI进程在进程结束前释放对应的非易失内存空间。
可选地,所述非易失内存空间包括对象池obj_pool与数据块池blk_pool,不同进程的对象池obj_pool与数据块池blk_pool相互隔离;所述对象池obj_pool用于存放管理数据块池blk_pool的数据块池管理对象pool_mng_obj、缓存文件集合buffered_files,所述数据块池管理对象pool_mng_obj包括表示数据块是否有效的位图bitmap_is_valid、空闲数据块的队列queue_avail,所述缓存文件的集合buffered_files包含此进程正在参与访问的所有文件及其缓存元数据buf_metadata,所述缓存元数据buf_metadata包含数据所属文件、在此文件中的位置region、对应的缓存所在的进程编号rank与数据块池中编号blk_id、是否被修改的标记is_modified;所述对象池obj_pool的首部位置部署根对象root,其余非易失对象均通过根对象root可达;所述数据块池blk_pool用于存放缓存的文件数据;非易失内存上挂载了文件系统,所述对象池obj_pool与数据块池blk_pool在进程内用指针表示,在进程外用文件路径定位。
可选地,步骤1)MPI进程在初始化时向操作系统申请或恢复非易失内存空间的步骤包括:
1.1)MPI进程检测非易失内存空间中是否已经存在对应的对象池obj_pool,若已经存在,跳转到步骤1.2);若不存在,跳转到步骤1.7);
1.2)MPI进程打开对应的对象池obj_pool;
1.3)MPI进程在对应的对象池obj_pool的首部位置找到根对象root;
1.4)MPI进程通过根对象root恢复数据块池管理对象pool_mng_obj、缓存文件集合buffered_files,若恢复成功,跳转到步骤1.5);若恢复失败,跳转到步骤1.9);
1.5)MPI进程检测非易失内存空间中是否已存在对应的数据块池blk_pool,若已存在,则跳转到步骤1.11);若不存在,则跳转到步骤1.6);
1.6)重置数据块池管理对象pool_mng_obj、缓存文件集合buffered_files,跳转到步骤1.12);
1.7)创建对应的对象池obj_pool;
1.8)在对应的对象池obj_pool的固定位置创建根对象root;
1.9)在对应的对象池obj_pool中创建数据块池管理对象pool_mng_obj、缓存文件集合buffered_files;
1.10)检测是否存在对应的数据块池blk_pool,若存在,跳转到步骤1.11);若不存在,跳转到步骤1.12);
1.11)打开对应的数据块池blk_pool,跳转到步骤2);
1.12)创建对应的数据块池blk_pool,跳转到步骤2)。
可选地,步骤2)的详细步骤包括:
2.1)使用POSIX API打开文件目标文件;
2.2)查询目标文件的大小filesize,将目标文件按固定大小分块得到文件分块的数量n;
2.3)部署目标文件的缓存元数据;
2.4)在文件系统中查找超级元数据super_metadata,若找到,跳转到步骤2.5);若未找到超级元数据super_metadata,跳转到步骤2.7);
2.5)读取超级元数据super_metadata,找到目标文件的文件数据已经被缓存的位置;
2.6)根据新部署的缓存元数据和超级元数据super_metadata中的信息,拉取缓存数据;
2.7)将目标文件插入缓存文件集合buffered_files;
2.8)创建或更新超级元数据super_metadata,写回到以普通二进制文件的形式保存在与原文件相同的目录中的超级元数据文件中,结束打开文件的过程。
可选地,步骤2.3)部署目标文件的缓存元数据时,目标文件分成n个分块后,各分块对应的元数据依次循环分布在进程编号分别为0~p-1的p个进程中,使得第i个进程分配得到的文件分块编号为i,i+p,i+2p,…,min{i+k1p,n},其中i=0,1,2,...,p-1; 为自然数集,min为取最小值函数;定义共同访问目标文件的所有MPI进程组成一个组,在组中每个进程具有互不相同的编号,将目标文件的n个分块按照编号顺序分批分发,最终使得任意MPI进程i分配到的缓存元数据对应的数据块编号为i,i+4,i+8,......,min{i+4k2,n-1},其中i=0,1,2,3;k2∈N,N为顺序分批分发的批数。
可选地,步骤3)中完成对目标文件的读取的步骤包括:
3.1A)针对访问数据通过偏移量offset和计数count给出的访问数据范围,通过偏移量offset和计数count,MPI进程得到一组连续的分块编号p,p+1,p+2,......,从而确定所访问数据在目标文件中的分块;
3.2A)使用消息传递向其他MPI进程发送消息,访问目标文件的缓存元数据;
3.3A)查看所访问的分块是否已经被缓存,若所访问某一个数据块已被其他进程缓存,跳转到步骤3.4A);若已被本进程缓存,跳转到步骤3.10A);若未被缓存,跳转到步骤3.8A);
3.4A)使用消息传递,接收其他进程已缓存的数据;
3.5A)判断文件是否以只读模式打开;若以只读模式打开,跳转到步骤3.10A);若非只读打开,跳转到步骤3.11A);
3.6A)从本地缓存读取数据;
3.7A)发送数据到其他MPI进程;跳转到步骤3.11A);
3.8A)发出IO请求,从文件系统中读取目标文件的相应数据;
3.9A)发送数据到其他进程;
3.10A)将数据缓存到本地的数据块池blk_pool;
3.11A)更新目标文件的缓存元数据,结束读取目标文件数据过程。
可选地,步骤3)中完成对目标文件的写入的步骤包括:
3.1B)针对访问数据通过偏移量offset和计数count给出的写数据范围,判断写数据范围是否大于目标文件的原文件大小,若大于目标文件的原文件大小,则跳转到步骤3.2B);若小于等于目标文件的原文件大小,则跳转到步骤3.3B);
3.2B)根据写数据范围的文件大小重新部署缓存元数据;
3.3B)计算写数据范围在目标文件中的分块;
3.4B)使用消息传递访问缓存元数据;
3.5B)查看缓存元数据,若某一个数据块已缓存到本地,跳转到步骤3.6B);若数据块未被缓存,跳转到步骤3.8B);若数据块被其他MPI进程缓存,则跳转到步骤3.12B);
3.6B)接收其他MPI进程发送的数据;
3.7B)向数据块池申请新的数据块,写数据到新数据块,跳转到步骤3.13B);
3.8B)检测数据是否覆盖整个数据块;若已覆盖整个数据块,跳转到步骤3.10B);若未覆盖整个数据块,执行步骤3.9B);
3.9B)向操作系统发出IO请求,读取数据块中欠缺的数据;
3.10B)接收来自其他MPI进程发送的数据;
3.11B)向非易失内存申请数据块,整合数据,将数据缓存到本地;跳转到步骤3.13B);
3.12B)将数据发送到数据块所在MPI进程;
3.13B)使用消息传递向其他MPI进程,更新缓存元数据;结束写数据过程。
可选地,步骤4)的详细步骤包括:
4.1)查看本地缓存列表,检测是否存在缓存在本地的数据;若存在,则跳转到步骤4.2);若不存在,则跳转到步骤4.5);
4.2)检测该数据的元数据中修改标记is_modified是否为1;若为1,跳转到步骤4.3);若不为1,跳转到步骤4.1);
4.3)将修改标记is_modified值为1的对应的数据块从非易失内存数据块池blk_pool读出并写回文件系统,释放相应的非易失数据块;
4.4)更新缓存元数据buf_metadata;
4.5)使用消息传递,同步其他MPI进程的进度;
4.6)释放关于目标文件的缓存元数据buf_metadata;
4.7)将目标文件从缓存文件集合buffered_files中弹出;
4.8)删除目标文件的超级元数据super_metadata,结束关闭目标文件的过程。
可选地,步骤5)的详细步骤包括:
5.1)检测在缓存文件集合buffered_files中是否存在下一个文件;若存在,则跳转到步骤5.2);若不存在,则跳转到步骤5.3);
5.2)执行步骤4)关闭文件过程;跳转到步骤5.1);
5.3)释放缓存文件集合buffered_files、数据块池管理对象blk_mng_obj;
5.4)关闭及释放非易失内存空间。
此外,本发明还提供一种基于MPI-IO中间件的非易失内存管理系统,包括带有非易失内存的计算机设备,该计算机设备被编程或配置以执行所述基于MPI-IO中间件的非易失内存管理方法的步骤;该计算机设备的存储器上存储有被编程或配置以执行所述基于MPI-IO中间件的非易失内存管理方法的计算机程序。
此外,本发明还提供一种计算机可读存储介质,该计算机可读存储介质上存储有被编程或配置以执行所述基于MPI-IO中间件的非易失内存管理方法的计算机程序。
和现有技术相比,本发明具有下述优点:
1、本发明MPI进程在初始化时向操作系统申请或恢复非易失内存设备中的非易失内存空间,MPI进程在进程结束前释放对应的非易失内存空间,因此可以实现统一管理高性能计算环境中的多个非易失内存设备;
2、本发明可利用非易失内存设备缓存IO数据,减小程序的IO开销;
3、本发明可利用非易失内存设备针对大规模计算中的文件进行高效临时存储与恢复;
4、本发明为非独占使用非易失内存设备,可充分利用硬件资源;
5、本发明兼容现有文件读写API,不修改向用户提供的API,简单易用。6、本发明基于MPI程序和非易失内存设备和之间的MPI-IO中间件实现,具有非易失内存设备无关、兼容性好的优点。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。附图中MPI_Send和MPI_Recv为两个MPI消息传递接口,分别表示向协同工作的其他MPI进程发送消息或接收来自其他MPI进程的消息。
图1为本发明实施例方法的基本流程图。
图2为本发明实施例MPI进程的实际访问操作步骤图,,其中虚线部分为本实施例经历的过程,但非使用本发明的必要过程。
图3为本发明实施例方法的初始化过程流程图。
图4为本发明实施例方法打开文件的流程图。
图5为本发明实施例方法读取文件数据的流程图。
图6为本发明实施例方法写文件数据的流程图。
图7为本发明实施例方法关闭文件的流程图。
图8为本发明实施例方法的结束过程流程图。
具体实施方式
下文将以某MPI程序在运行时产生4个进程p0,p1,p2,p3,4个进程将协同访问、读写一个目标文件file0为例,对本发明基于MPI-IO中间件的非易失内存管理方法及系统进行进一步的详细说明。毫无疑问,MPI进程对目标文件的访问可以是读操作、也可以是写操作,也可以是读写操作相结合等。
如图1所示,本实施例基于MPI-IO中间件的非易失内存管理方法的实施步骤包括:
1)MPI进程在初始化时向操作系统申请或恢复非易失内存设备中的非易失内存空间;
2)MPI进程需要打开目标文件file0时,计算目标文件file0大小并划分成固定大小的分块,为每一分块创建缓存元数据,并将缓存元数据分布到参与文件访问的各个MPI进程中;
3)MPI进程根据非易失内存空间中缓存的缓存元数据完成对目标文件file0的读取或写入;
4)MPI进程检测本进程中关于目标文件file0的缓存元数据,若缓存元数据所描述的缓存为写缓存,则将其写回文件系统;清理与目标文件file0相关的缓存以及缓存元数据,关闭目标文件file0;
5)MPI进程在进程结束前释放对应的非易失内存空间。
作为一种读写操作特例,如图2所示,本实施例中MPI程序对目标文件file0file0的访问包括打开文件、读取文件数据一次、写文件数据一次、关闭文件。
本实施例中,所述非易失内存空间包括对象池obj_pool与数据块池blk_pool,不同进程的对象池obj_pool与数据块池blk_pool相互隔离;所述对象池obj_pool用于存放管理数据块池blk_pool的数据块池管理对象pool_mng_obj、缓存文件集合buffered_files,所述数据块池管理对象pool_mng_obj包括表示数据块是否有效的位图bitmap_is_valid、空闲数据块的队列queue_avail,所述缓存文件的集合buffered_files包含此进程正在参与访问的所有文件及其缓存元数据buf_metadata,所述缓存元数据buf_metadata包含数据所属文件、在此文件中的位置region、对应的缓存所在的进程编号rank与数据块池中编号blk_id、是否被修改的标记is_modified;所述对象池obj_pool的首部位置部署根对象root,其余非易失对象均通过根对象root可达;所述数据块池blk_pool用于存放缓存的文件数据;非易失内存上挂载了文件系统,所述对象池obj_pool与数据块池blk_pool在进程内用指针表示,在进程外用文件路径定位。
如图3所示,步骤1)MPI进程在初始化时向操作系统申请或恢复非易失内存空间的步骤包括:
1.1)MPI进程检测非易失内存空间中是否已经存在对应的对象池obj_pool,若已经存在,跳转到步骤1.2);若不存在,跳转到步骤1.7);
1.2)MPI进程打开对应的对象池obj_pool;
1.3)MPI进程在对应的对象池obj_pool的首部位置找到根对象root;本实施例中,根对象包含了指向数据块池管理对象的指针、指向缓存文件集合的指针等;
1.4)MPI进程通过根对象root恢复数据块池管理对象pool_mng_obj、缓存文件集合buffered_files,若恢复成功,跳转到步骤1.5);若恢复失败,跳转到步骤1.9);
1.5)MPI进程检测非易失内存空间中是否已存在对应的数据块池blk_pool,若已存在,则跳转到步骤1.11);若不存在,则跳转到步骤1.6);
1.6)重置数据块池管理对象pool_mng_obj、缓存文件集合buffered_files,跳转到步骤1.12);
1.7)创建对应的对象池obj_pool;
1.8)在对应的对象池obj_pool的固定位置创建根对象root;
1.9)在对应的对象池obj_pool中创建数据块池管理对象pool_mng_obj、缓存文件集合buffered_files;
1.10)检测是否存在对应的数据块池blk_pool,若存在,跳转到步骤1.11);若不存在,跳转到步骤1.12);
1.11)打开对应的数据块池blk_pool,跳转到步骤2);
1.12)创建对应的数据块池blk_pool,跳转到步骤2)。
本实施例中,进程多次尝试在非易失内存中恢复数据,是因为非易失内存在掉电后数据不会丢失;若MPI程序在上一次运行时非正常退出,此次重启后,非易失内存上仍存在一些数据。为保证非易失内存空间的有效利用以及MPI程序的正确运行,程序在再次启动后需要找到这些数据,对其进行再次利用或清除。本实施例中,初始化过程后每个进程各自维护一份数据,相互隔离;初始化过程产生的数据结构在结束过程释放。本实例中,各个进程向操作系统申请位于非易失内存设备上的空间,作为该进程的数据块池blk_pool和对象池obj_pool。本实施例中,恢复数据块池与对象池需要首先计算出数据块池与对象池的文件路径,通过此文件路径访问非易失内存空间。
如图4所示,步骤2)的详细步骤包括:
2.1)使用POSIX API打开文件目标文件file0;
2.2)查询目标文件file0的大小filesize,将目标文件file0按固定大小分块得到文件分块的数量n;文件分块的数量n的计算函数表达式为:
n=(filesize+blksize-1)/blksize
上式中,filesize为目标文件file0的大小,blksize为每个数据块的大小,“/”表示求商。
2.3)部署目标文件file0的缓存元数据;
2.4)在文件系统中查找超级元数据super_metadata,若找到,跳转到步骤2.5);若未找到超级元数据super_metadata,跳转到步骤2.7)。
2.5)读取超级元数据super_metadata,找到目标文件file0的文件数据已经被缓存的位置;
2.6)根据新部署的缓存元数据和超级元数据super_metadata中的信息,拉取缓存数据;
2.7)将目标文件file0插入缓存文件集合buffered_files;
2.8)创建或更新超级元数据super_metadata,写回到以普通二进制文件的形式保存在与原文件相同的目录中的超级元数据文件(“.file0.smd”)中,结束打开文件的过程。
本实施例中,步骤2.3)部署目标文件file0的缓存元数据时采用的方法为使用round-robin方法,即:目标文件file0分成n个分块后,各分块对应的元数据依次循环分布在进程编号分别为0~p-1的p个进程中,使得第i个进程分配得到的文件分块编号为i,i+p,i+2p,…,min{i+k1p,n},其中i=0,1,2,…,p-1; 为自然数集,min为取最小值函数;定义共同访问目标文件file0的所有MPI进程组成一个组,在组中每个进程具有互不相同的编号,将目标文件file0的n个分块按照编号顺序分批分发,例如定义此4个共同访问目标文件file0的所有进程组成一个组,在组中每个进程具有互不相同的编号0,1,2,3,若文件被分成n个数据块,则对应的n个缓存元数据按0,1,2,3,0,1,2,3,0,1,2,……的顺序分发,最终使得任意MPI进程i分配到的缓存元数据对应的数据块编号为i,i+4,i+8,......,min{i+4k2,n-1},其中i=0,1,2,3;k2∈N,N为顺序分批分发的批数。
min为取最小值函数,可表示为:
mn{a,b}=if a<b then a else b
即:求a、b中较小值。
本实施例中,将缓存元数据分布到各个进程,可避免在访问缓存元数据时的网络负载不均衡。步骤2.4)所述的超级元数据以文件形式实体化在文件系统中,其描述了参与访问文件的进程所在节点的名称及其对应MPI进程编号;本实施例中,file0的超级元数据包含参与访问文件file0的所有进程的节点信息,如机器名称与进程号;超级元数据以普通二进制文件的形式保存在与原文件相同的目录中,并命名为“.file0.smd”。本实施例中,将超级元数据实体化在外存,是为了程序非正常退出后,在重启后仍然可以通过超级元数据找到已经缓存在非易失内存上的用户数据。
如图5所示,步骤3)中完成对目标文件file0的读取的步骤包括:
3.1A)针对访问数据通过偏移量offset和计数count给出的访问数据范围,通过偏移量offset和计数count,MPI进程得到一组连续的分块编号p,p+1,p+2,……(这些分块的缓存状态可能不一致),从而确定所访问数据在目标文件file0中的分块;
3.2A)使用消息传递向其他MPI进程发送消息,访问目标文件file0的缓存元数据;本实施例中,本进程需要向进程p%4,(p+1)%4,(p+2)%4,......发送消息,访问位于这3个进程的缓存元数据,其中4为参与访问文件的进程的数量;百分号“%”表示求模运算,此运算用于计算当前数据块的缓存元数据所在的进程;
3.3A)查看所访问的分块是否已经被缓存(本实施例中因为涉及到3个数据块,此过程需要执行3次,但可以通过数组的方式,减小消息传递的次数),若所访问某一个数据块已被其他进程缓存,跳转到步骤3.4A);若已被本进程缓存,跳转到步骤3.10A);若未被缓存,跳转到步骤3.8A);
3.4A)使用消息传递,接收其他进程已缓存的数据;本实施例中,进程若需接收来自其他进程的数据,应首先创建对应大小的临时缓冲区(buffer),再使用消息传递协议接收数据;
3.5A)判断文件是否以只读模式打开;若以只读模式打开,跳转到步骤3.10A);若非只读打开,跳转到步骤3.11A);
3.6A)从本地缓存读取数据;
3.7A)发送数据到其他MPI进程;跳转到步骤3.11A);
3.8A)发出IO请求,从文件系统中读取目标文件file0的相应数据;
3.9A)发送数据到其他进程;
3.10A)将数据缓存到本地的数据块池blk_pool;
3.11A)更新目标文件file0的缓存元数据,结束读取目标文件file0数据过程。本实施例中,进程需要对数据块的元数据进行更新,此处的数据块指本进程直接与本地非易失缓存或文件系统交互的数据块,使用数组可以将消息传递的次数减少。
如图6所示,步骤3)中完成对目标文件file0的写入的步骤包括:
3.1B)针对访问数据通过偏移量offset和计数count给出的写数据范围,判断写数据范围(offset+count)是否大于目标文件file0的原文件大小,若大于目标文件file0的原文件大小,则跳转到步骤3.2B);若小于等于目标文件file0的原文件大小,则跳转到步骤3.3B);
3.2B)根据写数据范围的文件大小重新部署缓存元数据;
3.3B)计算写数据范围在目标文件file0中的分块;
3.4B)使用消息传递访问缓存元数据;
3.5B)查看缓存元数据,若某一个数据块已缓存到本地,跳转到步骤3.6B);若数据块未被缓存,跳转到步骤3.8B);若数据块被其他MPI进程缓存,则跳转到步骤3.12B);
3.6B)接收其他MPI进程发送的数据;
3.7B)向数据块池申请新的数据块,写数据到新数据块,跳转到步骤3.13B);
3.8B)检测数据是否覆盖整个数据块;若已覆盖整个数据块,跳转到步骤3.10B);若未覆盖整个数据块,执行步骤3.9B);
3.9B)向操作系统发出IO请求,读取数据块中欠缺的数据;
3.10B)接收来自其他MPI进程发送的数据;
3.11B)向非易失内存申请数据块,整合数据,将数据缓存到本地;跳转到步骤3.13B);
3.12B)将数据发送到数据块所在MPI进程;
3.13B)使用消息传递向其他MPI进程,更新缓存元数据;结束写数据过程。
步骤3)中完成对目标文件file0的写入的步骤出现的读取是为了实现写入数据,数据按块大小写入数据块池作为缓存(在关闭文件时再将数据块池中的整块数据写回文件中);但用户需要写入的数据可能小于一块,此时需要先将文件中对应的数据读取出来,放在块中,与用户需要写入的数据合并在一起,组成一个完整的数据块。
如图7所示,本实施例中步骤4)的详细步骤包括:
4.1)查看本地缓存列表,检测是否存在缓存在本地的数据;若存在,则跳转到步骤4.2);若不存在,则跳转到步骤4.5);
4.2)检测该数据的元数据中修改标记is_modified是否为1;若为1,跳转到步骤4.3);若不为1,跳转到步骤4.1);
4.3)将修改标记is_modified值为1的对应的数据块从非易失内存数据块池blk_pool读出并写回文件系统,释放相应的非易失数据块;
4.4)更新缓存元数据buf_metadata;
4.5)使用消息传递,同步其他MPI进程的进度;
4.6)释放关于目标文件file0的缓存元数据buf_metadata;
4.7)将目标文件file0从缓存文件集合buffered_files中弹出;
4.8)删除目标文件file0的超级元数据super_metadata,结束关闭目标文件file0的过程。
本实施例中,步骤4.5)更新缓存元数据与步骤3.11A)相似。本实施例中,每个进程针对目标文件file0file0维护一个缓存在本地的缓存列表,在打开文件时创建,在更新缓存元数据时维护;此缓存列表的更新与缓存元数据的更新被视为一个事务;缓存元数据与缓存列表总是一致的;通过本地的缓存列表,可以快速检测或访问缓存在本地的数据。
如图8所示,本实施例中步骤5)的详细步骤包括:
5.1)检测在缓存文件集合buffered_files中是否存在下一个文件;若存在,则跳转到步骤5.2);若不存在,则跳转到步骤5.3);
5.2)执行步骤4)关闭文件过程;跳转到步骤5.1);
5.3)释放缓存文件集合buffered_files、数据块池管理对象blk_mng_obj;
5.4)关闭及释放非易失内存空间。
本实施例中,执行步骤5.1)与步骤5.2)是为了避免部分打开的文件未被关闭。在结束过程保证文件关闭,才能将写缓存写回到文件系统中,保证程序的正确性,且完全释放非易失内存的空间。
综上所述,本实施例基于非易失内存掉电数据不丢失、低访问延迟、大容量、可按字节寻址、较高价格的特点,提供一种基于MPI-IO中间件的非易失内存管理方法与系统,可统一管理高性能计算环境中的多个非易失内存设备;缓存IO数据,减小程序的IO开销;针对大规模计算中的文件进行高效临时存储与恢复;非独占使用非易失内存设备,充分利用硬件资源;不修改提供给用户的API,简单易用。
此外,本实施例还提供一种基于MPI-IO中间件的非易失内存管理系统,包括带有非易失内存的计算机设备,该计算机设备被编程或配置以执行前述基于MPI-IO中间件的非易失内存管理方法的步骤;该计算机设备的存储器上存储有被编程或配置以执行前述基于MPI-IO中间件的非易失内存管理方法的计算机程序。本实施例中,该计算机设备包括用于分配、释放数据块的数据块池管理模块,用于部署、查询、更新元数据的元数据管理模块,用于读写缓存数据块的数据块读写模块,以及用于执行本实施例前述基于MPI-IO中间件的非易失内存管理方法的MPI-IO中间件。
此外,本实施例还提供一种计算机可读存储介质,其特征在于,该计算机可读存储介质上存储有被编程或配置以执行前述基于MPI-IO中间件的非易失内存管理方法的计算机程序。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (9)
1.一种基于MPI-IO中间件的非易失内存管理方法,其特征在于实施步骤包括:
1)MPI进程在初始化时向操作系统申请或恢复非易失内存设备中的非易失内存空间;
2)MPI进程需要打开目标文件时,计算目标文件大小并划分成固定大小的分块,为每一分块创建缓存元数据,并将缓存元数据分布到参与文件访问的各个MPI进程中;
3)MPI进程根据非易失内存空间中缓存的缓存元数据完成对目标文件的读取或写入;
4)MPI进程检测本进程中关于目标文件的缓存元数据,若缓存元数据所描述的缓存为写缓存,则将其写回文件系统;清理与目标文件相关的缓存以及缓存元数据,关闭目标文件;
5)MPI进程在进程结束前释放对应的非易失内存空间;
所述非易失内存空间包括对象池obj_pool与数据块池blk_pool,不同进程的对象池obj_pool与数据块池blk_pool相互隔离;所述对象池obj_pool用于存放管理数据块池blk_pool的数据块池管理对象pool_mng_obj、缓存文件集合buffered_files,所述数据块池管理对象pool_mng_obj包括表示数据块是否有效的位图bitmap_is_valid、空闲数据块的队列queue_avail,所述缓存文件的集合buffered_files包含此进程正在参与访问的所有文件及其缓存元数据buf_metadata,所述缓存元数据buf_metadata包含数据所属文件、在此文件中的位置region、对应的缓存所在的进程编号rank与数据块池中编号blk_id、是否被修改的标记is_modified;所述对象池obj_pool的首部位置部署根对象root,其余非易失对象均通过根对象root可达;所述数据块池blk_pool用于存放缓存的文件数据;非易失内存上挂载了文件系统,所述对象池obj_pool与数据块池blk_pool在进程内用指针表示,在进程外用文件路径定位。
2.根据权利要求1所述的基于MPI-IO中间件的非易失内存管理方法,其特征在于,步骤1)MPI进程在初始化时向操作系统申请或恢复非易失内存空间的步骤包括:
1.1)MPI进程检测非易失内存空间中是否已经存在对应的对象池obj_pool,若已经存在,跳转到步骤1.2);若不存在,跳转到步骤1.7);
1.2)MPI进程打开对应的对象池obj_pool;
1.3)MPI进程在对应的对象池obj_pool的首部位置找到根对象root;
1.4)MPI进程通过根对象root恢复数据块池管理对象pool_mng_obj、缓存文件集合buffered_files,若恢复成功,跳转到步骤1.5);若恢复失败,跳转到步骤1.9);
1.5)MPI进程检测非易失内存空间中是否已存在对应的数据块池blk_pool,若已存在,则跳转到步骤1.11);若不存在,则跳转到步骤1.6);
1.6)重置数据块池管理对象pool_mng_obj、缓存文件集合buffered_files,跳转到步骤1.12);
1.7)创建对应的对象池obj_pool;
1.8)在对应的对象池obj_pool的固定位置创建根对象root;
1.9)在对应的对象池obj_pool中创建数据块池管理对象pool_mng_obj、缓存文件集合buffered_files;
1.10)检测是否存在对应的数据块池blk_pool,若存在,跳转到步骤1.11);若不存在,跳转到步骤1.12);
1.11)打开对应的数据块池blk_pool,跳转到步骤2);
1.12)创建对应的数据块池blk_pool,跳转到步骤2)。
3.根据权利要求1所述的基于MPI-IO中间件的非易失内存管理方法,其特征在于,步骤2)的详细步骤包括:
2.1)使用POSIXAPI打开文件目标文件;
2.2)查询目标文件的大小filesize,将目标文件按固定大小分块得到文件分块的数量n;
2.3)部署目标文件的缓存元数据;
2.4)在文件系统中查找超级元数据super_metadata,若找到,跳转到步骤2.5);若未找到超级元数据super_metadata,跳转到步骤2.7);
2.5)读取超级元数据super_metadata,找到目标文件的文件数据已经被缓存的位置;
2.6)根据新部署的缓存元数据和超级元数据super_metadata中的信息,拉取缓存数据;
2.7)将目标文件插入缓存文件集合buffered files;
2.8)创建或更新超级元数据super_metadata,写回到以普通二进制文件的形式保存在与原文件相同的目录中的超级元数据文件中,结束打开文件的过程。
4.根据权利要求3所述的基于MPI-IO中间件的非易失内存管理方法,其特征在于,步骤2.3)部署目标文件的缓存元数据时,目标文件分成n个分块后,各分块对应的元数据依次循环分布在进程编号分别为0~p-1的p个进程中,使得第i个进程分配得到的文件分块编号为i,i+p,i+2p,...,min{i+k1p,n},其中i=0,1,2,...,p-1; 为自然数集,min为取最小值函数;定义共同访问目标文件的所有MPI进程组成一个组,在组中每个进程具有互不相同的编号,将目标文件的n个分块按照编号顺序分批分发,最终使得任意MPI进程i分配到的缓存元数据对应的数据块编号为i,i+4,i+8,......,min{i+4k2,n-1},其中i=0,1,2,3;k2∈N,N为顺序分批分发的批数。
5.根据权利要求1所述的基于MPI-IO中间件的非易失内存管理方法,其特征在于,步骤3)中完成对目标文件的读取的步骤包括:
3.1A)针对访问数据通过偏移量offset和计数count给出的访问数据范围,通过偏移量offset和计数count,MPI进程得到一组连续的分块编号p,p+1,p+2,……,从而确定所访问数据在目标文件中的分块;
3.2A)使用消息传递向其他MPI进程发送消息,访问目标文件的缓存元数据;
3.3A)查看所访问的分块是否已经被缓存,若所访问某一个数据块已被其他进程缓存,跳转到步骤3.4A);若已被本进程缓存,跳转到步骤3.10A);若未被缓存,跳转到步骤3.8A);
3.4A)使用消息传递,接收其他进程已缓存的数据;
3.5A)判断文件是否以只读模式打开;若以只读模式打开,跳转到步骤3.10A);若非只读打开,跳转到步骤3.11A);
3.6A)从本地缓存读取数据;
3.7A)发送数据到其他MPI进程;跳转到步骤3.11A);
3.8A)发出IO请求,从文件系统中读取目标文件的相应数据;
3.9A)发送数据到其他进程;
3.10A)将数据缓存到本地的数据块池blk_pool;
3.11A)更新目标文件的缓存元数据,结束读取目标文件数据过程;
步骤3)中完成对目标文件的写入的步骤包括:
3.1B)针对访问数据通过偏移量offset和计数count给出的写数据范围,判断写数据范围是否大于目标文件的原文件大小,若大于目标文件的原文件大小,则跳转到步骤3.2B);若小于等于目标文件的原文件大小,则跳转到步骤3.3B);
3.2B)根据写数据范围的文件大小重新部署缓存元数据;
3.3B)计算写数据范围在目标文件中的分块;
3.4B)使用消息传递访问缓存元数据;
3.5B)查看缓存元数据,若某一个数据块已缓存到本地,跳转到步骤3.6B);若数据块未被缓存,跳转到步骤3.8B);若数据块被其他MPI进程缓存,则跳转到步骤3.12B);
3.6B)接收其他MPI进程发送的数据;
3.7B)向数据块池申请新的数据块,写数据到新数据块,跳转到步骤3.13B);
3.8B)检测数据是否覆盖整个数据块;若已覆盖整个数据块,跳转到步骤3.10B);若未覆盖整个数据块,执行步骤3.9B);
3.9B)向操作系统发出IO请求,读取数据块中欠缺的数据;
3.10B)接收来自其他MPI进程发送的数据;
3.11B)向非易失内存申请数据块,整合数据,将数据缓存到本地;跳转到步骤3.13B);
3.12B)将数据发送到数据块所在MPI进程;
3.13B)使用消息传递向其他MPI进程,更新缓存元数据;结束写数据过程。
6.根据权利要求1所述的基于MPI-IO中间件的非易失内存管理方法,其特征在于,步骤4)的详细步骤包括:
4.1)查看本地缓存列表,检测是否存在缓存在本地的数据;若存在,则跳转到步骤4.2);若不存在,则跳转到步骤4.5);
4.2)检测该数据的元数据中修改标记is_modified是否为1;若为1,跳转到步骤4.3);若不为1,跳转到步骤4.1);
4.3)将修改标记is_modified值为1的对应的数据块从非易失内存数据块池blk_pool读出并写回文件系统,释放相应的非易失数据块;
4.4)更新缓存元数据buf_metadata;
4.5)使用消息传递,同步其他MPI进程的进度;
4.6)释放关于目标文件的缓存元数据buf_metadata;
4.7)将目标文件从缓存文件集合buffered_files中弹出;
4.8)删除目标文件的超级元数据super_metadata,结束关闭目标文件的过程。
7.根据权利要求1所述的基于MPI-IO中间件的非易失内存管理方法,其特征在于,步骤5)的详细步骤包括:
5.1)检测在缓存文件集合buffered_files中是否存在下一个文件;若存在,则跳转到步骤5.2);若不存在,则跳转到步骤5.3);
5.2)执行步骤4)关闭文件过程;跳转到步骤5.1);
5.3)释放缓存文件集合buffered_files、数据块池管理对象blk_mng_obj;
5.4)关闭及释放非易失内存空间。
8.一种基于MPI-IO中间件的非易失内存管理系统,包括带有非易失内存的计算机设备,其特征在于,该计算机设备被编程或配置以执行权利要求1~7中任意一项所述基于MPI-IO中间件的非易失内存管理方法的步骤;该计算机设备的存储器上存储有被编程或配置以执行权利要求1~7中任意一项所述基于MPI-IO中间件的非易失内存管理方法的计算机程序。
9.一种计算机可读存储介质,其特征在于,该计算机可读存储介质上存储有被编程或配置以执行权利要求1~7中任意一项所述基于MPI-IO中间件的非易失内存管理方法的计算机程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911309824.6A CN111061652B (zh) | 2019-12-18 | 2019-12-18 | 一种基于mpi-io中间件的非易失内存管理方法与系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911309824.6A CN111061652B (zh) | 2019-12-18 | 2019-12-18 | 一种基于mpi-io中间件的非易失内存管理方法与系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111061652A CN111061652A (zh) | 2020-04-24 |
CN111061652B true CN111061652B (zh) | 2021-12-31 |
Family
ID=70302214
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911309824.6A Active CN111061652B (zh) | 2019-12-18 | 2019-12-18 | 一种基于mpi-io中间件的非易失内存管理方法与系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111061652B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111736996B (zh) * | 2020-06-17 | 2022-08-16 | 上海交通大学 | 一种面向分布式非易失内存系统的进程持久化方法及装置 |
CN113791988B (zh) * | 2021-11-17 | 2022-02-18 | 畅捷通信息技术股份有限公司 | 一种降低小程序包体积的渲染方法、装置及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101206588A (zh) * | 2006-12-15 | 2008-06-25 | 国际商业机器公司 | 用于在多个进程之间分配计算操作的方法和装置 |
CN101957840A (zh) * | 2010-09-14 | 2011-01-26 | 北京同有飞骥科技有限公司 | 一种mpi并行数据存储优化方法 |
CN102591709A (zh) * | 2011-12-20 | 2012-07-18 | 南京大学 | 基于OGR的shapefile文件主从式并行写方法 |
CN109063103A (zh) * | 2018-07-27 | 2018-12-21 | 郑州云海信息技术有限公司 | 一种分布式非易失文件系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8312227B2 (en) * | 2007-05-31 | 2012-11-13 | Intel Corporation | Method and apparatus for MPI program optimization |
US9552535B2 (en) * | 2013-02-11 | 2017-01-24 | Emotient, Inc. | Data acquisition for machine perception systems |
-
2019
- 2019-12-18 CN CN201911309824.6A patent/CN111061652B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101206588A (zh) * | 2006-12-15 | 2008-06-25 | 国际商业机器公司 | 用于在多个进程之间分配计算操作的方法和装置 |
CN101957840A (zh) * | 2010-09-14 | 2011-01-26 | 北京同有飞骥科技有限公司 | 一种mpi并行数据存储优化方法 |
CN102591709A (zh) * | 2011-12-20 | 2012-07-18 | 南京大学 | 基于OGR的shapefile文件主从式并行写方法 |
CN109063103A (zh) * | 2018-07-27 | 2018-12-21 | 郑州云海信息技术有限公司 | 一种分布式非易失文件系统 |
Non-Patent Citations (1)
Title |
---|
基于多核机群的事务内存并行编程模型的研究;李文敬;《小型微型计算机系统》;20140815;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN111061652A (zh) | 2020-04-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11301433B2 (en) | Metadata journal in a distributed storage system | |
US9798655B2 (en) | Managing a cache on storage devices supporting compression | |
US8037112B2 (en) | Efficient access of flash databases | |
US7949839B2 (en) | Managing memory pages | |
CN104765575B (zh) | 信息存储处理方法 | |
CN106682110B (zh) | 一种基于哈希格网索引的影像文件存储和管理系统及方法 | |
CN109165321B (zh) | 一种基于非易失内存的一致性哈希表构建方法和系统 | |
CN110109873B (zh) | 一种用于消息队列的文件管理方法 | |
CN105718217A (zh) | 一种精简配置存储池数据一致性维护的方法及装置 | |
EP1810154A2 (en) | Flash file system management | |
US10152278B2 (en) | Logical to physical sector size adapter | |
CN111061652B (zh) | 一种基于mpi-io中间件的非易失内存管理方法与系统 | |
US11385900B2 (en) | Accessing queue data | |
CN109902034A (zh) | 快照创建方法、装置、电子设备及机器可读存储介质 | |
US11886728B2 (en) | Undo capability for memory devices | |
CN111177143A (zh) | 键值数据存储方法、装置、存储介质与电子设备 | |
CN113031876A (zh) | 一种数据处理方法、装置、设备及可读存储介质 | |
CN115712500A (zh) | 内存释放、内存恢复方法、装置、计算机设备及存储介质 | |
Pan et al. | Hart: A concurrent hash-assisted radix tree for dram-pm hybrid memory systems | |
CN110187834B (zh) | 重删副本的数据处理方法、装置、电子设备 | |
US11237925B2 (en) | Systems and methods for implementing persistent data structures on an asymmetric non-volatile memory architecture | |
CN113204520A (zh) | 一种基于分布式文件系统的遥感数据快速并发读写方法 | |
WO2024108939A1 (zh) | 一种多级映射框架、数据操作请求处理方法及系统 | |
CN115794819A (zh) | 一种数据写入方法及电子设备 | |
CN117882042A (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 | ||
CB03 | Change of inventor or designer information | ||
CB03 | Change of inventor or designer information |
Inventor after: Deng Zhenlong Inventor after: Chen Zhiguang Inventor before: Deng Zhenlong Inventor before: Chen Zhiguang Inventor before: Xiao Nong |
|
GR01 | Patent grant | ||
GR01 | Patent grant |