本文共 3651 字,大约阅读时间需要 12 分钟。
本人曾有幸参与中国石油集团高性能数控测井系统项目的开发工作。该系统旨在满足高精度、高性能、高效率的测井需求,由井下成套仪器、测井遥测系统、测井地面系统、测井软件系统及测井解释评价系统组成。本人主要负责测井软件系统的分析、设计与部分开发。为了确保系统的高性能与高可靠性,本文从系统优化与程序设计优化两个方面进行探讨。
随着石油测井技术的快速发展,为了更快、更准地获取储层地层信息,国内测井系统面临着不统一、精度不足及效率低下的问题。在此背景下,中国石油集团公司于2004年1月成立了高性能数控测井系统项目,目标是为国内测井行业提供一体化的测井解决方案。系统设计要求一次测井完成所有合格资料获取,并保证60井次的免维修率。该系统由井下成套仪器、测井遥测系统、测井地面系统、测井软件系统及测井解释评价系统组成,我主要负责测井软件系统的分析、设计与部分开发工作。
测井软件系统主要承担测井数据采集、测井数据工程值计算以及测井过程监控三大任务,对应系统分为数据驱动层(前端)、数据处理层(主控)及表象管理层(后端)。数据驱动层通过VxWorks实时操作系统运行数据采集程序,确保测井数据的实时性与可靠性。主控程序及后端显示程序则运行在Windows2000系统中,采用Visual C++2003进行开发。系统运行环境包括多线程处理器(Intel P4EE)及512M DDR内存,以满足高吞吐量需求。
系统的性能要求主要体现在以下两个方面:数据采集的完整性与正确性,以及数据显示与打印的实时性。针对这些需求,我们在软件分析设计与开发过程中采取了系统优化与程序设计优化相结合的策略。
系统优化主要从硬件环境入手,通过优化运行环境来提升软件性能。由于Windows2000作为分时多任务操作系统,难以满足测井系统对数据实时性要求,我们选择了VxWorks实时操作系统作为前端操作系统,确保数据采集的高可靠性。为此,我们采用千兆网连接主控与前端,进一步优化了数据传输性能。此外,采用SCSI接口磁盘阵列以提高数据冗余度,确保系统数据的可靠性。主机系统则配置了Intel P4EE多线程处理器及512M DDR内存,充分满足数据吞吐量需求。
程序设计优化涵盖了程序架构设计、语法与算法优化、内存管理、输入输出优化及软件测试等多个方面。
本系统采用三层系统架构,各层间通过网络连接实现松散耦合。即使后端显示程序出现故障,也能保证测井数据的完整性与正确性。我们引入了组件对象的开发思想,将每个仪器的算法及控制逻辑封装为独立组件进行单独测试。这种设计不仅确保了组件的可靠性,还便于系统调试与维护。同时,我们充分利用了已有的仪器算法与控制代码,避免了新算法开发可能带来的潜在风险,确保了系统的成熟度与可靠性。
在代码开发阶段,我们充分利用C++的语法特点,通过内联函数实现大量简单函数的优化。针对循环语句,我们通过将临时变量提出到循环体外,并结合break、continue语句,减少循环次数。在对大内存对象的参数传递上,我们采用引用与指针结合的方式,减少系统在堆栈上的内存分配。对于测井刻度计算中的各种算法,我们在保证测井精度的前提下,尽量将递归与非线性算法转换为非递归的简单运算。此外,我们选择了Intel编译器进行开发,以充分发挥CPU的性能。在库的选择上,我们主要使用ATL库开发仪器组件,WTL库开发用户界面,STL库进行数据结构实现。通过对比测试,我们发现STL实现的队列、链表等数据结构比MFC实现的速度快约10%。
由于后端显示程序需要分配大量小对象(如曲线、矩形等),我们发现小内存块的分配与释放成为性能瓶颈。为此,我们开发了自定义内存管理机制:首先根据测试数据分析内存分配需求,分配一块大内存,通过管理这块内存来满足小内存块的需求。如果内存不足,则扩充大内存块。经过测试,系统运行速度提高了近两倍。
系统输入输出操作尤为频繁,尤其是在三层网络结构下。我们采用多线程异步通信方式实现前端与主控之间的网络通讯,相比于传统的同步通信方式,系统速度提高了一倍,网络故障率也显著降低。此外,在测井曲线显示与打印方面,我们采用了同步缓存数据的方式,并安排单独线程负责曲线打印工作。通过测试,我们发现打印与显示之间的延迟仅为1ms,在200:1的显示比例下,这一延迟属于可接受范围。
测试是软件性能优化的重要手段之一。我们使用Rational公司的Purityplus工具进行测试,其中Quantify工具尤其出色,能够精确到代码行进行性能测试。通过测试,我们能够快速发现性能瓶颈,并针对性地进行优化。
通过上述优化措施,我们使测井软件系统的整体运行效率提升了50%左右。系统在下井实验中表现优异,运行24小时未中断,数据帧掉帧率为0,误码率为0,得到了用户的高度认可。整个开发过程中,我深刻体会到软件性能优化的重要性,特别是在高性能要求下,唯有重视测试方法与工具的选择,才能实现显著的性能提升。
本文结合2008年在某人民银行实施的E户通电子转账系统的经历,探讨了软件性能优化设计的相关方法。系统设计中主要从以下方面进行优化:(1)采用成熟的三层C/S架构,减轻数据库服务器负担;(2)优化数据存取策略,降低对网络带宽的占用;(3)通过多线程技术优化客户端应用,提高系统响应速度。通过这些优化设计,系统成功满足了企业百万级主题数据库处理需求。
近年来,银行信息化建设迅速发展,带动中间业务的快速发展。由于各银行系统之间的服务需求日益增加,传统的单行系统已无法满足复杂的跨行业务需求。为此,某人民银行于2005年启动了E户通电子转账系统项目,旨在提供银行间电子转账业务支撑平台,支持7x24小时连续运行,满足跨行转账、定期借记、普通借记等多种业务需求。我作为架构设计师,组建了12人的开发队伍,全程参与项目建设,历时9个月完成开发工作。
E户通系统涉及与相关银行及企业的联网,支持批量与两种业务处理模式,涵盖定期借记、普通借记、定期贷记、普通贷记、银行柜面现金缴费、客户签约管理、网上业务受理等功能。系统需满足以下性能需求:支持500个并发实时受理,需在64KB DDN网络带宽下完成实时业务处理,要求业务处理时间不超过20秒;批量业务采用包处理机制,最大800笔一包,MAC验证通过后需在45秒内完成转发;查询需在15秒内返回结果;资金清算、报表统计等任务不得影响其他业务正常运行。
为应对500个并发需求,系统采用长链接模式,既保证交易效率,又确保交易可靠性。由于开发环境为异构环境,选择了BEA WebLogic应用服务器,兼顾兼容性与可扩展性。数据库服务器采用Sybase EAServer,充分发挥其处理能力。通过负载均衡技术,提高应用服务器的响应能力。
针对网络带宽有限的需求,优化数据存取策略。通过分析业务处理特点,采用长链接池与负载均衡技术,降低数据库连接建立对系统性能的影响。同时,充分利用存储过程简化业务逻辑,提高数据库服务器处理能力。
设定受理方有10秒的受理时间,若超时自动提示。为防止多次超时引发系统等待,设置交易阙值,对达到阙值的网店实施交易限制。
针对批量交易包处理时间过长的问题,优化组包策略。根据业务种类与单一受理行进行组包,减少中心端操作量。发起方无需关心交易包是否到达受理行,从而降低等待时间。
专门设置查询服务器,提供对交易历史的查询服务。通过分离当前库与历史库,既满足客户需求,又防止对交易数据的影响。同时,通过线程技术优化查询过程,减少系统等待。
采用多线程技术处理用户输入,确保系统主线程不受阻塞。查询操作使用线程并行处理,按屏幕显示20条记录,暂时存储40条记录,用户可按需查看,显著提升系统响应速度。
将批量业务处理、报表统计等大作业量尽量安排在系统闲时进行,缓解业务高峰期压力,提高系统性能。
通过以上优化设计,E户通系统于2009年4月投入运行,取得了显著成效。事实交易时间一般不超过3秒,最长15秒,批量交易处理时间在15秒内完成,客户查询交易在6秒左右完成。系统性能得到了设计要求的满足,获得了银行与企业的高度认可。尽管系统取得成功,但在实际应用中发现银行客户对交易查询量大,设计的预留空间不足。未来需进一步优化查询功能。
此次项目的顺利实施,为我在中型大型软件性能设计方面积累了丰富经验,也促使我不断更新技术知识,为不同体系结构的软件分析与设计做好准备。软件技术的快速发展要求我们不断学习与进步,以应对不断变化的软件设计挑战。
转载地址:http://znqfk.baihongyu.com/