SylixOS调试方式详解——性能分析
来源:互联网 发布:手机网络测试软件 编辑:程序博客网 时间:2024/06/08 18:28
1. SylixOS调试方法介绍
SylixOS实现了一个功能强大的调试stub(桩),可在设备或模拟器上在线调试应用程序,RealEvo-IDE也提供配套的调试插件。目前RealEvo-IDE既支持自动推送调试、也支持传统的手动启动gdbserver的调试方式。在官方公布的使用手册中没有详细写出在日常开发中非常实用的几种调试方式,本文主要介绍性能分析的调试方法。
在日常开发过程中经常会遇到程序不够快的情况,但是不知道到底慢在哪里,往往是随意寻找函数优化,并没有没有真正定位到程序哪里慢,存在很大的偶然性。性能分析工具就是用动态采样的方式定位真正慢的位置,定位之后再在这个点上进行优化,最终程序运行时间对比是非常明显的。
2. SylixOS性能分析调试步骤详解
2.1.1 性能分析演示demo
SylixOS的性能分析主要是通过加载性能分析模块(sperfs.ko)来查看各个函数消耗的CPU时间,能够准确找到需要优化的点。下面通过建立一个“perfoms_check_app”来做性能分析调试的演示,代码如程序清单 2‑1所示。
程序清单 2‑1 static_check_app代码
//sperfstart sperfs
#include <stdio.h>
#define USE_SLEEP
void module_sleep(int iSecond)
{
#ifdef USE_SLEEP
sleep(1);
#else
bspDelayUs(iSecond*1000*1000);
#endif
}
void calc_value(void)
{
static int i;
i++;
}
void do_something(void)
{
/*
* do something
*/
calc_value();
module_sleep(1);
}
int main (int argc, char **argv)
{
while (1){
// do_something();
}
return (0);
}
2.1.2 加载性能分析模块(sperfs.ko)
(sperfs.ko模块为SylixOS性能分析检查提供一种调试工具)
点击IDE界面右上角“Device”;选择目标机器IP地址,这里使用的是虚拟机的IP地址:192.168.7.32,右击IP号打开“Launch FTP”进行传输;然后在本地文件夹中找到sperfs.ko模块,传输路径选择在“/lib/modules”目录下;最后双击sperfs.ko即可完成模块加载的准备工作,具体步骤如图 2‑1所示。
图 2‑1 加载sperfs.ko模块方法一
除上述方法外还可以通过“cp”指令将性能分析模块的拷贝在“/lib/modules”目录下,如图 2‑2所示。
图 2‑2 加载sperfs.ko模块方法二
完成后在“cd /lib/modules”目录下用“ls”查看是否完成拷贝,结果如图 2‑2所示。
图 2‑3 查看是否完成加载
然后通过“chmod”改变文件的权限,再用“modulereg”命令注册性能分析模块,如图 2‑3所示。
图 2‑4 注册内核模块
最后通过“sperfstart”命令开启性能分析的功能,再用“sperfs”命令查看性能分析结果,如图 2‑4所示。
图 2‑5 开启性能分析模块
除此之外我们通过Talnet再打开一个调试窗口,运行演示程序“perfoms_check_app”,性能分析结果如图 2‑5所示,除空闲线程t_idleo和sperfs.ko外消耗CPU时间最多的函数是程序是performs_check中的main函数,在这里只需要优化该函数就可以减少程序运行时间。
图 2‑6 性能分析结果
对该函数进行优化,优化结果如程序清单 2‑2所示。
程序清单 2‑2 main函数优化结果
int main (int argc, char **argv)
{
while (1){
do_something();
}
return (0);
}
再次进行性能分析,结果如图 2‑6所示,main函数消耗的CPU时间已经大大减少。
图 2‑7 优化后性能分析结果
3. 总结
在SylixOS中可以使用多种调试方式进行相关调试,根据实际情况对程序进行调试,本节主要介绍性能分析检查工具。下一篇文档将通过一个完整的工程文件来描述多种调试方式。
4. 参考资料
《SylixOS应用程序开发手册》
《RealEvo-IDE使用手册》
- SylixOS调试方式详解——性能分析
- SylixOS 调试方法详解——静态代码分析
- SylixOS调试方法详解——综合案例分析
- SylixOS 调试方法详解(二)——SylixOS 代码覆盖率检查
- SylixOS调试与性能分析技术--内存泄漏检测
- SylixOS串口调试详解
- SylixOS网络性能测试
- SylixOS CPU性能计算
- SylixOS Makefile分析
- SylixOS启动脚本分析
- SylixOS高精度时钟分析
- 性能调试--CPU性能分析
- 使用eclipse调试SylixOS应用
- dlmalloc 2.8.6 源码详解—[6]调试分析
- free命令详解——Linux性能分析
- uptime命令详解——linux性能分析
- iostat命令详解——linux性能分析
- vmstat命令详解——linux性能分析
- 561. Array Partition I; Difficulty : Easy
- js库
- 237. Delete Node in a Linked List
- 523. Continuous Subarray Sum
- uva 10375 质数筛选 质数分解 lrj-P316
- SylixOS调试方式详解——性能分析
- Redis之set类型操作
- CSS3-动画
- 模拟实现strcpy
- css选择符,属性设置
- 大数据术语
- Java -- 集合Collections
- java 类 和构造方法
- 蓝月单机-经典1.76蓝月单机版