未验证 提交 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系统主要分为三部分:
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.
......@@ -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,
## 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** 同步接口
......@@ -108,6 +107,7 @@ C++接口仅系统开发者使用,JS(目前暂未开放js接口)应用开
| void StartTrace(uint64_t label, const std::string& value, float limit = -1); | 启动同步trace |
| void FinishTrace(uint64_t label); | 关闭同步trace |
同步接口StartTrace和FinishTrace必须配对使用,FinishTrace和前面最近的StartTrace进行匹配。StartTrace和FinishTrace函数对可以嵌套模式使用,跟踪数据解析时使用栈式数据结构进行匹配。接口中的limit参数用于限流,使用默认值即可。
**表 2** 异步接口
| Async trace | 功能描述 |
......@@ -115,17 +115,13 @@ C++接口仅系统开发者使用,JS(目前暂未开放js接口)应用开
| 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 |
异步接口StartAsyncTrace和FinishAsyncTrace的跟踪数据匹配时,使用参数中的value和taskId配对匹配,可以不按顺序使用,主要用于异步场景。在C++程序中,使用异步跟踪的场景很少。
**表 3** 计数器接口
| Counter 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;
- (2)name: Trace的名称,IDE中会以此字段展示这段Trace;
- (3)value: Trace携带的信息,表明当前的某种状态,例如内存大小,队列长短等;
......@@ -133,19 +129,20 @@ C++接口仅系统开发者使用,JS(目前暂未开放js接口)应用开
- (5)在抓取Trace数据的时候,可以使用hitrace -l命令来检查当前系统中存在的Trace category,只输出指定tag的数据。
### 开发流程
1.编译依赖添加
## 开发步骤
1.编译依赖添加。
需要修改的编译配置文件base\hiviewdfx\hitrace\cmd\BUILD.gn
```
external_deps = [ "hitrace_native:hitrace_meter"]
```
2.头文件依赖添加
2.头文件依赖添加
```
#include "hitrace_meter.h"//接口函数定义头文件
```
3.接口调用示例
3.接口调用示例
#include "hitrace_meter.h" // 包含hitrace_meter.h
using namespace std;
......@@ -181,14 +178,18 @@ external_deps = [ "hitrace_native:hitrace_meter"]
return 0;
}
4.接口调用示例。
打点编译部署完成后,运行下面命令行来抓取Trace。然后在端侧shell里运行应用,可以抓取到Trace数据。
打点编译部署完成后,运行下面命令行来抓取Trace。然后在端侧shell里运行应用,可以抓取到Trace数据。
```
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,将使用到的接口加入代码:
......@@ -211,7 +212,7 @@ int main()
StartTrace(LABEL, "funcBStart", SLEEP_TWO_SECOND);
FuncB();
FinishTrace(LABEL);
FinishTrace(LABEL);// 打印结束点
sleep(SLEEP_TWO_SECOND);
sleep(SLEEP_ONE_SECOND);
......@@ -223,6 +224,7 @@ int main()
```
2.修改gn编译文件并编译
编译配置文件路径base\hiviewdfx\hitrace\cmd\BUILD.gn
```
ohos_executable("hitrace_example") {
......@@ -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
......@@ -264,9 +266,9 @@ group("hitrace_target") {
## HiTraceMeter命令行工具使用指导
# HiTraceMeter命令行工具使用指导
HiTraceMeter提供了可执行的二进制程序hitrace用于抓取内核运行的数据,当前支持的操作如下:
HiTraceMeter提供了可执行的二进制程序hitrace,设备刷openharmony后直接在shell中运行以下命令,抓取内核运行的数据,当前支持的操作如下:
**表 4** 命令行列表
......@@ -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.
先完成此消息的编辑!
想要评论请 注册