




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、软件性能与软件优化(v1.2)page 2n 培训之前,你所理解的这次培训的主题;n 三天的培训,我们的学习内容是哪些?n 如何评估我们的项目质量;两个问题page 3软件性能与软件质量性能可靠性可修改性功能可维护性易用性可测试性可移植性可重用性安全性page 4培训目标n 软件优化的经验分享;n 互动参与;n 优化的案例收集;n 整理成文,指导以后的软件设计;page 5 软件性能指在指定条件下,相对于资源使用总量,软件产品提供恰当的执行效果的能力,一般包括如下一些方面:1. 时间响应: 软件产品执行其功能时,提供恰当的响应和处理时间的能力; 2. 资源的使用效率: 在指定条件下,软件产品执
2、行其功能时,占用恰当的资源的能力; 3. 吞吐量: 指单位时间内能处理的事件个数,或单位时间传输的数据量; 软件性能的定义page 6分类度量名称目标定义数据来源时间行为性响应时间完成特定任务的估计时间x=time(计算或模拟的)估算吞吐时间单位时间内估计可以完成多少任务x=单位时间的任务数)估算周转时间完成一项完整工作(包括一组相关任务)的估计时间x=time(计算或模拟的)估算资源利用性i/o利用完成特定任务预计需要的io利用。x=缓冲的数量(计算或模拟的)源代码i/o利用消息密度在系统调用中与i/o相关的消息占源代码的比例x=a/b;a=有关于i/o错误的消息数;b=直接与系统调用相关的
3、源代码行数;源代码内存利用完成特定任务产品需要占用的内存数x=内存大小内存利用估计内存利用消息密度在系统调用中与内存利用相关的消息占源代码的比例x=a/b;a=有关于内存利用错误的消息数;b=直接与系统调用相关的源代码行数;源代码数据传递传递的效率x=数据量/时间估算性能一致性性能一致程度产品的性能与其他制度,标准和约定的一致性。x=a/b;a=实现了性能的项数;b=需要与制度,标准和约定一致的项数;相关标准和约定;需求;设计;代码;评审报告;软件性能的度量page 7关于软件性能n 软件性能与其他质量属性的关系;n 软件性能的一些误区;page 8需求分析阶段设计阶段创建阶段测试阶段用户现场
4、性能确定性能指标性能设计并发设计分布式设计架构设计代码级别的优化性能测试压力测试性能采集软件性能与研发阶段性能,也是设计出来的性能,也是设计出来的page 9软件的优化page 10一.需求阶段的性能描述; 二.设计阶段的性能设计; 三.开发阶段的性能实现;四.测试阶段的性能验证;page 11一.需求阶段的性能描述 1.列出系统的性能需求;2.用精确的数据指标来表达,包括最大吞吐量,响应和处理时间,资源的使用效率等;3.必须是系统可达到的数据指标; page 12一.需求阶段的性能描述 我们目前存在的问题:n 项目需求阶段的性能描述是否清晰?n 性能的描述除了在需求阶段,还在其他阶段有所描述
5、?n 其他?page 13举例:zxv10某产品的性能要求 最大32个2m终端接入能力; 单画面会议视频在mcu的视频延时小于200毫秒; 关键dsp,cpu性能留有20%余量。 关键cpu留有30%以上的空闲内存; 单板复位的时间小于6秒; 最多16路的视频混合;page 14二.设计阶段的性能设计设计阶段能有哪些方法提高性能?page 15二.设计阶段的性能设计1.系统体系结构的设计: 系统的体系结构从最基础架构上决定着整个系统的性能,如果这个阶段的设计作不好,对以后的研发影响很大,其他优化的设计无法弥补架构的缺陷 。page 16二.设计阶段的性能设计1.系统体系结构的设计举例 i. z
6、xv10 mcu:分组交换和电路交换 基于分组交换的h.323协议,对数据包直接进行处理,但是因为继承原有基于时系交换的mcu,仍然采用时系交换,对于每个数据包都要进行包的拆解,时系拼凑操作,占用大量的cpu能力,也大大增加了软件复杂度,后期的性能指标很难达到。 ii.zxj10:mp模块 mp模块的设计采用工控机,大量操作的数据处理在本地硬盘;page 17二.设计阶段的性能设计2.软件体系结构的设计: 软件体系结构也非常重要,同样的硬件,不同的软件架构,最后的系统性能差别非常大,对于各个任务的设计,任务间通讯的方式,任务优先级的设置,任务同步的方式等,都要在系统设计阶段好好考虑进来。pag
7、e 18二.设计阶段的性能设计2.软件体系结构的设计举例 i.时钟节拍的设计,太低的频率导致任务响应时间变大,太高的频率会让系统开销太高,需要根据系统特点进行选择,例如mpc8260的时钟节拍可以选择60-100; ii.对消息队列的操作,是否采用阻塞方式等; 举例:为了获得高精度的定时器,采用更高的系统时钟;减少不必要的系统调用开销;page 19二.设计阶段的性能设计3.硬件的选型 : 不同的处理器,性能不同,适用领域也不同,有的适用大量的运算,如dsp,有的适用通讯处理,所以,需要在芯片选型即确定哪些芯片是我们需要的,硬件选型错误带来的影响也是致命的。 page 20二.设计阶段的性能设
8、计3.cpu的选型 举例 adi6834adi6834idt32438idt32438motorola 8260motorola 8260ixp425ixp425内核mips3000mips4000powerpc603estrongarm主频200m300m200m400m指令cache16k16k32k32k数据cache8k16k32k(32+2)ksdram/ddr100m sdramddr150m66m(64bit) sdram133m sdrampci32bit/v2.2,带arbiter32bit/v2.2,带arbiter无32bit/v2.2,带arbiter片上sram32k
9、byte1k*32bitcpm用与dcache共用mmu支持支持支持支持gpio16bit323216uart2222dma61022功耗2w2.4w2.4w2.2wosvxworks/linuxvxworks/linuxvxworksvxworks/linux使用环境adi+linux2.4idt+linux2.48260+vxworks ixp425+vxworkspage 21二.设计阶段的性能设计4.好的算法和数据结构: n 选择一个好的算法和好的数据结构,其影响远远大于选择一个好的语言和好的编译器;n 算法对应用程序执行速度的影响是最显著的。n 一个大量使用了排序的程序,使用堆排序的
10、执行速度远大于使用冒泡排序的程序。n 算法没有好的优化的程序,即使把它按照处理器的优化指令做成了硬件版,它远还是比不上使用了优化算法的纯软件程序。n 在我们做优化的时候,一定要分析代码中主要使用的算法,首先考虑是否有明显更好的算法,如果有,马上放弃现有的算法,避免在低效算法上进行徒劳的优化。,page 22二.设计阶段的性能设计n 好的算法和数据结构:例子:zxv10非全交换的实现;page 23全交换的处理思路page 24非全交换的处理思路page 25二.设计阶段的性能设计5.改造协议栈和操作系统 : 底层软件的效率,很大程度依赖操作系统和协议栈,很多时候并不能满足要求,就需要定制操作系
11、统,来完成符合要求的模块,同时,对于协议栈,因为分层结构,会导致性能的下降,在不能满足需求的时候,也要进行裁减和修改,甚至需要重写协议栈代码,根据需求来开发定制协议栈 。page 26二.设计阶段的性能设计5.改造协议栈和操作系统 举例 i. 改造tcp/ip协议栈: 重写适用系统的协议栈; ii.完善tcp/ip协议栈: 对于udp协议处理,不在进行socket的收发处理,而是直接从ip层获得数据包进行处理,绕过udp协议和socket接口,减少内存拷贝次数,减少大量的查询操作,从而大大提高程序效率。 数据发送可以直接调用驱动层的发送函数。 page 27二.设计阶段的性能设计6.驱动优化设
12、计 优化的驱动设计可以让整个软件执行效率大大提升,有经验的开发人员,特别是底层技术专家,可以设计出非常高效的驱动程序; page 28二.设计阶段的性能设计6.驱动优化设计 举例 单板同时处理16个2m终端数据,每秒收发数据包达到3200个,每次中断都要保存,恢复环境,占用大量cpu时间,通过设置bd表,每32个数据包产生一次中断,而不是先前的一个数据包一次中断,从而让驱动效率提升200%,系统效率提升100%。同时,因为处理时间都在毫秒级别,对应用没有影响;page 29二.设计阶段的性能设计7. cpu的特性 :i.主频 : 很多cpu都可以工作在不同的主频下,例如mpc860t,可以在6
13、5m,50m,8260可以在200m,166m,133m等。 ii. dma: 对于大量数据访问,数据拷贝,dma是提高程序效率很好的方法,但是要注意和主程序之间的异步操作。dma虽然不会占用cpu时间,但是会和cpu争夺总线资源;page 30二.设计阶段的性能设计7. cpu的特性 :iii.cache的打开和关闭 cache的打开和关闭对于程序效率差别非常大,应该尽早打开数据和程序cache。同时,对于非常高效的代码,例如小的驱动程序,可以锁定到cache,从而提高局部代码的运行效率; page 31二.设计阶段的性能设计7. cpu的特性 :iv:字节对齐 对于系统中的大量数据拷贝,应
14、该在设计的时侯就要考虑到字节对齐,这样在调用memcpy的时侯,会很容易的进行字拷贝,长字拷贝,效率差别很大,字节对齐一定要在设计阶段考虑进来,特别是缓冲区的设计; memcpy的实现机制;page 32二.设计阶段的性能设计7.动态内存分配 (1)对于频繁使用的数据结构,不要每次使用时候分配内存,使用后马上释放。否则,如果你是在一个循环体内使用它的,就会花费很多时间在分配和释放内存上。(2)内存分配方式的选择。使用标准c运行库的malloc()和free()是最简单也是最低效的方式; (3)创建内存管理模块; page 33二.设计阶段的性能设计 8.文件io使用: 硬盘是慢速设备,文件io
15、操作是一个非常消耗时间的操作。(1)使用标准c的fopen(),fread(),fwrite()等进行文件io最简单,最低效。(2)使用c+的io流改进了效率,因为它往往对输出的流进行缓冲,直到缓冲满时候刷新,减少了磁访问次数。(3)一个改进的方式是直接使用readfile()和writefile()等系统调用,自己管理缓冲区。(4)可以剧烈的改进io操作的两个方式是:内存映像文件和异步文件io。page 34二.设计阶段的性能设计 9.缓冲区的设计 : 缓冲区,消息队列大小等,也是根据系统的吞吐量来设计,注意不要出现缓冲区过小,或者消息队列太小导致丢消息; page 35三.开发阶段的性能实
16、现 开发阶段都有哪些优化方法?page 36三.开发阶段的性能实现 1.嵌入汇编语言 : 汇编语言的效率要比c语言高很多,特别是一些要求效率非常高的算法,都需要用汇编实现,汇编的开发效率并不高,所以,好的策略是在c程序中嵌入汇编语言。 page 37三.开发阶段的性能实现 1.嵌入汇编语言 举例 因为有大量的数据拷贝,系统提供的memcpy性能很低下,通过汇编代码即可看出来,通过重新写汇编代码,则可以提供比原有实现高效很多的方法,注意,这个要保证输入参数都是字对齐的,所以缓冲区也要设计成字对齐。先前的汇编代码:略,重写的memcpy汇编代码:bcopylongsm2m:_bcopylongsm
17、2m:addir3,r3,-4addir4,r4,-4mtctrr5bcflgom2m:lwzur7,4(r3)stwur7,4(r4)bdnzbcflgom2mblr page 38三.开发阶段的性能实现 2.使用优化编译选项: 每个编译器都有自己的优化选项,如果可能,都设置成最高级的优化。初期可以不打开优化开关,但是后期一定要打开,编译开关打开后,可能系统发生异常崩溃,这多半和优化选项无关,而是系统中有时间敏感部分,在优化后,代码执行更块,导致运行异常。 举例: -o1 寄存器优化,会将局部变量优化成寄存器,性能提高很大,文件变小; -o2 局部优化,会优化汇编语句前后顺序,会在函数内部排
18、流水线,性能提高很大,文件变小; -o3 文件级优化,部分函数会被内联,且可能会被内联后排流水线,性能提高与应用关系很大,文件可能变大;page 39三.开发阶段的性能实现 3.循环变量与条件判断的使用: 对于循环内有判断条件的,尽量把判断条件转移到循环语句外,这样可以避免,每次循环都进行判断操作,重要的是如果是dsp软件,这样会破坏流水线的工作,让程序效率大大降低。for (循环条件)if (条件判断 )if (条件1) & (条件2) continue; do page 40三.开发阶段的性能实现 4.条件语句,switch语句的判断顺序。 对于多重条件语句,应该把执行次数最多的条
19、件分支放在最前面,按可能的调用频率来排列顺序。switch( tmsg.cmsgtype )case board_info_req:/* 0 x00 处理板信息请求消息:mpc860-mpc8260-c6202 ok! */processboardinforeq( &tmsg );break;case ip_addr_ind:/* 0 x02 处理ip地址指示消息:mpc860-mpc8260 ok! */processchangeip( &tmsg );break;page 41三.开发阶段的性能实现 5.注意类型转换 。 一个频繁使用的循环体内作从double到int的转换会消耗可能比计算本身还多的时间。 。page 42三.开发阶段的性能实现 6.使用寄存器变量 。 register会让编译器把指定变量放到寄存器,提高运行效率 。参数,局部变量;page 43三.开发阶段的性能实现 7.短路语句 。/* 如果不是udp协议或者不是本地包,则释放,直接返回 */if( ( piphead-cprotocol != protocol_udp ) & ( g_ptenilmng-nip != (*(uint32 *)piphead-cdestination) ) )m_freem( *pptrmbuf );return true;pag
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 火化安葬协议书
- 民事结案协议书
- 残联安置协议书
- 车辆交割协议书模板
- 实习协议与保密协议
- 国有企业借款合同
- 公司股份制合同协议书
- 环境工程污水处理技术应用试题集
- 商务往来文书与合同样本集
- 比赛授权协议书
- 企业数字化转型的国外研究现状共3篇
- T-GDWCA 0033-2018 耳机线材标准规范
- NB/T 10533-2021采煤沉陷区治理技术规范
- GA/T 1068-2015刑事案件命名规则
- 主治医师聘用合同
- 2021年四川绵竹高发投资有限公司招聘笔试试题及答案解析
- 建设工程消防验收备案抽查复查申请表
- 水费计算、水权与水价课件
- 思想道德与法治课件:第六章 第一节 社会主义法律的特征和运行
- 61850报文解析-深瑞版-131016
- 江西新定额2017土建定额说明及解释
评论
0/150
提交评论