SylixOS调试方法详解——性能分析

1。SylixOS调试方法介绍

SylixOS实现了一个功能强大的调试存根(桩),可在设备或模拟器上在线调试应用程序,RealEvo-IDE也提供配套的调试插件。目前RealEvo-IDE既支持自动推送调试,也支持传统的手动启动gdbserver的调试方式。在官方公布的使用手册中没有详细写出在日常开发中非常实用的几种调试方式,本文主要介绍性能分析的调试方法。

在日常开发过程中经常会遇到程序不够快的情况,但是不知道到底慢在哪里,往往是随意寻找函数优化,并没有没有真正定位到程序哪里慢,存在很大的偶然性。性能分析工具就是用动态采样的方式定位真正慢的位置,定位之后再在这个点上进行优化,最终程序运行时间对比是非常明显的。

2。SylixOS性能分析调试步骤详解

2.1.1 ,性能分析演示演示

SylixOS的性能分析主要是通过加载性能分析模块(sperfs。ko)来查看各个函数消耗的CPU时间,能够准确找到需要优化的点。下面通过建立一个“perfoms_check_app”来做性能分析调试的演示,代码如程序清单21所示。

程序清单21,static_check_app代码

//sperfstart sperfs

# include & lt; stdio.h>


# define,, USE_SLEEP


空白module_sleep (int iSecond)

{

# ifdef USE_SLEEP

,,睡眠(1);

#

其他,,bspDelayUs (iSecond * 1000 * 1000),

# endif

}


空白calc_value (void)

{

,,静态int我;


,,我+ +,

}

空白do_something (void)

{

,,/*

,,*大敌;做一些

,,,*/

,,calc_value ();

,,module_sleep (1);}


int主要(int命令行参数个数,char * * argv)

{

,,而(1){

//,,,do_something ();

,,}

,,,return (0);}


2.1.2 ,加载性能分析模块(sperfs。ko)

(sperfs。ko模块为SylixOS性能分析检查提供一种调试工具)

点击IDE界面右上角“装置”;选择目标机器IP地址,这里使用的是虚拟机的IP地址:192.168.7.32,右击IP号打开“启动FTP”进行传输,然后在本地文件夹中找到sperfs.ko模块,传输路径选择在“/lib/模块”目录下,最后双击sperfs。ko即可完成模块加载的准备工作,具体步骤如图21所示。

 SylixOS调试方法详解——性能分析

图21,加载sperfs。ko模块方法一

除上述方法外还可以通过“cp”指令将性能分析模块的拷贝在“/lib/模块”目录下,如图22所示。

 SylixOS调试方法详解——性能分析

图22,加载sperfs。ko模块方法二

完成后在“cd/lib/modules”目录下用“ls”查看是否完成拷贝,结果如图22所示。

 SylixOS调试方法详解——性能分析

图23,查看是否完成加载

然后通过“chmod”改变文件的权限,再用“modulereg”命令注册性能分析模块,如图23所示。

 SylixOS调试方法详解——性能分析

图24注册内核模块

最后通过“sperfstart”命令开启性能分析的功能,再用“sperfs”命令查看性能分析结果,如图24所示。

 SylixOS调试方法详解——性能分析

图25,开启性能分析模块

除此之外我们通过Talnet再打开一个调试窗口,运行演示程序“perfoms_check_app”性能分析结果如图25所示,除空闲线程t_idleo和sperfs。ko外消耗CPU时间最多的函数是程序是performs_check中主要的函数,在这里只需要优化该函数就可以减少程序运行时间。

 SylixOS调试方法详解——性能分析

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,图26,性能分析结果,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

对该函数进行优化,优化结果如程序清单22所示。

程序清单22,主要函数优化结果

int主要(int命令行参数个数,char * * argv)

{

,,而(1){

,,do_something ();

,,}

,,,return (0);}



再次进行性能分析,结果如图26所示,主函数消耗的CPU时间已经大大减少。


SylixOS调试方法详解——性能分析