陈 楠
(中国石油化工股份有限公司石油物探技术研究院,江苏 南京 211103)
基于D-Bus技术的地震作业管理架构设计
陈 楠
(中国石油化工股份有限公司石油物探技术研究院,江苏 南京 211103)
油气地球物理软件研发随着勘探领域的技术进步面临着越来越大的压力。通过对Windows和Linux系统下进程间通信机制和技术的研究与试验,描述了一个基于D-Bus技术的单机多任务并行处理软件架构。结合对油气地球物理勘探领域地震数据批量处理的需求调研,进行了两种操作系统下的D-Bus兼容试验,并结合试验成果设计了针对地震批处理作业管理的框架结构,以“自顶向下,分工明确,高聚合,低耦合”的设计原则,编写了相应的程序,研发了一套批量处理软件产品。通过在实际地震勘探室内生产中的应用测试结果表明,该产品具备良好的跨平台特性,从运行速度、硬件资源的利用率以及系统稳定性方面较以前的单机单任务实时处理模式有显著的提高,解决了进程并发处理模式下导致的系统资源不足的瓶颈问题。
D-Bus;批处理;并行;Qt;架构
大数据量任务处理一直是地球物理软件研发面临的重要技术难题。在生产领域,调试参数与后续的批量计算往往是先后关系,在科研领域里也是一样,不同之处在于科研阶段的测试数据往往相对较小,批量运算不影响交互操作,所以许多专业功能软件在开发初期将软件的执行模式设计为实时批处理,即用户交互操作的同时同一进程进行批量处理工作,这种模式的优点在于开发周期短、工程进度快,可以将开发重点偏重于功能(地球物理)算法研发方面,从而忽略了系统的可扩展性。
随着近年来野外勘探技术的快速发展,高精度、高密度、高覆盖次数地震采集技术的进步[1],使得地震数据日趋庞大。现状是,在算法不变、数据量逐渐增大的过程中,传统的单机单任务批量处理模式存在几个方面的问题:
(1)硬件资源没有得到合理的使用;
(2)交互-批处理争夺有限的硬件资源,增加了操作系统的资源分配周期,导致应用程序运行效率降低;
(3)常有内存不足的情况发生,使得应用程序异常退出,影响生产进度。
“叠前叠后联合解释软件“是一套集实时叠前分析、偏移距/入射角部分叠加、AVO属性分析及储层方位各向异性分析等功能于一体的叠前流体识别和裂缝检测工具,软件工程方面的特点是集交互分析、批量处理为一体的系统。针对引言中提出的几个问题,结合实际生产项目,某工区4个方位的CRP叠前道集数据所占用磁盘空间约4*500 G=2 TB大小。内存使用情况方面,在不考虑优化的条件下,进程导入该数据道头字所占用内存空间约600 M,按采样时间4 000 ms,采样间隔1 ms,最大覆盖次数为512次的一个3×3宏面元占用约(3×3×512×4 000)×4 Byte=73 728 000 Byte,换算后大约70 M内存空间,即是说在进行单点宏面元AVO交互分析时,软件将占用至少670 M内存空间。在Windows系统下,32位程序理论寻址空间能有4 GB左右的内存可用,不过实际上系统会把其中2 GB的地址留给内核使用,所以单一进程最大能用2 GB的内存。除去其他开销(应用程序框架),mingw-32-g++编译器能够malloc申请到的内存就只有1.9 GB左右,32位的Linux系统CPU可直接寻址的地址空间是4 GB,每个进程独享4 GB私有虚拟空间,其中3 GB给程序用,1 GB内核用。
综上所述,大数据操作留给一个32位应用程序进程批量处理的内存容量已非常有限,虽然目前64位操作系统已成为主流,但32位应用程序还未完全彻底退出,在近年来的软件项目中还占据着较大的比例。另一方面,在64位操作系统运行环境下,寻址空间大幅提升,内存分配上限的瓶颈虽然可以解决,但批量处理与交互处理在同一进程也降低了应用程序的执行效率。
常用的地震资料处理软件CGG、Omega、FOCUS等早已发展为分布式并行处理模式,这种机制在资源共享、海量运算、并行处理、负载平衡等方面发挥了很大的优势,不过这种模式大都是基于CPU资源不足而共享的假设之上,通过设计合理的负载平衡算法,当获得有效CPU资源,数据就“移动”至相应节点计算开始,然后返回计算结果。其缺点是大部分时间被消耗在了数据传输过程中[2]。从进行常规处理模块流程来讲,个人PC的单机多任务批量处理系统模式理论上能够胜任工作。
在单机模式下,一个比较合理的办法就是分散处理,把计算任务分发到不同的工作进程,工作进程由监控进程统一管理,监控进程负责收集多个工作进程的工作状态、执行情况和资源分配等信息,工作进程与监控进程可以互通信息并发送指令[3-5]。该模式的特点:
(1)硬件资源得到充分的利用;
(2)交互操作与批量处理分开管理,避免资源争夺;
(3)各个进程分配各自的存储空间,增加了可用内存容量,降低了内存不足的现象;
(4)软件开发人员对批处理任务的执行情况细节掌握更精准,减少了软件的纠错时间,降低了维护成本。
2.1 进程间通信技术研究与试验
单机多任务批量处理模式中,进程间的通信是关键的一环,稳定性、实用性、跨平台方面都要予以考虑。Windows和Linux系统下的进程间通信技术较多,通过大量的研究实验,各种技术对比分析见表1和表2。
地震作业管理系统的任务进程主要由1个监控进程和多个工作进程组成。监控进程与各工作进程建立通信并互通消息,消息的内容包含各种执行状态、资源信息和指令队列,双方根据接收的指令执行相应的操作,工作进程间原则上不建立通信连接。通过对各种进程间通信技术测试代码的编写和试验,从进程间通信频率较高的需求方面,管道模式在双向通信能力方面不能有效避免同步和阻塞问题,从跨平台的角度考虑,大多数模式即使在不同系统下的机制相似,但开发时需要设计两套不同的代码流程,增加了项目的开发成本和周期。
通过测试demo对各种机制的应用试验,提出一种基于D-Bus的进程间通信技术。D-Bus本身是构建在Sockets机制之上。真正的通信还是由Sockets来完成的,Sockets本身支持跨平台开发,在数据信息双向传输方面方便快捷。D-Bus则是在这之上,制定了一些通信协议,并提供了更高一层的接口,更方便应用程序之间进行数据的交互传递,这样就有效解决了Sockets仅提供底层API而导致的开发工作量大的难题。
2.2 D-Bus技术开发与试验
D-Bus提供了多种Message Bus用于应用程序之间的通信,但用途比较广泛的主要是System Bus和Session Bus两种。System Bus主要用于内核和一些系统全局的Service之间的通信,Session Bus主要用于桌面应用程序之间的通信,两者之间不能互相通信。所以任何应用程序不能欺骗系统事件,安全性很好。D-Bus的架构原理、工作方式不是文中的重点讨论内容,所以不再详述。
表1 Linux系统下常用的进程间通信方式
表2 Windows系统下常用的进程间通信方式
D-Bus中用于通信的基本单元叫做Message,当应用程序连接到Message Bus上时,D-Bus会自动分配一个unique connection name,这个unique name通常的格式举例为“:01-001”。unique name以“:”开头,后面的数字没有特别的意义,只是为了保证这个unique name的唯一性。另外,应用进程还可以向Message Bus请求一个well-known name,格式如同一个反置的域名,例如“swty.news.monitor”。当一个应用进程连接到Message Bus上时,可以拥有两种名称:unique connection name和well-known name。这两种名称可以理解为IP地址和域名的关系。在D-Bus的规范里,unique connection name和well-known name都叫做Bus Name。Bus Name是应用进程和Message Bus之间的连接的名称。应用进程和Message Bus之间的连接也被称为Service,当应用进程连接到Message Bus上时,该应用进程可以在Bus上创建一到多个Object(可以把D-Bus的Object理解成面向对象语言里的Object)。Service通过Object为其他应用进程提供访问接口[6-10]。因为在Message Bus上,一个应用程序可以对应多个Object,所以不同的Object必须由Object Path(类似于文件系统的路径)来区分。Object Path的格式如“/path/obj”。
笔者从事项目主要考虑桌面应用进程间通讯,与操作系统内核并无关联需求,所以各进程主要建立在Session Bus通信基础上。
图1描述了地震作业监控进程与作业工作进程的关系。
D-BUS Daemon为后台进程,作为D-Bus的消息中转枢纽,类似于IP网络中的路由器,在Linux系统下称为守护进程,在Windows系统下可称为常驻监控进程,负责接收、处理并转发进程发送来的消息指令[11-13]。“swty.news.monitor”为监控进程,负责管理进程执行过程,完成系统资源统计与分配。“swty.news.offsettoangle”、“swty.news.Anisotropic”、“swty.news.Prestack”为3个工作进程,任务单一,分别完成角度道集转换、方位各向异性分析和道集叠加功能,并实时将执行状态反馈至监控进程。
图2是整个地震作业管理机制的抽象描述。本着“自顶向下,分工明确,高聚合,低耦合”的设计原则,将主框架分为“主应用进程”、“监控进程”、“工作进程”、“作业管理框架”等子系统,每个子系统都是独立单元,按照功能分配提供必要的I/O接口。这里的I/O接口不仅是地震数据的输入输出,也包括子系统内部的工作状态、执行情况、资源利用率等服务信息。作为执行主体,“工作进程”承担了主要的运算,提供与底层数据库的I/O和D-Bus总线的信息交换,根据不同的计算粒度,进程内采用多核多线程的并行机制,提高了独立运算速度。整个架构的明显优势在于,各功能元素各自运行[14-18],工作情况完全透明,监控系统可以监测、收集并统计每个对象的相关信息,并且保证在局部运行出错的情况下不影响整个系统的稳定性。
基于前面的系统架构与说明,在开发平台的选择方面,考虑到dbus官方源码编译的库文件提供的都是较低级的API,从开发经验来讲,API越低级,开发人员的灵活性就越高,同时带来的缺陷也比较明显,即降低了软件的可读性,加大了维护成本。鉴于此,选择使用Qt作为集成开发平台。Qt是目前比较常用的跨平台开发工具,在对D-Bus的支持方面,封装了对D-Bus的链接、绑定、注册以及消息响应机制,但是Qt官方声明它的dbus封装是不支持Windows平台的,所以要针对Windows平台作系统适应性编译和改造,改造后的QtDBus库才能支持跨平台统一开发。
图1 地震作业监控进程
图2 系统架构图
利用焦石坝某工区的实际地震资料作为叠前道集测试数据,图3是同时在本机进行的10个地震批量作业的执行监控情况,等待作业队列里还有3个等待执行的定时任务。
图3 作业监控界面
监控进程随时收集统计各工作进程的状态信息,图4为工作进程的物理内存使用情况。
从两个作业完成后的内存曲线来看,作业B的内存落差明显较小,所以可以判定该进程内部存在内存泄漏现象。
工作进程独立执行,完全脱离交互引用,每个进程在32位系统下理论可支持2 GB堆内存空间分配,进程内部支持多核并行运算。从实际测试结果来看,已没有出现系统资源紧迫或不足的现象,并且硬件资源也得到了充分利用,在CPU和物理内存高效率利用的情况下,叠前叠后联合解释交互系统依然可以稳定运行,没有出现明显的卡机或者停滞现象。
图4 工作进程的物理内存使用情况
通过对多种进程间通信技术的研究与试验,结合油气地球物理学软件的现状,分析、研究并设计了一套满足当前硬、软件需求的地震作业管理架构,开发了适用于地震生产项目的软件版本。该软件系统具备以下几个方面的特点:
(1)基于D-Bus总线系统,跨平台工作,信息传递稳定性和安全性高;
(2)分层结构设计,接口清晰,软件维护方便快捷;
(3)解决了常规软件交互与批量在同一进程导致的系统资源争夺问题,大幅提高了硬件资源使用率。
下一步将在实际生产应用中继续推广和完善。
[1] 陈 楠,祝媛媛,张光德,等.基于QT的地震勘探可扩展平台研发与应用[J].华北地震科学,2013,31(4):31-36.
[2] 桂兵祥,何 健.基于高性能云的分布式数据并行处理机制[J].武汉工业学院学报,2010,29(1):60-63.
[3] 王秀闽,刘 洪,刘永江,等.地震数据处理系统中交互作业编辑与运行[J].地球物理学进展,2007,22(3):860-864.
[4] 罗 旦.基于DBUS的嵌入式系统应用程序接口的研究[D].武汉:华中科技大学,2011.
[5] 孟令斌.基于桌面总线的嵌入式应用框架的设计与实现[D].武汉:华中科技大学,2013.
[6] 潘永雄.基于过程的单片机多任务程序结构及实现方法[J].电子工程师,2005,31(3):5-7.
[7] 陈家新,彭宁嵩.DOS环境下实时多任务调度策略的实现[J].计算机应用,2000,20(5):45-47.
[8] 潘玮华.用C++语言模拟主存动态分配管理[J].电脑编程技巧与维护,2010(12):14-17.
[9] 唱江盛,郭争光.基于DOS的实时多任务操作系统的实现及其应用[J].计算机工程与应用,1994(11):66-69.
[10] 杨传安,王国夫,张海勋.Linux下的多线程编程[J].应用科技,2001,28(5):28-30.
[11] 卓能文,巨世杰.Win95/98/NT进程间实时通信的实现[J].舰船电子工程,1999(1):30-34.
[12] 徐洪斌,苏铁熊,董小瑞.多线程技术及其实现[J].山西电子技术,2003(3):15-16.
[13] 刘翠鲜.多线程技术在实时监控系统中的应用[J].太原重型机械学院学报,2003,24(4):274-278.
[14] 曲绍云.分布式异构系统中任务调度问题的研究[D].青岛:青岛大学,2005.
[15] 陈 杰,何援军.基于软件总线CAD软件体系结构研究[J].计算机辅助设计与图形学学报,2004,16(9):1319-1323.
[16] 张志杰.基于分层结构的管理信息系统架构设计[J].计算机技术与发展,2010,20(10):146-149.
[17] 武新立.协同软件开发的可视化平台研究与实现[D].上海:东华大学,2010.
[18] 侯 爽,宋颖慧.一种实时系统中的多任务可预测调度算法[J].计算机工程,2004,30(16):67-69.
Design of Seismic Operation Management Architecture Based on D-Bus Technology
CHEN Nan
(Sinopec Geophysical Research Institute,Nanjing 211103,China)
Oil and gas geophysical software R&D is facing more and more pressure with the technical progress of the exploration area.Based on the research and experiment of communication mechanism and technology between procedures in Windows and Linux system,describe a single multi task parallel processing software architecture based on D-Bus technology.The D-Bus compatibility test is carried out in two different operating systems combined with the demand studying for seismic data batch processing of oil and gas geophysical field,and design the framework according to seismic batch operation management in combination of test result,and write the corresponding program with principle of "top down,clear division of labor,high polymerization and low coupling",and develop a set of batch processing software product.The test results of application show that the product has a good cross platform characteristics,and has a significant improvement from the operating speed,the utilization rate of hardware resource and the system stability,solving the bottleneck of system resource shortage caused by parallel processing.
D-Bus;batch;parallel;Qt;architecture
2015-05-26
2015-08-31
时间:2016-01-26
国家科技重大专项(2011ZX05035)
陈 楠(1980-),男,高级工程师,研究方向为油气地球物理方法与软件开发。
http://www.cnki.net/kcms/detail/61.1450.TP.20160126.1521.070.html
TP311.52
A
1673-629X(2016)02-0179-06
10.3969/j.issn.1673-629X.2016.02.040