APP下载

内存映射技术在大数据实时存储中的应用

2017-05-13刘平贾林林

河南科技 2017年5期
关键词:内核视图进程

刘平 贾林林

(中国空空导弹研究院,河南 洛阳 471009)

内存映射技术在大数据实时存储中的应用

刘平 贾林林

(中国空空导弹研究院,河南 洛阳 471009)

大数据的高速实时存储是某图像采集设备研发过程中所要面对的一项问题,为了解决数据吞吐量大、系统并行处理任务多等问题,不进行数据缓冲存储以及文件I/O操作的内存映射文件正是解决多个进程间数据共享的最有效方法。结合某测控设备的实际研发,对内存映射技术的运行机制和具体实现流程进行进一步的研究,并针对实际情况进行特殊处理,以保证数据存储的实时性和稳定性。最后经过测控设备的实际测试,内存映射技术表现出良好的性能,满足系统数据存储方面的要求,而且相比较其他方式占用极少的物理资源,不会影响系统的性能。

内存映射;大数据;多线程;实时

某128×128元图像采集系统用于红外产品图像高速实时的连续处理,系统要求红外图像能够无差错地实时存储1h。按照产品每秒100帧频计算,1h的数据存储量大约为11.15GB,对于如此大数据量的存储,采用普通文件进行操作受限于Windows进程空间有限,无法实现4GB以上数据文件一次性存储。另外,基于文件I/O操作的普通文件操作,其存储速度慢,容易在此类实时性要求较高的系统中出现图像采集丢帧、显示速率不达要求、存储压力过大、运行可靠性低等问题,从而导致任务要求无法完成[1,2]。

通过设计专门的内存映射机制实现高速实时的红外图像实时存储,可以解决大数据量的实时存储问题。同时,该设计具备的高效率与高可靠性,也能够满足整个系统的其他要求。

1 内存映射存储特点

现在,一般采取内存映射技术完成大文件的实时存储操作。内存映射技术是Windows的一种内存管理方法。通过这种方式,在不占用额外的磁盘空间和内存空间条件下,就能实现目标磁盘文件与进程虚拟地址空间的对应关系。由于省去了数据缓冲存储及文件I/O操作,内存映射处理文件存储,速度很快而且能够一次性处理16EB(64位机)的数据量。

2 内存映射技术实现机制

内存映射文件与虚拟内存技术从本质上比较接近,两者虽然都是在磁盘空间内保留一定地址空间的区域用于完成大文件的存储,但是地址空间的性质有所不同,内存文件映射的物理存储器不是虚拟内存所采用的系统页文件,而是使用某个已经存在于磁盘上的文件,而且在对这个文件进行操作之前先期以一种类似于将文件整体从磁盘加载至内存的方式完成映射操作。

内存映射技术最大的优点在于,不对文件执行I/O操作就能处理存储于磁盘上的文件,这样做在数据处理的过程中将不需要为所有的文件重新申请并分配缓存,这类缓存操作将由系统直接进行管理,从而大大提高了系统的运行效率。

在处理大数据量的文件时,采用内存映射文件技术与其他数据存储方式相比,有其显而易见的优越性,因为在整个过程中将不再需要进行将文件数据加载至内存的操作,也不需要完成将数据从内存回写至文件和释放内存块等操作。

实际应用的系统很少采用单一线程模式运行,一般都是具有数据共享性质的多线程同时工作。共享的数据量小仍可以采取采取灵活多变的处理方式,但是如果共享数据的容量巨大,那么如果不使用内存映射文件技术而过多操作磁盘和内存,将会使系统资源不堪重负。从这一点来说,多线程数据共享处理方法首推内存映射文件技术。

3 内存映射技术运行流程

软件设计过程中,为了实现一次性存储大于4GB图像数据,并保证存储的实时性,应用内存映射文件处理方式来满足要求,并在映射中作了特殊处理保证存储的稳定性。图1给出了内存映射文件的流程图。

受Windows系统的限制,一个32位进程最大可分配4GB的虚拟地址空间,实际工程应用过程中不可能将大于这一容量的文件通过一次映射操作就完成存储。当需要处理的文件容量超过4GB时,就只能将此大文件的各个部分映射到进程的地址空间之后取消映射,然后重新映射文件的下一部分数据。这需要对上面的一般流程进行适当的更改,形成如图2的大文件内存映射流程图。

关键函数说明:

HANDLE CreateFile()

用途:创建内存映射文件内核对象。

此函数的作用主要是为内存映射文件分配物理磁盘位置,对文件内核对象的访问类型权限进行设定,主要包括可读权限、可写权限、可读写权限和设备查询权限。在此选用可读写访问权限。

HANDLE CreateFileMapping()

用途:在系统中所创建的“文件映射”内核对象保留相应指定容量大小的物理存储器。

图1 内存映射文件流程图

图2 大文件内存映射流程图

该函数中的主要参数说明:将要映射到进程的地址空间的文件句柄通过hfile参数指定,其就是之前CreateFile()函数得到的文件句柄。同时,当需要将存储器映射到进程的地址空间中时,系统首先确认物理存储器页面的应被赋予何种保护属性,而且该属性必须与CreateFile()函数打开文件时所指定的访问标识相匹配。

Windows可以采用64位值来进行文件操作,那么就需要划分一定大小的物理存储器空间用来存储内存映射文件,这时可以用2个重要参数“dwMaximumSizeHigh”与“dwMaximumSizeLow”分别指定内存映射文件内核对象大小的高32位值和低32位值。如果将其都设置为0,那么将为创建的“文件映射”内核对象保留与物理文件实际容量相同大小的区域。

关键问题是上面2个参数所指定的大小必须是系统最小分配粒度的整数倍,即64KB的整数倍。在某图像采集系统软件设计中图像数据一次性存储为12GB左右,因此设定15GB的存储空间,即2个参数分别为0x00000003和0xc0000000。

LPVOID MapViewofFile()

用途:将文件数据映射到分配给进程的地址空间,系统为保留的地址空间提交物理文件的数据。

主要参数说明:通过hFileMappingObject函数指定“文件映射”内核对象句柄。

64位偏移地址的高32位地址和低32位地址通过dw⁃FileOffsetHigh和dwFileOffsetLow分别进行指定,“文件映像视图”的首地址就是此64位地址,该地址被存放在“文件映射”内核对象所保留的地址空间中。

视图容量的大小通过dwNumberofBytesToMap来指定,该值被设置为0时,那么将忽略前面的偏移地址,系统就会把整个文件映射为一个映像。该函数的返回值代表了函数是否得到了执行:如果函数执行成功,则返回一个指针,并且指向映像视图在进程的地址空间中的起始地址;当返回值是NULL时,则表明函数执行失败。

在此,视图的大小也必须为64KB分配粒度的整数倍。采集系统软件设计中,基于资源利用率及速率方面的考虑,选用64MB为一个视图大小,即每次映射的内存大小,表示的图像帧数为64×1 024×1 024/130/128/2=2 048帧。

此外,对于同一个物理文件可以创建多个“文件映像视图”,而且这些映像在系统中是完全可以共存和重叠的。同时,为同一个物理文件创建“文件映像视图”也可以由不同的进程完成,出于节约系统资源的目的,该文件映像使用的是同一个物理文件地址空间,从而高效地在多进程间完成数据共享,实现进程通讯的目的。图3给出了件视图与物理文件空间之间的关系。

UnmapViewofFile()

用途:通过调用UnmapViewofFile()函数在文件映像数据文件不再使用时得到释放。在执行该函数操作时,必须在退出进程之前完成,以此防止进程终止后先前保留的区域得不到释放。

CloseHandle()

用途:该函数执行的是将已创建的内核对象关闭的操作,防止未主动关闭在随后的程序运行时出现资源泄露。

图3 文件视图与物理文件空间之间的关系

已经打开的内核对象需要在使用完毕之后通过CloseHandle()函数将其关闭,这与Win32的大多数对象相同。假如此时不进行关闭对象的操作,那么程序继续运行将出现资源泄露的现象。那么即使程序退出运行后操作系统会自动关闭在进程中打开而未关闭的任何对象,也会在随后的进程运行过程中必然不断积累过多的资源句柄。所以,通过CloseHandle()函数将那些不再使用的内核对象关闭是必须的。

4 存储效果及特殊处理

实际测试证明,进行大数据文件处理时采用内存映射文件技术具有很好的效果,系统可以能够稳定存储数据1h,满足设计要求。采用此处理方式与通常用CFile类和ReadFile()和WriteFile()等函数的方式相比对系统性能的影响微乎其微,因为其所消耗的物理资源极少。

由于实际应用中图像数据每次存储量均不同,可能仅有几秒钟的图像即数十兆的数据量,为了使存储满足按需分配,在结束存储时要进行特殊的处理。图4给出了实现此要求的主要步骤。

其中,以实际长度创建文件映射中将原文件映射的最终偏移量作为创建映射对象函数的内置参数,即创建了实际大小的文件映射对象。此外,要注意的是每次拷贝的数据量不能太大,最大不要超过进程的可分配地址空间2GB;也不要太小,以免拷贝次数太多,影响系统性能。在本图像采集系统软件设计中取320、640、800MB做试验,发现取640MB为一次拷贝运行良好,对系统性能无太大影响。

图4 删除文件处理

[1]张泽清.浅析Windows内存映射文件[J].福建师大福清分校学报,2006(2):20-25.

[2]吴志红,孙力,阎杰.高速红外图像实时采集存储与显示技术[J].红外技术,2003(5):56-59.

Application of Memory Mapping Technology in Large Data Storage

Liu PingJia Linlin
(China Airborne Missile Academy,Luoyang Henan 471009)

The high-speed real-time storage of big data is a problem faced in the process of equipment research and development of an image acquisition,data throughput,in order to solve the problem of parallel processing system more tasks,not the data buffer storage and file I/O operation of the memory mapped file is the most effective method to solve the data sharing between multiple processes.Combined with the actual research for measurement and control equipment,the memory mapping technology operation mechanism and implementation process were further studied, and according to the actual situation of the special treatment to ensure the real-time and stability of data storage.The result of test and control equipment,memory mapping technology shows good performance,to meet the requirements of the data storage system,and compared with other means occupy very little physical resources,will not affect the performance of the system.

memory mapping;large data;multithread;real-time

TP311

:A

:1003-5168(2017)03-0039-03

2017-02-11

刘平(1981-),男,工程师,研究方向:红外导引总体技术。

猜你喜欢

内核视图进程
强化『高新』内核 打造农业『硅谷』
债券市场对外开放的进程与展望
基于嵌入式Linux内核的自恢复设计
Linux内核mmap保护机制研究
5.3 视图与投影
视图
Y—20重型运输机多视图
SA2型76毫米车载高炮多视图
微生物内核 生态型农资
社会进程中的新闻学探寻