WEB开发网
开发学院手机开发Windows Mobile 开发 关于嵌入式(移动)软件的性能问题 阅读

关于嵌入式(移动)软件的性能问题

 2010-09-16 00:00:00 来源:WEB开发网   
核心提示:花费时间比重很高的函数,包含全部子函数花费比重很高的函数,关于嵌入式(移动)软件的性能问题(2),调用次数非常高的函数,文件IO关注IO的频度和通量,降低数据处理的计算总量就很重要,快速的压缩方法,复杂的性能问题通常看不出IO明显的异常,但是要结合设计约束来分析

花费时间比重很高的函数。

包含全部子函数花费比重很高的函数。

调用次数非常高的函数。

文件IO

关注IO的频度和通量。复杂的性能问题通常看不出IO明显的异常,但是要结合设计约束来分析,就能找到一些线索。比如一次路径计算他的搜索空间会达到2,3万,我们由此可以计算出理论上的io访问量,如果发现实际数值有异常,就可以推断出Cache抖动或其他问题。

内存访问

内存操作也是制约性能的一个关键因素,观察哪些调用非常频繁的函数,比如上文的路径算法GetNodeByID,调用30万次,每个Node结构体1.5k,总共copy量达到450M。这显然会成为性能问题,所以在新结构中,设计了精简紧凑的Node结构和平板Cache(直接访问而不需要Copy),大幅降低了内存Copy。

内存分配/释放/碎片通常也是性能问题的一个重要因素,我们的架构采用了小内存优化,因此这个问题还不突出,也还有很多开源的方案,如GooglePerfTools,dlmalloc,wtf等。

Cache命中

Cache通常位于系统不同层的边界上,Cache的性能对系统影响很大

获取Cache的一些工作状态指标,如命中率,回收效率。

架构级别的性能问题单独的分析某一个数据通常很难下结论,需要同一个时间点不同架构层的性能数据,也需要不同时间的性能数据曲线。

尝试一下系统在不同条件下表现出来的性能数据流,甚至是边界情况,实际的工况跑不出来,就写测试程序压出来。

Cache为0和Cache为无穷大,系统性能曲线会怎么变化?

分析Cache在极限情况下系统的整体性能很有帮助,可以由此推断出Cache上下的两个系统层面的性能开销比例。

模拟一个慢3倍的IO读写,系统性能曲线会怎么变化?

不同的数据类输入,系统性能曲线会怎么变化?

对于那些需要经常性分析性能故障的系统,最好设计一个log系统,会大幅提高工作效率,log系统异步的把各个部分的指标数据收集起来,可通过PC端的工具图表化。

性能Tips

整体性能的改进和优化的一般性方法。

数据结构/组织:嵌入式设备上的CPU,总线,IO速率都远不及PC,所以对于在嵌入式设备上做大数据量处理(如路径计算,AI,图形)时,降低数据处理的计算总量就很重要。

快速的压缩方法。

精简的数据结构设计。(减少那些需要大规模访问的结构的尺寸)

Tags:关于 嵌入式 移动

编辑录入:coldstar [复制链接] [打 印]
赞助商链接