未验证 提交 a1dc5320 编写于 作者: H hw-wLiu 提交者: Gitee

update zh-cn/device-dev/subsystems/subsys-dfx-hitracemeter.md.

Signed-off-by: Nhw-wLiu <liuwei573@huawei.com>
上级 7a500dc0
...@@ -17,7 +17,7 @@ HiTraceMeter系统主要分为三部分: ...@@ -17,7 +17,7 @@ HiTraceMeter系统主要分为三部分:
Trace数据分析可以在图形工具中人工分析,也可以使用分析脚本自动化分析,Trace分析工具以Trace命令行工具的采集结果数据文件为输入。 Trace数据分析可以在图形工具中人工分析,也可以使用分析脚本自动化分析,Trace分析工具以Trace命令行工具的采集结果数据文件为输入。
HiTraceMeter跟踪数据使用类别分类,称作Trace Tag或Trace Category,一般一个端侧软件子系统对应一个Tag。该Tag在打点API中以类别Tag参数传入。Trace命令行工具采集跟踪数据时,只采集给定的Tag类别选项指定的跟踪数据。应用程序跟踪数据类别都是属于APP Tag,从而JS接口不需要输入tag参数,内部实现用的是TAG_APP。目前HiTraceMeter支持的预定义的子系统Tag宏定义列表如下(可在hitrace_meter.h中查看): HiTraceMeter跟踪数据使用类别分类,类别分类称作Trace Tag或Trace Category,一般一个端侧软件子系统对应一个Tag。该Tag在打点API中以类别Tag参数传入。Trace命令行工具采集跟踪数据时,只采集Tag类别选项指定的跟踪数据。应用程序跟踪数据标签都是属于APP Tag,从而JS接口不需要输入tag参数。目前HiTraceMeter支持的Trace Tag表如下(可在hitrace_meter.h https://gitee.com/openharmony/hiviewdfx_hitrace/blob/master/interfaces/native/innerkits/include/hitrace_meter/hitrace_meter.h 中查看):
``` ```
constexpr uint64_t HITRACE_TAG_NEVER = 0; // This tag is never enabled. constexpr uint64_t HITRACE_TAG_NEVER = 0; // This tag is never enabled.
...@@ -72,16 +72,16 @@ constexpr uint64_t HITRACE_TAG_VALID_MASK = ((HITRACE_TAG_LAST - 1) | HITRACE_TA ...@@ -72,16 +72,16 @@ constexpr uint64_t HITRACE_TAG_VALID_MASK = ((HITRACE_TAG_LAST - 1) | HITRACE_TA
## 实现原理 ## 实现原理
HiTraceMeter主要提供抓取用户态和内核态trace数据的命令行工具,以及提供用户态打点的innerkits接口(c++)和kits接口(js)基于内核ftrace提供的用户态打点的扩展,利用ftrace的trace_marker节点,将用户空间通过打点接口写入的数据写进内核循环buffer缓冲区。其基本架构图如下: HiTraceMeter主要提供抓取用户态和内核态Trace数据的命令行工具,提供用户态打点的innerkits接口(c++)和kits接口(js),HiTraceMeter基于内核ftrace提供的用户态打点的扩展,利用ftrace的trace_marker节点,将用户空间通过打点接口写入的数据写进内核循环buffer缓冲区。其基本架构图如下:
![输入图片说明](../../figures/hitrace.png) ![输入图片说明](../../figures/Hitrace.png)
## 约束与限制 ## 约束与限制
HiTraceMeter所有功能与接口的实现都依赖于内核提供的ftrace功能,ftrace 是内核提供的一个 framework,采用 plugin 的方式支持开发人员添加更多种类的 trace 功能,因此使用HiTraceMeter之前要使能 ftrace,否则HiTraceMeter的功能无法使用(目前大部分Linux内核默认使能了ftrace,关于ftrace的详细介绍可查看内核ftrace相关资料 HiTraceMeter所有功能与接口的实现都依赖于内核提供的ftrace功能,ftrace 是内核提供的一个 framework,采用 plugin 的方式支持开发人员添加更多种类的 trace 功能,因此使用HiTraceMeter之前要使能 ftrace,否则HiTraceMeter的功能无法使用(目前大部分Linux内核默认使能了ftrace,关于ftrace的详细介绍可查看内核ftrace相关资料https://blog.csdn.net/Luckiers/article/details/124646205)仅限小型系统、标准系统下使用
...@@ -91,15 +91,14 @@ HiTraceMeter分为JS/C++应用打点API与数据采集命令行工具hitrace, ...@@ -91,15 +91,14 @@ HiTraceMeter分为JS/C++应用打点API与数据采集命令行工具hitrace,
## HiTraceMeter接口开发指导
### 场景介绍 ## 场景介绍
在实际问题场景中HiTraceMeter接口主要用来跟踪程序延时和代码调用流程,分析性能问题。 在实际开发过程中,开发者可能会遇到app卡顿或者在代码调试过程中需要查看代码调用流程,HiTraceMeter接口提供了相应的接口来跟踪程序延时和代码调用流程,分析性能问题。
### 接口说明 ## 接口说明
C++接口仅系统开发者使用,JS(目前暂未开放js接口)应用开发者可以略过本节。L2上接口描述如下(hitrace_meter.h): C++接口仅系统开发者使用,JS(目前暂未开放js接口)应用开发者可以略过本节。标准系统上接口描述如下(hitrace_meter.h https://gitee.com/openharmony/hiviewdfx_hitrace/blob/master/interfaces/native/innerkits/include/hitrace_meter/hitrace_meter.h):
**表 1** 同步接口 **表 1** 同步接口
...@@ -108,6 +107,7 @@ C++接口仅系统开发者使用,JS(目前暂未开放js接口)应用开 ...@@ -108,6 +107,7 @@ C++接口仅系统开发者使用,JS(目前暂未开放js接口)应用开
| void StartTrace(uint64_t label, const std::string& value, float limit = -1); | 启动同步trace | | void StartTrace(uint64_t label, const std::string& value, float limit = -1); | 启动同步trace |
| void FinishTrace(uint64_t label); | 关闭同步trace | | void FinishTrace(uint64_t label); | 关闭同步trace |
同步接口StartTrace和FinishTrace必须配对使用,FinishTrace和前面最近的StartTrace进行匹配。StartTrace和FinishTrace函数对可以嵌套模式使用,跟踪数据解析时使用栈式数据结构进行匹配。接口中的limit参数用于限流,使用默认值即可。
**表 2** 异步接口 **表 2** 异步接口
| Async trace | 功能描述 | | Async trace | 功能描述 |
...@@ -115,17 +115,13 @@ C++接口仅系统开发者使用,JS(目前暂未开放js接口)应用开 ...@@ -115,17 +115,13 @@ C++接口仅系统开发者使用,JS(目前暂未开放js接口)应用开
| void StartAsyncTrace(uint64_t label, const std::string& value, int32_t taskId, float limit = -1); | 启动异步trace | | void StartAsyncTrace(uint64_t label, const std::string& value, int32_t taskId, float limit = -1); | 启动异步trace |
| void FinishAsyncTrace(uint64_t label, const std::string& value, int32_t taskId); | 关闭异步trace | | void FinishAsyncTrace(uint64_t label, const std::string& value, int32_t taskId); | 关闭异步trace |
异步接口StartAsyncTrace和FinishAsyncTrace的跟踪数据匹配时,使用参数中的value和taskId配对匹配,可以不按顺序使用,主要用于异步场景。在C++程序中,使用异步跟踪的场景很少。
**表 3** 计数器接口 **表 3** 计数器接口
| Counter Trace | 功能描述 | | Counter Trace | 功能描述 |
| ------------------------------------------------------------ | --------- | | ------------------------------------------------------------ | --------- |
| void CountTrace(uint64_t label, const std::string& name, int64_t); | 计数trace | | void CountTrace(uint64_t label, const std::string& name, int64_t); | 计数trace |
同步接口StartTrace和FinishTrace必须配对使用,FinishTrace和前面最近的StartTrace进行匹配。StartTrace和FinishTrace函数对可以嵌套模式使用,跟踪数据解析时使用栈式数据结构进行匹配。
接口中的limit参数用于限流,使用默认值即可。
异步接口StartAsyncTrace和FinishAsyncTrace的跟踪数据匹配时,使用参数中的value和taskId配对匹配,可以不按顺序使用,主要用于异步场景。在C++程序中,使用异步跟踪的场景很少。
接口中参数解释如下:
- (1)label: Trace category; - (1)label: Trace category;
- (2)name: Trace的名称,IDE中会以此字段展示这段Trace; - (2)name: Trace的名称,IDE中会以此字段展示这段Trace;
- (3)value: Trace携带的信息,表明当前的某种状态,例如内存大小,队列长短等; - (3)value: Trace携带的信息,表明当前的某种状态,例如内存大小,队列长短等;
...@@ -133,19 +129,20 @@ C++接口仅系统开发者使用,JS(目前暂未开放js接口)应用开 ...@@ -133,19 +129,20 @@ C++接口仅系统开发者使用,JS(目前暂未开放js接口)应用开
- (5)在抓取Trace数据的时候,可以使用hitrace -l命令来检查当前系统中存在的Trace category,只输出指定tag的数据。 - (5)在抓取Trace数据的时候,可以使用hitrace -l命令来检查当前系统中存在的Trace category,只输出指定tag的数据。
### 开发流程 ## 开发步骤
1.编译依赖添加 1.编译依赖添加。
需要修改的编译配置文件base\hiviewdfx\hitrace\cmd\BUILD.gn
``` ```
external_deps = [ "hitrace_native:hitrace_meter"] external_deps = [ "hitrace_native:hitrace_meter"]
``` ```
2.头文件依赖添加 2.头文件依赖添加
``` ```
#include "hitrace_meter.h"//接口函数定义头文件 #include "hitrace_meter.h"//接口函数定义头文件
``` ```
3.接口调用示例 3.接口调用示例
#include "hitrace_meter.h" // 包含hitrace_meter.h #include "hitrace_meter.h" // 包含hitrace_meter.h
using namespace std; using namespace std;
...@@ -181,14 +178,18 @@ external_deps = [ "hitrace_native:hitrace_meter"] ...@@ -181,14 +178,18 @@ external_deps = [ "hitrace_native:hitrace_meter"]
return 0; return 0;
} }
4.接口调用示例。
打点编译部署完成后,运行下面命令行来抓取Trace。然后在端侧shell里运行应用,可以抓取到Trace数据。
打点编译部署完成后,运行下面命令行来抓取Trace。然后在端侧shell里运行应用,可以抓取到Trace数据。 ```
hdc_std shell hitrace -t 10 ohos > .\myapp_demo.ftrace hdc_std shell hitrace -t 10 ohos > .\myapp_demo.ftrace
抓取之后的数据可以在smartperf中"Open trace file"或者直接拖入图形区打开。 ```
抓取之后的数据可以在smartperf中"Open trace file"或者直接拖入图形区打开,关于smartperf的详细介绍可查看https://toscode.gitee.com/openharmony-sig/smartperf。
### 调测验证 ## 调测验证
以下为一个demo调试过程 以下为一个demo调试过程,该demo使用了同步接口中的StartTrace和FinishTrace
1.编写测试代码hitrace_example.cpp,将使用到的接口加入代码: 1.编写测试代码hitrace_example.cpp,将使用到的接口加入代码:
...@@ -211,7 +212,7 @@ int main() ...@@ -211,7 +212,7 @@ int main()
StartTrace(LABEL, "funcBStart", SLEEP_TWO_SECOND); StartTrace(LABEL, "funcBStart", SLEEP_TWO_SECOND);
FuncB(); FuncB();
FinishTrace(LABEL); FinishTrace(LABEL);// 打印结束点
sleep(SLEEP_TWO_SECOND); sleep(SLEEP_TWO_SECOND);
sleep(SLEEP_ONE_SECOND); sleep(SLEEP_ONE_SECOND);
...@@ -223,6 +224,7 @@ int main() ...@@ -223,6 +224,7 @@ int main()
``` ```
2.修改gn编译文件并编译 2.修改gn编译文件并编译
编译配置文件路径base\hiviewdfx\hitrace\cmd\BUILD.gn
``` ```
ohos_executable("hitrace_example") { ohos_executable("hitrace_example") {
...@@ -242,7 +244,7 @@ group("hitrace_target") { ...@@ -242,7 +244,7 @@ group("hitrace_target") {
} }
``` ```
3.运行hitrace_example有如下数据输出说明调试成功 3.将编译出来的hitrace_example可执行文件放到设备中的/system/bin目录下,在shell中执行hitrace_example
``` ```
<...>-1651 (-------) [002] .... 327.194136: tracing_mark_write: S|1650|H:testAsync 111 <...>-1651 (-------) [002] .... 327.194136: tracing_mark_write: S|1650|H:testAsync 111
...@@ -264,9 +266,9 @@ group("hitrace_target") { ...@@ -264,9 +266,9 @@ group("hitrace_target") {
## HiTraceMeter命令行工具使用指导 # HiTraceMeter命令行工具使用指导
HiTraceMeter提供了可执行的二进制程序hitrace用于抓取内核运行的数据,当前支持的操作如下: HiTraceMeter提供了可执行的二进制程序hitrace,设备刷openharmony后直接在shell中运行以下命令,抓取内核运行的数据,当前支持的操作如下:
**表 4** 命令行列表 **表 4** 命令行列表
...@@ -337,5 +339,5 @@ HiTraceMeter提供了可执行的二进制程序hitrace用于抓取内核运行 ...@@ -337,5 +339,5 @@ HiTraceMeter提供了可执行的二进制程序hitrace用于抓取内核运行
# 参考 # 参考
更多关于hitrace_meter的详细内容请参考:[hiviewdfx_hitrace: A Lightweight Distributed Tracing | 轻量级的分布式调用链跟踪 (gitee.com)](https://gitee.com/openharmony/hiviewdfx_hitrace) 更多关于HiTraceMeter的详细内容请参考:[hiviewdfx_hitrace: A Lightweight Distributed Tracing | 轻量级的分布式调用链跟踪 (gitee.com)](https://gitee.com/openharmony/hiviewdfx_hitrace)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册