From b38ccf2417c520d6eb8769cf6ca581f8a153936c Mon Sep 17 00:00:00 2001 From: zhangzepeng Date: Mon, 12 Jun 2023 09:29:28 +0800 Subject: [PATCH] =?UTF-8?q?=E2=80=99smartperf-host=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E2=80=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhangzepeng --- .../device-test/figures/smartperf_frame.png | Bin 0 -> 36314 bytes .../device-dev/device-test/smartperf-host.md | 82 ++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 zh-cn/device-dev/device-test/figures/smartperf_frame.png create mode 100644 zh-cn/device-dev/device-test/smartperf-host.md diff --git a/zh-cn/device-dev/device-test/figures/smartperf_frame.png b/zh-cn/device-dev/device-test/figures/smartperf_frame.png new file mode 100644 index 0000000000000000000000000000000000000000..ec6d22ff82fcfcb4750a27a00322161bb6693e6f GIT binary patch literal 36314 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 literal 0 HcmV?d00001 diff --git a/zh-cn/device-dev/device-test/smartperf-host.md b/zh-cn/device-dev/device-test/smartperf-host.md new file mode 100644 index 0000000000..0c02f2bb41 --- /dev/null +++ b/zh-cn/device-dev/device-test/smartperf-host.md @@ -0,0 +1,82 @@ +# Smartperf-Host +## 简介 +Smartperf-Host是一款深入挖掘数据、细粒度地展示数据的性能功耗调优工具,旨在为开发者提供一套性能调优平台,支持对CPU调度、频点、进程线程时间片、堆内存、帧率等数据进行采集和展示,展示方式为泳道图,支持GUI(图形用户界面)操作进行详细数据分析。 +## 架构图 +![系统架构图](figures/smartperf_frame.png) +该组件整体分为设备端和PC端两部分,设备端和PC端基于gRPC(Remote Procedure Call)通信框架进行数据交互。 + +设备端内部分为应用程序内嵌组件、命令行工具、性能调优服务、性能调优插件集合、部分系统工具及部分系统内核等模块。设备端提供了插件扩展能力,对外提供了插件接口,基于该扩展能力可以按需定义自己的能力,并集成到框架中来,目前基于插件能力已经完成了native内存插件、trace插件等,详细介绍见[性能调优组件](https://gitee.com/openharmony/developtools_profiler)。 + +PC端以Smartperf-Host网站的形式进行发布,内部分为Trace Streamer数据解析、SQLite数据存储、hdc设备管理、数据导入、UI绘制、数据分析等模块。下文会重点对Smartperf-Host提供的各项能力进行介绍。 +## 项目目录 +``` +/smartperf_host +├── host # Smartperf-Host 相关代码 +│ ├── doc # Smartperf-Host 相关使用文档 +│ ├── ide # Smartperf-Host IDE 模块目录 +│ │ └── src # 主机测调优模块代码 +│ │ │ ├── base-ui # 基础组件目录 +│ │ │ └── Trace # 业务逻辑目录 +│ ├── trace_streamer # 解析模块代码目录 +│ │ ├── base # 基础功能 +│ │ ├── cfg # 配置目录 +│ │ ├── filter # Filter 功能 +│ │ ├── include # Include 头文件 +│ │ ├── multi_platform # 平台适配 +│ │ ├── parser # 解析业务逻辑 +│ │ │ ├── bytrace_parser # byTrace 解析业务逻辑 +│ │ │ └── htrace_parser # hTrace 解析业务逻辑 +│ │ ├── table # 表结构 +│ │ ├── trace_data # trace 结构 +│ │ ├── trace_streamer # traceStreamer 结构 +│ │ │ └── kits # js/napi 接口存放目录 +``` +## 功能介绍 +- 网页加载trace + + 使用Smartperf-Host加载保存在本地的trace文件(htrace、ftrace等)并显示数据到泳道图中,trace数据分析详见《[网页加载trace说明](https://gitee.com/openharmony-sig/developtools_smartperf_host/blob/master/ide/src/doc/md/quickstart_systemtrace.md)》。 +- 网页抓取trace + + 使用Smartperf-Host在线抓取trace,可以自定义抓取内容、抓取时长、trace保存路径,详见《[网页抓取trace说明](https://gitee.com/openharmony-sig/developtools_smartperf_host/blob/master/ide/src/doc/md/quickstart_web_record.md)》。 +- 设备抓取trace + + 在设备端抓取trace,可以自定义抓取内容、抓取时长、trace保存路径,详见《[设备端抓取trace说明](https://gitee.com/openharmony-sig/developtools_smartperf_host/blob/master/ide/src/doc/md/quickstart_device_record.md)》。 +- Ability Monitor抓取 + + 使用Smartperf-Host抓取应用的CPU、内存、磁盘IO和网络的使用情况,详见《[Ability Monitor抓取和展示说明](https://gitee.com/openharmony-sig/developtools_smartperf_host/blob/master/ide/src/doc/md/quickstart_ability_monitor.md)》。 +- Native Memory抓取 + + 使用Smartperf-Host抓取应用的Native Memory(C和C++部分)的分配和释放情况,详见《[Native Memory抓取和展示说明](https://gitee.com/openharmony-sig/developtools_smartperf_host/blob/master/ide/src/doc/md/quickstart_native_memory.md)》。 +- Hiperf抓取 + + 使用Smartperf-Host抓取应用的cpu使用量、方法的调用栈等,详见《[HiPerf的抓取和展示说明](https://gitee.com/openharmony-sig/developtools_smartperf_host/blob/master/ide/src/doc/md/quickstart_hiperf.md)》。 +- HiSystemEvent抓取 + + 使用Smartperf-Host抓取应用的各个子类别功耗占比(CPU、网络、定位等)、应用的资源申请使用记录(WorkScheduler、Runninglock、Alarm、Location Request)、应用功耗异常事件显示、功耗关联系统状态显示(电池电量、屏幕状态),详见《[HiSystemEvent的抓取和展示说明](https://gitee.com/openharmony-sig/developtools_smartperf_host/blob/master/ide/src/doc/md/quickstart_hisystemevent.md)》。 +- FileSystem抓取 + + 使用Smartperf-Host抓取所有文件系统系统调用信息、读写调用次数等,详见《[FileSystem的抓取和展示说明](https://gitee.com/openharmony-sig/developtools_smartperf_host/blob/master/ide/src/doc/md/quickstart_filesystem.md)》。 +- 页内存抓取 + + 使用Smartperf-Host抓取页内存相关事件的开始时间、持续时间、触发进程、触发线程、事件类型、内存地址、内存大小等,详见《[页内存的抓取和展示说明](https://gitee.com/openharmony-sig/developtools_smartperf_host/blob/master/ide/src/doc/md/quickstart_page_fault.md)》。 +- Bio抓取 + + 使用Smartperf-Host抓取每次IO访问的起始时间、总延迟、进程、每4k数据的平均延迟、线程、操作(写数据、页面换入、Metadata)、访问量、路径等、Block number、优先级、Backtrace调用栈,详见《[Bio的抓取和展示说明](https://gitee.com/openharmony-sig/developtools_smartperf_host/blob/master/ide/src/doc/md/quickstart_bio.md)》。 +- 进程Smaps抓取 + + 使用Smartperf-Host抓取单个进程的smaps数据(类别、Pss、Rss、Vss等),数据源为/proc/$pid/smaps,详见《[进程smaps的抓取和展示说明](https://gitee.com/openharmony-sig/developtools_smartperf_host/blob/master/ide/src/doc/md/quickstart_smaps.md)》。 +- Sql分析和Metrics说明 + + Smartperf-Host网站trace解析完成后在线数据库使用说明,详见《[Sql分析和Metrics说明](https://gitee.com/openharmony-sig/developtools_smartperf_host/blob/master/ide/src/doc/md/quickstart_sql_metrics.md)》。 +## 编译指南 +项目编译主要包括两部分,Trace Streamer编译和Smartperf-Host编译部署。 +### 构建约束 +- C++ 11版本或以上 +- node 16.15.1版本或以上 +- npm 8.13.2版本或以上 +- TypeScript 4.2.3版本或以上 +- golang 版本 1.13.8版本或以上 +### Trace Streamer编译 +搭建Smartperf-Host网站需要编译出trace_streamer的wasm版本供网页端进行原始trace数据解析工作,具体的编译过程参考《[如何独立编译Trace Streamer](https://gitee.com/openharmony-sig/developtools_smartperf_host/blob/master/trace_streamer/doc/compile_trace_streamer.md)》。 +### Smartperf-Host编译部署 +具体的编译部署过程参考《[SmartPerf 编译部署指导](https://gitee.com/openharmony-sig/developtools_smartperf_host/blob/master/ide/README_zh.md)》,部署成功后通过浏览器访问页面 https://[部署机器ip地址]:9000/application/ 即可使用Smartperf-Host的全部功能。 -- GitLab