CN102231121B - 基于内存映射的大数据文件快速并行提取方法 - Google Patents

基于内存映射的大数据文件快速并行提取方法 Download PDF

Info

Publication number
CN102231121B
CN102231121B CN 201110209643 CN201110209643A CN102231121B CN 102231121 B CN102231121 B CN 102231121B CN 201110209643 CN201110209643 CN 201110209643 CN 201110209643 A CN201110209643 A CN 201110209643A CN 102231121 B CN102231121 B CN 102231121B
Authority
CN
China
Prior art keywords
task
memory
file
mapping
mapped
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN 201110209643
Other languages
English (en)
Other versions
CN102231121A (zh
Inventor
马礼
李敬哲
杜春来
马东超
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
North China University of Technology
Original Assignee
North China University of Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by North China University of Technology filed Critical North China University of Technology
Priority to CN 201110209643 priority Critical patent/CN102231121B/zh
Publication of CN102231121A publication Critical patent/CN102231121A/zh
Application granted granted Critical
Publication of CN102231121B publication Critical patent/CN102231121B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于内存映射的大数据文件快速并行提取方法,包括:任务域生成,将任务块组成任务域,所述任务块为任务域中的元素;任务池生成,将所述任务域中的元素按低通信代价的原则进行子任务域归并,将所述任务域中的元素的集合作为任务调度的任务池,根据调度的选择来提取任务供处理器执行;任务调度,根据任务的剩余量决策任务的调度粒度,将符合要求的任务提取出所述任务池,并为映射做好准备;处理器映射,将所述提取出的任务映射到当前空闲处理器去执行。本发明能够发挥多核的优势,提高内存映射文件的效率,可以应用在单个文件在4GB以下容量的大文件读取中,能够有效提高这类文件的读取速度,提高磁盘文件I/O吞吐率。

Description

基于内存映射的大数据文件快速并行提取方法
技术领域
本发明涉及一种数据处理技术,具体说,涉及一种基于内存映射的大数据文件快速并行提取方法。
背景技术
随着多核计算机的发展,多核PC机已经可以完成许多大规模计算任务,复杂的计算往往与大量的数据文件相关,这就难免会出现应用程序一次性处理几个GB数据文件的情况,目前面对这样大数据文件的处理,存储器与辅助存储器内的数据读取往往会成为提高应用程序运行速度的瓶颈,从而不能很好运用多核系统带来的优越硬件性能。现有的内存映射文件技术,全部是在传统的单核环境下实现的,在针对大数据文件的处理方面存在着效率低下、通用性差的缺点,即普通的内存映射方法处理效率低,经过改进的内存映射方法只能应用在某些特定问题上,不具备通用性。
在大数据文件的读取方面,主要面临的问题是数据的存储、提取、处理和分析。DAS(Direct Attached Storage,直接附加存储)和FAS(Fabric AttachedStorage,网络存储)是大数据文件存储技术的两个主流方向。近年来,网络存储在P2P技术、网络存储系统等方面有了很好的发展,尤其是基于对象存储的Lustre文件系统,以其并行的数据访问、分布式的元数据管理在性能上超越了传统的网络存储架构。然而,随着当前多核处理器性能的急速提升,对于采用DAS存储方式将外部存储设备直接挂接在服务器内部总线上的个人计算机或小型服务器,其大数据文件的读取速度已经难以满足处理器计算的需求,如果文件的数据量过大甚至会出现操作系统不支持的情况,以导致系统直接崩溃。
在已有的研究中,针对大数据文件快速提取及处理的解决方法主要集中在两个方面。一种是改善硬件环境进行性能的提升,主要的做法是通过硬盘技术、磁盘阵列技术等以提高大数据文件的处理能力。这种方法不但存在着提升硬件成本的问题,而且仍无法避免文件量过大操作系统不支持的情况。另一种解决方法就是内存映射文件技术。对内存映射文件技术的研究主要有两个方面。一方面是直接利用内存映射文件技术配合相应算法提高大数据文件的处理能力;另一方面是利用特定索引方式提高内存映射文件在解决特定问题上的效率。
在已有的研究中,通过硬盘技术、磁盘阵列技术等来提高大数据文件的处理能力,不但存在着提升硬件成本的问题,而且仍无法避免文件过大导致操作系统不支持的情况。目前对大数据文件的处理普遍使用的一种方法是直接利用内存映射技术和相应算法,虽然可以支持大的数据文件,但是处理效率较低,影响系统的有效性。另一种处理大数据量文件的方法是利用特定索引方式配合内存映射文件来提高解决特定问题的效率,这种方法只针对某些特定问题,缺乏通用性。
内存映射文件(Memory-Mapped Files,MMFs)是Win32操作系统所提供的处理大数据文件的技术,这种技术系统可以利用进程地址空间中的一部分进行内存映射操作并负责管理页映射和缓冲等任务,这就使得用户在使用上是非常方便的。大数据文件被映射之后,使用者无需关心它的具体管理工作也并不需要再去通过传统的文件I/OAPI来进行文件操作,而是直接通过对文件的指针进行操作来达到操作文件的目的,操作方式如同操作我们操作程序中开辟的内存空间一样。
内存映射文件可以有三种映射,第一种是映射.exe文件,这种映射方式主要是操作系统使用。第二种映射是映射数据文件,这种映射是在访问大数据文件时很好的选择。第三种映射是借助于页面交换文件的映射,这种映射可以进行各个进程之间对相关资源的共享。本发明将主要使用第二种内存映射文件方式进行针对大数据文件的访问及处理。
系统在实现内存映射文件的时候使用0x80000000-0xBFFFFFFF这一段地址空间进行内存映射文件内容的相关操作,如表1所示。
表1Windows操作系统对进程地址空间的分配
Figure GDA00001919042800031
操作系统在进行内存映射文件工作时,之所以可以让使用者不需要进行常规的文件I/O操作就可以对文件中数据进行操作主要是以下原因:系统在进行工作时,先映射文件中的一部分数据到进程地址空间0x80000000-0xBFFFFFFF下,这种映射是虚的,因为在系统进行文件映射的时候并没有提交RAM,也就是说这里的所谓映射还没有将文件中的数据真正的从外存加载到内存,数据本身的物理存储介质没有改变。随着应用程序的执行,当应用程序运行到需要使用文件映射数据的时候,就会报出一个缺页异常,系统在捕获到这个缺页异常之后,才会分配一个RAM,将这个RAM映射到发生异常的地址处,这时真正的完成数据加载,将文件中相应的数据读到这个页面中去,最后再次执行刚才产生异常的指令。这个时候应用程序才真正意义上获取到了文件的内容。
如图1所示,是现有技术中内存映射大数据文件示意图。在Windows操作系统中,对应用程序地址空间的分配导致了应用程序只能够提交大小在2GB以内的大文件,而内存映射文件在处理大数据文件方面却可以支持16EB的文件大小。但是在具体的映射过程中,过大的数据文件需要进行多次映射,每次映射只能够映射一个比较小的视图,直到访问完整个文件。
如图2所示,是现有技术中并行内存映射大数据文件示意图。通过上述对内存映射文件机理的分析不难看出,内存映射文件的本身存在着其内在的并行性,可以通过多核环境下对视图的并行读取及处理来提高对大数据文件的处理速度。
数据并行问题是一类应用广泛的问题,广泛地存在于图型图像处理、逆向工程、数据挖掘等各个领域。从理论上讲,数据并行旨在将问题与数据进行分类的基础上,发掘问题的特征,并抽象出典型的求解过程。从应用角度讲,提出两个基本特征:一是数据量大,二是同类型元素重复操作。大数据文件的快速提取及处理问题恰好可满足这两个特征,首先,数据量大,这是大数据量的主要特征;其次,在多数应用中需要大数据文件读取时,数据文件中的数据类型一般是相同的,对数据的操作也都一致。由此可以判断大数据文件的快速提取及处理问题必然可以划分到数据并行问题范畴。
数据划分是进行并行化设计中必不可少的一部分,是设计的起点。数据划分方式可以依据经典的划分方式进行典型问题的求解,如均匀划分方法、方根划分方法、对数划分方法等。然而具体的实际问题中单纯的运用传统的方法是不够的,还需要针对具体问题采用特别订制,如利用一个内容相关的纵向数据划分策略FTDV来处理文本聚类问题取得了良好的效果。另外,多核环境下的通信资源珍贵,合理地划分显得尤为重要。因此,除上述划分方法的设计外,对大数据文件快速提取处理的数据划分还需要依据降低各个数据部分相关性的原则进行。
对大数据文件快速提取处理问题的数据划分单纯地使用传统的划分方式已经难以达到理想的效果,其原因在于内存映射文件在映射视图时使用的函数MapViewOfFile()的参数需要每次加入的映射起始位置都是64KB的整数倍。如果运用典型的数据划分方法,由于文件的长度各不相同,均匀划分、方根划分、对数划分等方法中任何一种都不可能使每次映射视图的起始位置都是64KB的整数倍。所以本节提出基于视图映射粒度的数据划分方法,设文件总大小为size,将每一个任务的大小设定为64KB,此时文件读取任务划分为size/64KB块,n个执行线程每个分到size/n×64KB长度。
接下来需要设计针对此问题的负载均衡方法,上文已经介绍了动态负载均衡和动态负载均衡方法。静态负载均衡方法可以一次性的向各个执行线程进行任务分配,分配结束之后各个线程在执行过程中并不需要进行任务的再次分配或者调度。动态负载均衡方法则需要在线程执行过程中动态的进行任务的调度,随着各个执行线程负载的变化进行任务的合理分配,这种方法拥有很好的灵活性,通常会使处理器各个处理器核心得到充分的利用,但是在调度的过程中会带来一定的通信开销。动态负载均衡在处理任务规模并不确定的问题上会比静态负载均衡有更好的执行效果。针对大数据文件快读读取及处理问题,需要根据数据读取的具体应用进行具体的问题归类,并进一步选取合理的负载均衡策略。
根据具体的应用不同,大数据文件的快速读取问题一般可以分为两大类。下面将针对两类问题的具体情况,对这两大类问题进行具体的分析并分别设计其负载均衡模型,以达到良好的设计效果。
(1)第一类大数据文件快速提取及处理问题。
第一类问题是在读取数据时,数据量已经事先确定,即所要执行的任务规模已经确定执行过程中任务量不会发生变化,如遍历文件的所有数据就是此类问题的一个典型应用。此类型的问题非常适合进行静态负载均衡设计,这样做不但不会影响到各个处理器的负载均衡,而且还会减少不必要的通信开销。
由于递归对剖技术的特点,使之非常适合用于构建大数据文件快速读取的静态负载均衡模型,将基于视图映射粒度的数据划分方式所得的结果集进行递归对剖以达到静态负载均衡的目的。
如图3所示,是现有技术中大数据文件快速读取静态负载均衡模型示意图。静态负载均衡模型模型分析如下:
1)任务域生成:将所处理的数据文件内容以64KB为单位进行划分,所有任务块组成一个集合作为任务域,每个任务块为任务域中的元素。
2)子任务域归并:将任务域中的元素按低通信代价的原则进行子任务域归并,保存归并的结果为递归对剖操作做准备。
3)递归对剖:以任务域中的各个子任务域为对剖的基本单元,进行递归对剖,要求对剖所得的子域数量等于当前处理器的核心总数。
4)处理器映射:以递归对剖的结果集为处理器核心映射的任务集,将任务集中的各个元素一次性分配给各个处理器执行(每个处理器分配到一个任务集)。
(2)第二类大数据文件快速提取及处理问题。
第二类问题是访问文件时,所需读取或处理的文件内容在程序开始运行阶段是不能确定的,其中典型的问题就是对文件中数据的查找或者对文件中的某个部分进行随机的访问。静态负载均衡的方法在面对此类问题的时候已经不能使各个处理器达到良好的负载均衡。所以针对此类问题,大数据文件的快速提取与处理问题将采取动态负载均衡方式,将所有任务按轮询的方式逐个分配给各个处于空闲状态的处理器以达到负载的均衡,也就是循环映射方法。
如图4所示,是现有技术中内存映射文件流程图。通常,内存映射文件主要是利用Windows提供的API进行实现,其实现步骤具体说明如下:
步骤401:创建或打开一个文件核心对象;
实现文件核心对象的创建和打开,并返回一个文件句柄。此处使用API函数CreateFile()实现,并可以选择访问模式、共享模式等参数。
步骤402:创建一个文件内存映射对象;
将第一步操作中返回的文件句柄作为创建内存映射对象所使用的参数。此处调用API函数CreateFileMapping()函数并可以设置内存映射对象的读写方式和映射最大长度等。
步骤403:在映射文件中指定映射区域;
本步骤用于实现文件中一部分或全部内容的映射。本步骤中调用API函数MapViewOfFile()。本步需要注意,所选取的映射内容大小必须为64KB的整数倍,否则将会出现错误。
步骤404:读写映射区域内数据;
前三个步骤已经将内存映射文件的映射工作完成,并且获取了利用API函数MapViewOfFile()返回的文件读写指针,本步骤中可以使用此文件读写指针对文件进行读写操作,操作方式和程序中操作内存中数据一样。
步骤405:解除文件映射;
使用API函数UnmapViewOfFile()完成解除映射工作。
步骤406:关闭内存映射文件;
调用API函数CloseHandle()关闭内存映射文件。
步骤407:关闭文件核心对象;
调用API函数CloseHandle()来关闭文件核心对象。
发明内容
本发明所解决的技术问题是提供一种基于内存映射的大数据文件快速并行提取方法,能够发挥多核的优势来提高内存映射文件的效率。
技术方案如下:
一种基于内存映射的大数据文件快速并行提取方法,包括:
任务域生成;将所处理的数据文件内容以64KB为单位划分成任务块,将任务块组成任务域,所述任务块为任务域中的元素;
任务池生成;将所述任务域中的元素按低通信代价的原则进行子任务域归并,将所述任务域中的元素的集合作为任务调度的任务池,根据调度的选择来提取任务供处理器执行;
任务调度;根据任务的剩余量决策任务的调度粒度,将符合要求的任务提取出所述任务池,并为映射做好准备;
在将任务块组成任务域过程中,基于视图的划分方式进行任务划分,在映射视图过程中,以一个并行粒度N为映射单位,之后随着任务集中任务量的逐渐减少,将并行粒度随之调小;
处理器映射;将所述提取出的任务映射到当前空闲处理器去执行。
进一步:所述任务域生成过程中,选取初始化文件信息/任务池,创建文件核心对象。
进一步:所述任务池生成过程中,为每个线程设置自己的任务队列,并对任务队列进行初始化,根据开设线程的总数目将其中的任务均匀分配给各个任务队列。
进一步:所述任务调度过程中,将多个线程分别分配到各个处理器核心进行处理,每个线程创建各自的内存映射对象。
进一步:各个线程分别创建自己的内存映射对象,为后续访问工作做好准备。
进一步:检索任务队列,提取访问任务,各执行线程提取自己的访问任务,判断任务队列是否为空,如果任务队列为空则将当前线程处理工作终止;如果任务队列不为空,则提出的一个任务作为本次执行任务。
进一步:所述处理器映射过程包括:映射视图、读取处理数据和解除视图映射三个步骤。
进一步:在所述映射视图过程中,各执行线程从文件起始位置按照所述调度粒度进行映射。
进一步:在读取处理数据过程中,各执行线程根据访问及处理的需要,对本视图下的数据进行操作。
技术效果包括:
1、本发明通过发挥多核的优势来提高内存映射文件的效率。本发明首次将内存映射文件技术与多核技术结合起来处理大数据文件。
2、突破了传统内存映射文件的处理速度瓶颈。
3、传统的内存映射文件技术需要结合特定的索引等技术来提高对某些问题的处理效率,解决方法存在局限性,对特定问题有依赖性。而本发明所提供的方法在拥有高效率的同时,对大数据文件读取问题有普遍的意义。
4、基于内存映射的大数据文件快速并行提取方法,在当前主流多核处理器平台下实现了对大数据文件的快速读取。此处理方法首先针对原始的内存映射文件方法内在并行性进行剖析,并进而对负载均衡模型的分析和设计,其设计中两大重点是:基于内存映射文件映射视图粒度的具体限制,结合映射粒度提出了数据划分方式;发现了静态负载均衡在处理视图访问量变化问题中的局限性,结合动态负载均衡策略实现负载均衡策略。
5、本发明的负载均衡模型设计合理,并且在算法的具体实现过程中达到了适当的优化并最终得到良好的实验效果。在多核环境之下,加速比指标测评表明,并行内存映射算法在性能方面比之原始算法有较大幅度的提高。同时,算法针对不同数据规模有良好的扩展性。基于内存映射的大数据文件快速并行提取方法,可以应用到逆向工程、数字图像处理等领域,为相关程序的高效运行提供必要的支持。其验证试验方案及结果如下:
基于内存映射的大数据文件快速并行提取方法的实验在Inter Core 2 DuoCPU P8600的处理器下实现,此型号的处理器两个核心均拥有2400MHz的主频,并有3MB二级缓存和1066MHz的系统总线频率,试验机使用320GBSATA 5400rpm的硬盘并有2048MB的内存空间。
通过两个实验进行了测试。
实验一:
第1个实验测试大数据文件快速读取的第一类问题。实验的测试方案如下:实验思路:使用两种内存映射算法进行对比实现,第一种算法以下称为算法1,第二种算法是针对第一类大数据文件读取问题的并行内存映射算法,以下称算法2。实验方法:使用算法1和算法2分别遍历大小从111.68MB到4.01GB的数据文件,统计其遍历时间。实验结果如表2所示,统计图形如图8所示。
表2实验1运行时间统计(时间单位:秒)
Figure GDA00001919042800091
实验数据反映了两种内存映射算法在提取文件数据上的时间消耗,通过曲线对比可以明显看出,本发明中的大数据文件并行提取及处理方法在性能上明显优于内存映射文件算法。在实验系统中,有效的实现了在多核环境下快速提取大数据文件的目的。
在并行内存映射实验中,算法在文件逐渐增大的过程中,保持良好的扩展性达到了平均1.76929的加速比,其原因在于在每次文件读取的过程中,在实验平台一定的情况下每次读取一个64KB视图的速度是基本一致的。不难看出算法不论是从理论上还是在具体的实验中都体现出了良好的扩展性。
实验二:
第2个实验主要针对上述第二类大数据文件快速读取问题而设计。设计思路:为了创造每个视图处理时间不一致的条件实验2的设计是在实验1的基础之上,加入了数据统计操作。此操作将统计一个数据文件中若干个部分中值为0的字节的数量,这种操作将会出现在一个随机大小的区域内进行统计的情况,因此事先无法预测这个区域内的统计结果,这恰好适合用来测试第二类大数据文件快速读取问题。
实验方法:首先,实验将利用一个随机序列RandomSizei(i=1,2,…,n)来记录各个视图中需要访问部分的大小(其中RandomSizei大小在0到64KB之间的),RandomSizei即为第i个映射为64KB的视图中需要操作的区域大小。然后,统计各个视图中需要访问的部分(0-RandomSizei字节)中值为的0字节数。
从上述的分析不难看出,RandomSizei的访问量限制会导致各个视图中需要进行访问的部分大小各不相同,这就为第二类大数据文件快速读取方法的验证提供了一个合适的背景,即各个视图访问的数量不同致使出现各个视图访问时间不同的情况。针对这种情况,第一类大数据文件快速读取方法已经难以达到良好的负载均衡效果,其任务的调度方式已经从根本上决定了负载不均衡的结果。
实验2中将统计针对第二类大数据文件读取问题的并行内存映射算法(以下称算法2)与实验1中算法1的处理时间,实验2将分别利用这两种算法来统计大小从111.681MB到4.01GB的数据文件在相同的随机序列下,各个视图中随机部分中的数据,并记录其中值为0的字节数量。实验数据如表3所示,统计图形如图9所示。
表3实验2运行时间统计(时间单位:秒)
Figure GDA00001919042800101
Figure GDA00001919042800111
上述实验表明,在针对第二类大数据文件快速读取问题设计的实验2中,并行内存映射算法依然达到了平均1.82的加速比,在多核环境下很好的适应了上述实验中针对的问题。在实验2中,如同实验1中的测试结果一样,并行内存映射算法依然达到了良好的负载均衡效果,并且针对数据量的增大体现了良好的扩展性。
通过上述两个实验可以充分证明并行内存映射算法在大数据文件快速读取及处理问题上拥有通用性的特点。在逆向工程、数字图像等领域中的大数据文件读取操作问题中,本文的方法拥有普遍的适用意义。
附图说明
图1是现有技术中内存映射大数据文件示意图;
图2是现有技术中并行内存映射大数据文件示意图;
图3是现有技术中大数据文件快速读取静态负载均衡模型示意图;
图4是现有技术中内存映射文件流程图;
图5是本发明中大数据文件快速读取的动态负载均衡模型示意图;
图6是本发明中第一类大数据文件快读读取算法流程图;
图7是本发明中第二类大数据文件快速读取流程图;
图8是本发明中表2所示实验结果的统计图形;
图9是本发明中表3所示实验数据的统计图形。
具体实施方式
本发明力求在不提高硬件成本的前提下,通过多核技术与内存映射文件技术结合,提出对大数据文件读取问题的通用高效解决方法。解决的核心问题是要提高了应用程序对高达几个GB数据量的大文件进行读取及处理时的效率,通过对多核环境的合理应用来突破原有内存映射文件方法的效率瓶颈,与此同时,本发明所提出的解决方法还将解决针对大数据文件读取的通用性问题。
本发明基于传统的循环映射方法进行了如下调整:循环映射技术倾向于将等量的任务逐个分配给各个处理器,即每次分配的任务单元是基本等量的。本发明以基于视图的划分方式进行任务划分,所得到的任务集并不以一个标准的单位分配给各个处理器核心,而是先以一个并行粒度N为映射单位,之后随着任务集中任务量的逐渐减少,将并行粒度也随之调小。
上述的映射方法就避免了在一种大粒度的并行之下出现以下情况:在任务集中的最后几个任务分配某几个处理器核心之后,其他没有分到任务的处理器处理完毕自己的任务后还需要很长时间的等待,总任务仍然无法完成。因此,上述设计可以达到负载均衡的效果。
如果使用并行粒度很小的映射方式,如以一个任务单元为一次映射的任务大小,是可以达到比上述映射方法更好的负载均衡效果,但是在任务量较大的时候,多次的任务分配会造成比较大的开销,虽然提高了负载均衡效果却因为较大的额外开销降低了整个系统的效率,这是不可取的。
如图5所示,是本发明中大数据文件快速读取的动态负载均衡模型示意图。动态负载均衡模型模型分析如下:
1、任务域生成:任务域生成部分,同静态负载均衡方式一样,以64KB为单位进行划分,所有任务块组成一个集合作为任务域,每个任务块为任务域中的元素。
2、任务池生成:将任务域中的元素按低通信代价的原则进行子任务域归并,将任务域中的元素的集合作为任务调度的任务池,其中,在具体的调度过程中,根据调度部分的选择来提取一个或者多个任务供处理器执行。
3、任务调度:根据任务的剩余量,决策任务的调度粒度,并将符合要求的任务提取出任务池,为映射做好准备。
任务调度函数将首先选择一个N值为调度粒度,N=任务总量/2/线程总数,而后任务个数剩余的百分比将低50%,在以后的分配中,将N逐渐减半直到N=1或者任务全部执行完毕。这里的N可选,根据任务总量不同可优化。
4、处理器映射:将任务提取部分得到的任务映射到当前空闲处理器去执行。
通过上述对内存映射文件算法的负载均衡建模,可以清晰地看到利用内存映射文件方法进行大数据文件的快速读取时可以达到很好的可并行性。首先,根据模型中的划分方式可以降低所要提取的数据之间的相关性,利用上述基于映射视图粒度的方法可以实现良好的数据划分。其次,经过子任务域归并后的各个并行数据的任务之间相互之间的通信很低,这就保证了各个并行执行线程之间很少需要通过通信传递相关信息或通过通信达到数据一致性,从而节省了并行的通信开销。
如图6所示,是本发明中第一类大数据文件快读读取算法流程图。针对上述第一类大数据文件快速读取的具体过程如下:
步骤601:选取初始化文件信息/任务池;
选取需要访问的数据文件FileName,并将文件大小定义为m_FileSize。初始化映射视图m_ViewSize=64KB,检测CPU核心数目n,将n作为线程数目,利用算式
Figure GDA00001919042800131
初始化任务总数目,初始化任务池TaskPool,TaskPool用来存放TaskNumber个任务(TaskPool中第i个位置任务内容为第i个映射视图的起始位移OffSizei=i*ViewSize)。
步骤602:创建文件核心对象;
打开或创建File的文件核心对象,设置访问方式为只读。
步骤603:初始化任务队列;
为每个线程设置自己的任务队列,TaskQueue1,TaskQueue2,…,TaskQueuen(i=1,2,…,n)并对其进行初始化,TaskQueuei(i=1,2,L,n)中存放的任务内容来源于TaskPool。TaskPool根据开设线程的总数目将其中的任务均匀分配给各个任务队列;
步骤604:创建内存映射对象;
创建内存映射对象是内存映射文件技术实现的一个必要步骤,为后续的映射视图的创建提供一个基础。在创建内存映射对象的过程中,传统的单核方法是只需要创建一个内存映射对象,并提供给多个线程使用,在多核环境下这种方法实现虽然可以使用,但不能够发挥多核硬件的优势,效率很低。本发明中,在多核环境下,将多个线程分别分配到各个处理器核心进行处理,每个线程创建各自的内存映射对象,执行效果可以看出可大大提高文件读取及处理效率。
各个线程分别创建自己的内存映射对象,为后续访问工作做好准备。
步骤605:检索任务队列,提取访问任务;
步骤6051:各执行线程从自己的TaskQueue中提取访问任务,判断任务队列是否为空,如果任务队列为空,即TaskQueue中无访问任务,则将当前线程处理工作终止而后跳转至步骤609;如果任务队列不为空,则利用从TaskQueue中提出的一个任务(映射位移OffSize)作为本次执行任务。
步骤606:映射视图;
各执行线程从文件中起始位置为OffSize的地方开始进行映射,调用APIMapViewOfFile(),其中映射大小参数(调度粒度)确定为m_ViewSize。如果出现映射起始位置OffSize到文件的结尾的长度小于m_ViewSize的情况,则将本次映射的视图大小选取为OffSize到文件结尾的长度。
步骤607:读取处理数据;
各执行线程根据访问及处理的需要,对本视图下的数据进行操作。
步骤608:解除视图映射;
数据处理完毕之后,各个执行线程调用API函数UnmapViewOfFile()结束本次映射,完毕之后转至步骤605,提取下一个访问任务。
步骤609:判断是否存在未执行完毕的线程,如果没有则关闭内存映射文件,否则等待;
步骤610:程序操作结束CloseHandle()。
如图7所示,是本发明中第二类大数据文件快速读取流程图。针对上述第二类大数据文件快速读取问题,并行内存映射算法流程具体如下:
步骤701:选取初始化文件信息/任务池;
选取需要访问的数据文件FileName,并将文件大小定义为m_FileSize。初始化映射视图m_ViewSize=64KB,检测CPU核心数目n,将n作为线程数目,利用算式初始化任务总数目,初始化任务池TaskPool,TaskPool用来存放TaskNumber个任务(TaskPool中第i个位置任务内容为第i个映射视图的起始位移OffSizei=i*ViewSize),初始化调度器;
步骤702:创建文件核心对象;
打开或创建File的文件核心对象,设置访问方式为只读。
步骤703:初始化调度器;
步骤704:创建内存映射对象;
各个线程分别创建自己的内存映射对象,为后续访问工作做好准备;
步骤705:申请任务;
各执行线程从文件中起始位置为OffSize的地方开始进行映射,调用APIMapViewOfFile(),其中映射大小参数确定为以m_ViewSize。如果出现映射起始位置OffSize到文件的结尾的长度小于m_ViewSize的情况,则将本次映射的视图大小选取为OffSize到文件结尾的长度;
步骤706:判断申请是否失败;
各执行线程申请任务,任务申请工作由调度器处理,如申请任务失败则转至步骤710;否则获取申请到的任务,提取出任务(映射起始位移OffSize)准备进行映射。
步骤707:映射视图;
步骤708:读取处理数据;
各执行线程根据访问及处理的需要,对本视图下的数据进行操作。
步骤709:解除视图映射;
数据处理完毕之后,各个执行线程调用API函数UnmapViewOfFile(),结束本次映射,完毕之后转至步骤705,申请新任务。
步骤710:关闭内存映射对象;
判断是否存在未执行完毕的线程,如果没有则关闭内存映射文件,否则等待线程结束.
步骤711:关闭文件核心对象,程序操作结束CloseHandle()。
OPENMP是当前主要的基于共享存储模型的并行编程模型,本发明将利用OPENMP进行并行编程实现,同时因为OPENMP本身的一些限制,在实现的过程中将使用PTHREAD线程库进行辅助编程,最终达到对多核环境的良好适应性。
对任务划分划分的实现:内存映射文件机制中,在创建了正确的文件核心对象之后,程序可以利用文件核心对象句柄,使用Windows提供的API函数GetFileSize()来获取文件的大小。根据上述算法的描述,在获取了文件大小之后便可以通过视图映射粒度的选取确定任务的总量,进而初始化任务池大小及任务池中的任务为下面的进程调度做好准备工作。
对任务调度的实现:可以利用OPENMP配合PTHREAD线程库完成,OPENMP提供的#pragma omp for可以很好的对循环进行并行化处理,其中schedule(static,size)可以进行静态调度,schedule(dynamic,size)可以进行动态调度。在具体的实现过程中,具体的任务块大小及每次向线程调度的任务块数都是可以选择的,这也为算法的优化提供了很大的空间。

Claims (9)

1.一种基于内存映射的大数据文件快速并行提取方法,包括:
任务域生成;将所处理的数据文件内容以64KB为单位划分成任务块,将任务块组成任务域,所述任务块为任务域中的元素;
任务池生成;将所述任务域中的元素按低通信代价的原则进行子任务域归并,将所述任务域中的元素的集合作为任务调度的任务池,根据调度的选择来提取任务供处理器执行;
任务调度;根据任务的剩余量决策任务的调度粒度,将符合要求的任务提取出所述任务池,并为映射做好准备;
在将任务块组成任务域过程中,基于视图的划分方式进行任务划分,在映射视图过程中,以一个并行粒度N为映射单位,之后随着任务集中任务量的逐渐减少,将并行粒度随之调小;
处理器映射;将所述提取出的任务映射到当前空闲处理器去执行。
2.如权利要求1所述的基于内存映射的大数据文件快速并行提取方法,其特征在于:所述任务域生成过程中,选取初始化文件信息/任务池,创建文件核心对象。
3.如权利要求1所述的基于内存映射的大数据文件快速并行提取方法,其特征在于:所述任务池生成过程中,为每个线程设置自己的任务队列,并对任务队列进行初始化,根据开设线程的总数目将其中的任务均匀分配给各个任务队列。
4.如权利要求1所述的基于内存映射的大数据文件快速并行提取方法,其特征在于:所述任务调度过程中,将多个线程分别分配到各个处理器核心进行处理,每个线程创建各自的内存映射对象。
5.如权利要求4所述的基于内存映射的大数据文件快速并行提取方法,其特征在于:各个线程分别创建自己的内存映射对象,为后续访问工作做好准备。
6.如权利要求5所述的基于内存映射的大数据文件快速并行提取方法,其特征在于:检索任务队列,提取访问任务,各执行线程提取自己的访问任务,判断任务队列是否为空,如果任务队列为空则将当前线程处理工作终止;如果任务队列不为空,则提出的一个任务作为本次执行任务。
7.如权利要求1所述的基于内存映射的大数据文件快速并行提取方法,其特征在于,所述处理器映射过程包括:映射视图、读取处理数据和解除视图映射三个步骤。
8.如权利要求7所述的基于内存映射的大数据文件快速并行提取方法,其特征在于:在所述映射视图过程中,各执行线程从文件起始位置按照所述调度粒度进行映射。
9.如权利要求7所述的基于内存映射的大数据文件快速并行提取方法,其特征在于:在读取处理数据过程中,各执行线程根据访问及处理的需要,对本视图下的数据进行操作。
CN 201110209643 2011-07-25 2011-07-25 基于内存映射的大数据文件快速并行提取方法 Expired - Fee Related CN102231121B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 201110209643 CN102231121B (zh) 2011-07-25 2011-07-25 基于内存映射的大数据文件快速并行提取方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 201110209643 CN102231121B (zh) 2011-07-25 2011-07-25 基于内存映射的大数据文件快速并行提取方法

Publications (2)

Publication Number Publication Date
CN102231121A CN102231121A (zh) 2011-11-02
CN102231121B true CN102231121B (zh) 2013-02-27

Family

ID=44843688

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 201110209643 Expired - Fee Related CN102231121B (zh) 2011-07-25 2011-07-25 基于内存映射的大数据文件快速并行提取方法

Country Status (1)

Country Link
CN (1) CN102231121B (zh)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103514028B (zh) * 2012-06-14 2016-12-21 北京新媒传信科技有限公司 一种处理分布式事务的方法和装置
CN103853675B (zh) * 2012-12-06 2017-03-15 深圳市海思半导体有限公司 一种访问内存的方法和设备
CN103823865A (zh) * 2014-02-25 2014-05-28 南京航空航天大学 一种数据库主存索引方法
CN104731968B (zh) * 2015-04-08 2018-06-19 河海大学 一种单机的大规模数据集的聚类挖掘方法
CN106559648A (zh) * 2015-09-29 2017-04-05 鸿富锦精密工业(深圳)有限公司 行人侦测系统及方法
CN105512185B (zh) * 2015-11-24 2019-03-26 无锡江南计算技术研究所 一种基于作业时序缓存共享的方法
CN106095695A (zh) * 2016-06-06 2016-11-09 中国石油集团川庆钻探工程有限公司地球物理勘探公司 一种基于多核处理器的地震数据快速访问方法
CN106845278A (zh) * 2016-12-26 2017-06-13 武汉斗鱼网络科技有限公司 一种文件校验方法及系统
CN108052460A (zh) * 2017-12-08 2018-05-18 安徽雷威智能科技有限公司 地面测试设备嵌入式软件中动态内存映射文件读取方法
CN109344054A (zh) * 2018-09-03 2019-02-15 郑州云海信息技术有限公司 一种软件测试数据统计方法及系统
CN109815249A (zh) * 2019-02-22 2019-05-28 苏州华必讯信息科技有限公司 基于内存映射的大数据文件快速并行提取方法
CN116150005B (zh) * 2023-01-16 2023-11-28 北京计算机技术及应用研究所 基于扩展Lustre语言的模型形式化验证方法
CN117632264B (zh) * 2024-01-24 2024-05-07 中国科学院空天信息创新研究院 一种sar数据快速并行处理方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1877534A (zh) * 2006-06-30 2006-12-13 浙江大学 一种嵌入式实时文件系统任务调度的实现方法
CN101101563A (zh) * 2007-07-23 2008-01-09 清华大学 基于海量数据分级存储系统的迁移管理方法
CN101158924A (zh) * 2007-11-27 2008-04-09 北京大学 一种虚拟机管理器的动态内存映射方法
CN101799773A (zh) * 2010-04-07 2010-08-11 福州福昕软件开发有限公司 并行计算的内存访问方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1877534A (zh) * 2006-06-30 2006-12-13 浙江大学 一种嵌入式实时文件系统任务调度的实现方法
CN101101563A (zh) * 2007-07-23 2008-01-09 清华大学 基于海量数据分级存储系统的迁移管理方法
CN101158924A (zh) * 2007-11-27 2008-04-09 北京大学 一种虚拟机管理器的动态内存映射方法
CN101799773A (zh) * 2010-04-07 2010-08-11 福州福昕软件开发有限公司 并行计算的内存访问方法

Also Published As

Publication number Publication date
CN102231121A (zh) 2011-11-02

Similar Documents

Publication Publication Date Title
CN102231121B (zh) 基于内存映射的大数据文件快速并行提取方法
Slagter et al. An improved partitioning mechanism for optimizing massive data analysis using MapReduce
Wang et al. Smart: A mapreduce-like framework for in-situ scientific analytics
Liu Computing infrastructure for big data processing
Humbetov Data-intensive computing with map-reduce and hadoop
Mikami et al. Using the Gfarm File System as a POSIX compatible storage platform for Hadoop MapReduce applications
Senthilkumar et al. A survey on job scheduling in big data
Wang et al. Actcap: Accelerating mapreduce on heterogeneous clusters with capability-aware data placement
Wang et al. Phase-reconfigurable shuffle optimization for Hadoop MapReduce
Tang et al. Dynamic slot allocation technique for MapReduce clusters
Ma et al. Dependency-aware data locality for MapReduce
Neshatpour et al. Big data analytics on heterogeneous accelerator architectures
Wang et al. CHCF: A cloud-based heterogeneous computing framework for large-scale image retrieval
Premchaiswadi et al. Optimizing and tuning MapReduce jobs to improve the large‐scale data analysis process
Zhang et al. A survey of parallel particle tracing algorithms in flow visualization
CN108132834A (zh) 多级共享高速缓冲存储器架构下的任务分配方法和系统
You et al. High-performance polyline intersection based spatial join on GPU-accelerated clusters
Malyshkin et al. Scalable distributed data allocation in LuNA fragmented programming system
Wang et al. Accelerating MapReduce on commodity clusters: an SSD-empowered approach
CN103324577A (zh) 基于最小化io访问冲突和文件分条的大规模分条文件分配系统
Cheng et al. Accelerating scientific workflows with tiered data management system
CN109815249A (zh) 基于内存映射的大数据文件快速并行提取方法
Lai et al. A BSP model graph processing system on many cores
Zhang et al. A large-scale images processing model based on Hadoop platform
Thakur et al. Dynamic Capacity Scheduling in Hadoop

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20130227

Termination date: 20170725

CF01 Termination of patent right due to non-payment of annual fee