一种自动负载均衡的文件锁并行地震处理作业调度方法与流程

文档序号:16880502发布日期:2019-02-15 22:05阅读:138来源:国知局
一种自动负载均衡的文件锁并行地震处理作业调度方法与流程

本发明涉及一种石油天然气地震勘探和高性能计算的交叉领域,特别是关于一种自动负载均衡的文件锁并行地震处理作业调度方法。



背景技术:

随着石油天然气矿藏勘探难度的不断增加,石油行业先后提出了一些复杂的勘探技术方法,如三维地震勘探、高密度地震勘探、宽方位地震勘探和多分量地震勘探等。这些勘探方法导致需要处理的地震资料数据量急剧增加,如何高效地处理海量地震数据逐渐成为技术发展的瓶颈。目前,行业内主流的地震资料处理软件都已着手针对耗时较长的处理环节开发相应的并行处理技术。这些技术通常都采用mpi(messagepassinginterface,信息传递接口)的编程方法实现多节点并行计算。mpi是一个跨语言的通讯协议,用于编写并行计算机程序,支持点对点和广播,其目标是高性能,大规模和可移植性。在实际应用过程中,发现mpi尽管有效,但也存在一些明显的不足。例如,mpi并行处理程序运行时,需要预先为每个计算节点分配(一般采取平均分配)需要处理的数据。因此,作业一旦启动以后,如果想要增加或者减少一些计算节点,只能首先杀死现有计算节点上所有正在运行的(该)处理进程,并在为调整后的各个节点重新分配数据之后,再次启动这个并行作业。这一过程对于有数百个节点参与计算和tb数量级的地震数据处理作业来说是非常繁琐和耗费时间的。所以,在并行计算过程中不能灵活地增加或减少计算节点是mpi并行的一个不足。

此外,个别节点宕机会导致整个并行作业崩溃也是mpi并行的一个缺点。实际地震资料处理都是在pc-cluster上进行的,一些复杂的计算处理(如叠前深度偏移)常常会用到数百个以上的计算机节点。采用mpi编写的并行计算程序在运行过程中,无论是主节点还是从节点,只要任意一个节点出现问题(如宕机或进程被意外杀死),就会导致整个并行作业的崩溃。参与计算的节点数量越多,节点上运行的作业越多,这种情况出现的概率就越大。因此,在共享集群上长时间处理海量地震数据对mpi程序的运行环境和并行程序本身的稳定性都提出了严峻挑战。另外,mpi并行程序预先将要处理的数据分配给各个计算节点,这使得并行程序难以现实自动负载均衡。在异构集群环境里,或在共享集群环境里(计算节点上运行着不同用户发送的作业),每一个计算节点可以为当前作业提供的计算服务性能存在差异,经常会出现一些性能较强的节点率先完成分配的计算任务后长时间处于闲置状态,而另一些性能较差的计算节点尚有很多数据未完成处理的情况。这种现象就似大家熟知的“木桶效应”,即并行处理作业的总体运行效率由性能最低的计算节点决定。

由此可见,在地震资料处理中mpi并行作业存在3个主要缺点:(1)增减节点困难;(2)宕机损失严重;(3)负载不均衡等。如何提高海量地震资料并行处理作业在复杂计算环境下的实际运行效率成为目前亟需解决的技术问题。



技术实现要素:

针对上述问题,本发明的目的是提供一种自动负载均衡的文件锁并行地震处理作业调度方法,其提高了并行作业的实用性、安全性和运行效率,有利于海量地震数据的高效处理。

为实现上述目的,本发明采取以下技术方案:一种自动负载均衡的文件锁并行地震处理作业调度方法,其包括以下步骤:1)在共享磁盘上新建一个索引文件,该索引文件仅包含一个起始炮号,该炮号指定了下一个将要偏移处理的地震道集;2)远程登录节点发送处理作业;3)各个节点上的处理进程在文件锁同步机制下排队读取并修改索引文件,并将处理进程当前信息写入日志文件;4)处理进程完成指定的地震数据处理,并在完成后将处理进程当前信息写入日志文件;5)重复实施步骤3)~步骤4),直至全部数据被处理完成;6)检查并行作业日志文件,重处理缺失的地震数据。

进一步,所述步骤1)中,共享磁盘是高速网络上各个计算节点都能够访问的物理磁盘,并且各个计算节点对该磁盘上的共享索引文件都有读写权限。

进一步,所述步骤1)中,索引文件为ascii码书写的文本文件,其内容仅包含一个整型的起始炮号,该炮号为shot号、cdp号或offset号,需要与地震数据的存储顺序保持一致。

进一步,所述步骤2)中,远程登录节点发送处理作业如下:2.1)建立一个节点列表:节点列表是一个文本文件,该文件的每一行记录着一个参与计算的节点的主机名;2.2)通过编写一个脚本文件,循环利用linux远程shell命令rsh或ssh逐一登录节点列表上的计算节点,并进入下一步启动处理。

进一步,所述步骤3)中,当某一节点正在读取或改写索引文件时,该索引文件内容又被其它节点改写或读取时,在处理进程读写索引文件时给索引文件加上文件锁;加锁以后,索引文件操作流程变成:某处理进程从操作系统获得授权->文件解锁->读写操作->文件加锁->处理进程将授权退还操作系统;队列中的处理进程重复上述流程,直至队列中所有进程都完成了操作。

进一步,述队列中的处理进程从索引文件中读取的索引值指定了该进程要处理的地震数据道集,而修改后重新写入索引文件的索引值则指定了下一个需要处理的地震数据道集;处理进程读得索引值以后,需要将进程的当前信息写入日志文件,日志文件记录内容包含主机名、时间和日期、索引号和执行状态信息。

进一步,所述步骤4)中,处理进程对指定的地震道集数据完成叠前逆时偏移处理;叠前逆时偏移计算量很大而网络开销较小,采用多节点数据并行处理能够获得很高的并行效率;单炮数据完成偏移处理后,处理进程需要将其当前信息写入日志文件,日志文件记录内容包含主机名、时间和日期、索引号和执行状态信息,供并行作业监控使用。

进一步,所述步骤5)中,在地震数据处理过程中,始终未对计算节点具体分配处理任务,节点列表中的每个节点都是排队从索引文件中领取要处理的地震数据的索引号,在完成当前地震道集的处理以后,如果还有剩余数据没有处理,当前索引号小于或等于最大索引值,则重新到队列末尾排队领取地震数据,而倘若已无剩余数据未处理,则进程结束。

进一步,所述地震数据处理过程中,如果不同节点的计算性能存在差异,那么计算性能低的节点处理数据速度慢,排队领取的地震数据的次数就较少,而计算性能高的节点处理数据速度快,排队领取的地震数据的次数就较多,且这种“能者多劳”的状态会随计算节点的实际负载情况实时调整,实现了多节点并行自动负载均衡,并在总体上达到最高的并行计算效率。

进一步,所述步骤6)中,并行处理作业完成后,检查日志文件,核对每个道集数据的完成情况,找出那些因节点宕机或处理进程被杀死所导致的缺失数据;收集这些缺失数据的索引号,形成列表,待重新处理后补充到最终的成果数据中。

本发明由于采取以上技术方案,其具有以下优点:1、本发明能够在海量地震资料并行处理过程中根据实际需要方便地增加或者减少计算机节点,提高了海量地震资料并行处理作业的灵活性。2、本发明中个别节点宕机不会导致作业崩溃,产生的损失小(影响仅限于当前道集),显著提高了海量地震资料并行处理作业的稳定性。3、本发明实现了多节点并行自动负载均衡,这个措施极大地提高了海量地震资料并行处理作业的整体执行效率。4、本发明基于文件锁同步技术实现地震资料处理多节点自动负载均衡的并行作业调度方法,方法简单实用,效果突出。

附图说明

图1是节点列表示例;

图2是远程登录节点列表启动处理作业的csh脚本示例;

图3是多节点竞态读写文件的示例;

图4是文件锁同步后的文件顺序读写的示例;

图5是并行处理作业日志文件示例;

图6是50节点并行完成2100炮叠前逆时偏移处理的节点状态监控示例;

图7是图6中50个节点处理的不同的炮集个数;

图8是与图7对应的50个节点完成处理任务所用耗费的时间。

具体实施方式

下面结合附图和实施例对本发明进行详细的描述。

本发明提供一种自动负载均衡的文件锁并行地震处理作业调度方法,该方法是基于文件锁同步技术的地震资料处理多节点自动负载均衡的并行作业调度方法,以某条二维测线叠前逆时偏移处理为例对本发明的方法进行详细介绍。本发明包括以下步骤:

1)建立索引文件。

在共享磁盘上新建一个索引文件,该索引文件采用ascii码书写的文本文件,其内容仅包含一个整型的起始炮号(如1001),该炮号指定了下一个将要偏移处理的地震道集(地震数据道头中炮号等于1001的道集),可以是shot号、cdp号或offset号等,需要与地震数据的存储顺序保持一致。由于叠前逆时偏移是按炮集顺序处理数据,因此为了提高文件检索效率,地震数据也要按炮号顺序存储,且所有计算节点对地震数据文件和速度场文件都有可读权限,而对索引文件都有读写权限。

共享磁盘是高速(如万兆网)网络上各个计算节点都能够访问的物理磁盘,并且各个计算节点对该磁盘上的共享索引文件都有读写权限。

2)远程登录节点发送处理作业。

2.1)建立一个节点列表。节点列表是一个文本文件,该文件的每一行记录着一个参与计算的节点的主机名(如图1所示的节点列表文件包含23个参与计算的计算机节点)。

2.2)然后通过编写一个脚本文件,循环利用linux远程shell命令rsh或ssh逐一登录节点列表上的计算节点,并进入下一步启动处理。如图2所示,即是一个用csh命令编写的脚本示例。在实际应用时,可以根据处理程序使用的线程数以及计算节点内存的使用情况,在同一个节点上启动多个处理进程(如图2中的6-7行,取消注释屏蔽后即可启动两个处理进程)。

3)各个节点上的处理进程在文件锁同步机制下排队读写索引文件,并将处理进程当前信息写入日志文件。

当多个处理进程同时读写索引文件可能导致“竞态读写”的情况出现,即当某一节点正在读取(或改写)索引文件时,该索引文件内容又被其它节点改写(或读取),这不仅会让处理进程读得错误的数据,还常常造成网络堵塞甚至网络瘫痪。如图3所示,是一个轻量级的“竞态读写”示例。在未加控制的情况下,并行处理作业启动后,188个节点同时读写索引文件,可以看到很多节点都重复处理了相同的地震数据,仅1071这一炮数据就至少有b03n032y、b03n038y、b03n031y和b08n100y四个节点重复处理。当更多节点同时读写更大的数据体时,往往容易导致网络瘫痪。为解决这个问题,本发明在处理进程读写索引文件时给索引文件加上文件锁。加锁以后,所有想要访问索引文件的进程都要排队等候,只有获得了操作系统授权的那个进程可以对文件进行读写操作。此时索引文件操作流程变成:某处理进程从操作系统获得授权->文件解锁->读写操作->文件加锁->处理进程将授权退还操作系统。队列中的处理进程重复上述流程,直至队列中所有进程都完成了操作。图4是索引文件加锁后处理进程同步读写文件的示例,加锁以后再没有“竞态读写”的情况出现。处理进程从索引文件中读取的索引值指定了该进程要处理的地震数据道集,而修改后重新写入索引文件的索引值则指定了下一个需要处理的地震数据道集。如图4所示,叠前逆时偏移处理中索引文件中的索引值是shot号,节点b03n041y上的处理进程从索引文件中读得1100后,将索引值加1,再写入索引文件。上述过程表示,b03n041y将要偏移炮号等于1100的地震数据,而下一个访问索引文件的(节点b09n119y上的)处理进程将读得索引值1101。此外,处理进程读得索引值以后,需要将进程的当前信息写入日志文件,日志文件记录内容包含主机名、时间和日期、索引号和执行状态等信息(如图5所示)。

4)处理进程完成(索引值)指定的地震数据处理,并在完成后将处理进程当前信息写入日志文件。

处理进程对指定的地震道集数据完成叠前逆时偏移处理。叠前逆时偏移的特点是计算量很大而网络开销较小,采用多节点数据并行处理能够获得很高的并行效率(一般情况下计算效率随节点数线性增长)。单炮数据完成偏移处理后,处理进程需要将其当前信息写入日志文件,日志文件记录内容包含主机名、时间和日期、索引号和执行状态等信息(如图5所示),供并行作业监控使用。

5)重复实施步骤3)~步骤4),直至全部数据被处理完成。

如图6所示,启用50个计算节点完成一个2100炮地震数据的叠前逆时偏移处理,名义上平均每个节点完成42炮数据处理。然而,在地震数据处理过程中,始终未对计算节点具体分配处理任务,节点列表中的每个节点都是排队从索引文件中领取要处理的地震数据(的索引号),在完成当前地震道集的处理以后,如果还有剩余数据没有处理(即当前索引号小于或等于最大索引值),则重新到队列末尾排队领取地震数据,而倘若已无剩余数据未处理,则进程结束。在上述地震数据处理过程中,如果不同节点的计算性能存在差异,那么计算性能低的节点处理数据速度慢,排队领取的地震数据的次数自然就较少,而计算性能高的节点处理数据速度快,排队领取的地震数据的次数自然就较多,且这种“能者多劳”的状态会随计算节点的实际负载情况实时调整,从而巧妙地实现了多节点并行自动负载均衡,并在总体上达到最高的并行计算效率。如图7所示,50个节点完成的处理数据量不是等同的名义42炮,由于计算性能存在差异,其中18号节点仅完成了12炮处理,29号节点完成了33炮处理,16号节点完成了35炮处理,而2、3、4、6等节点则完成了44炮处理。图8是与图7对应的50个节点完成数据处理所耗费的时间,各个节点耗费的时间略有差异,但总体上同时结束了处理任务,没有任何节点长时间闲置等待的情况出现,相对于mpi预先等分数据的并行处理,提高了并行计算效率。此外,在上述地震数据处理过程中,如果需要增加一些节点参与当前的处理任务,不需要终止各节点上的当前处理进程,而只需新建一个(仅含新增节点的)节点列表,并直接按步骤2)中方式重新启动这个处理作业即可。如果需要减少一些参与当前处理的节点,则直接(在步骤2)中将启动作业改为杀死作业)杀死这些处理进程即可。此时,杀死进程所带来的损失与个别节点宕机造成的损失相同,即只会造成与杀死进程个数等量的道集数据缺失。

6)检查并行作业日志文件,重处理缺失的地震数据。

并行处理作业完成后,检查日志文件,核对每个炮集数据的完成情况,找出那些因节点宕机或处理进程被杀死所导致的缺失数据(如果某炮数据处理只有起始时间而没有结束时间则说明该数据缺失)。收集这些缺失数据的炮号,形成列表,待重新处理后补充到最终的成果数据中。

上述各实施例仅用于说明本发明,各个步骤都是可以有所变化的,在本发明技术方案的基础上,凡根据本发明原理对个别步骤进行的改进和等同变换,均不应排除在本发明的保护范围之外。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1