HarmonyOS NEXT 调优工具 Smart Perf Host 高效使用指南

在软件开发的过程中,很多开发者都经常会遇到一些性能问题,比如应用启动慢、点击滑动卡顿、应用后台被杀等,想要解决这些问题势必需要收集大量系统数据。而在收集数据的过程中,开发者则需要在各种工具和命令之间来回切换,不但容易错过问题发生时间点,数据收集完如何能将信息有效结合分析又将是一件复杂的工作。基于开发痛点,HarmonyOS NEXT 通过构建 Smart Perf 工具全家桶,为开发和测试人员提供了测试、调优、分析一站式服务,接下来让我们一起来看 Smart Perf 如何解决开发性能问题。

在 Smart Perf 工具全家桶中,Smart Perf Host 主要提供性能调优能力,目前可提供调优数据一键抓取,系统调度分析,CPU 使用情况展示,调用栈展示,Native Memory 跟踪和分析,文件系统跟踪,Trace 抓取和分析和高阶使用方式(用户可以通过自定义 SQL 细粒度查询性能调优数据)等能力。想要了解 Smart Perf Host 如何在大量数据中进行性能问题快速分析,首先可通过典型场景分析模版来进行深入了解。

一、Smart Perf Host 典型场景分析模板

● 目前已知 Smart Perf Host 场景分析模版提供整机 CPU 调度分析模板以及内存调优场景分析,在 CPU 调度分析模板中,可做到自动分析 CPU 调度数据,并协助发现 CPU 调度瓶颈。

具体操作过程首先开发者可选择左侧导航栏中的“模板抓取(Record Template)”,然后连接设备,选择调度分析模板,开始抓取操作;待抓取完成后,就可以通过导航栏中的 Scheduling Analysis 自动进行数据分析和显示。调度分析模板可以按照 CPU 粒度和线程粒度进行数据分析和展示。通过 CPU 粒度分析,开发人员可用来查看即 CPU 资源在被哪些任务使用。相对应可快速分析以下场景:CPU 大中小核利用情况是否达到调优人员预期

● CPU 大中小核运行频点是否达到调优人员预期

● 谁在占用特定 CPU 的特定频点

● 大核高频的任务是否可以往中小核迁移,以降低能耗

● 功耗分析:Cpu idle 值越大,睡眠越深,功耗越低

● 各个 CPU 除了在执行任务,还在处理哪些中断

而线程粒度分析,线程总运行时长,则可以用来查看特定任务在使用哪些 CPU 资源,可快速分析如下场景:

● 占用大、中、小核和总 CPU 的 TOP 线程是否为预期线程

● 关键线程(比如 UI,RS 等)大中小核和频点的使用情况是否为预期调度策略

若测试人员关注 CPU 和线程运行细节,则可以从泳道图继续查看。其中 CPU 泳道图提供细节数据如下:当前调用 CPU 的线程和对应的进程情况

● 线程唤醒关系链

● 查看 CPU 频点供给情况

● 点选一个线程显示详情页(进程名、线程名、起始时间、时长、优先级、线程状态)

● 框选 CPU 泳道可以查看 CPU 频点和基于线程的 CPU 运行分布,即框选的这段时间内线程在每个 CPU 上的运行时长和频点使用时长

另 Hiperf 是 HarmonyOS NEXT 所提供的能力,可用来周期访问 cpu 的运行栈,导出调用栈,不受系统打点影响。目前 Smart Perf Host 支持能力如下:支持软硬件 events 抓取,如:cpu-cycles、instructions 和 page-faults 等

● 页面内抓取 hiperf 数据

● 框选后可查看调用栈

● 支持条件过滤功能

● 可查看火焰图

基于以上,我们通过一个实际案例来学习如何通过上述内容进行问题分析:

案例如下图所示:

如图我们可看到问题在于某个应用启动时间比较长,首先通过通过整机调度分析模板能够发现 tb 线程单次运行时间长达 79.31ms,且通过 CPU 泳道确认该线程运行在中核,2.0GHz,因此 CPU 资源供给没有问题;接下来我们展开应用进程泳道图,在线程泳道图中可定位出运行时间较长的阶段(但无法看到深层的函数,需使用 hiperf 进一步分析)。

我们直接通过抓取 Hiperf 做进一步分析。首先基于上面已经发现的运行时间长阶段,通过 M 键进行锁定,然后在 Hiperf 泳道图中选中对应位置,最后使用火焰图定位阻塞函数,能够发现一个 jsNapi 执行时间太长。

二、基于 Smart Perf Host 进行内存跟踪和分析

通过 Smart Perf Host 开发及测试人员可查看内存的分配和释放等情况,了解内存详细信息,并支持火焰图查看。如下图所示,在“Native Memory”中可显示内存详情,比如内存地址,内存申请和释放的时间点,内存大小和单次栈信息等。在不同特定场景中,Native Memory 可发挥追踪和分析、内存申请/释放分析、调用栈本地符号化以及支持内存抓取条件可配作用。目前 Smart Perf Host 工具代码全部开源,想要获取和部署 Smart Perf Host 工具,可参考以下路径进行编译部署。

截止到目前,Smart Perf Host 能力规划中已支持近 30 个开发能力,25 个能力正处于开发测试阶段,能力覆盖性能调优模板、工具系统能力、系统依赖以及用户体验提升。开发者还可通过代码染色系统进行代码覆盖率报告生成,执行上不但能沿用原有自测使用习惯无需更换环境,还可支持共享代码下载环境无需单独部署服务。从开发到调测工具都全面升级的 HarmonyOS NEXT 正助力 HarmonyOS 应用生态正在开启一个新的阶段,构建繁荣的应用生态,还需更多开发者的加入。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/166423.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【遍历二叉树的非递归算法,二叉树的层次遍历】

文章目录 遍历二叉树的非递归算法二叉树的层次遍历 遍历二叉树的非递归算法 先序遍历序列建立二叉树的二叉链表 中序遍历非递归算法 二叉树中序遍历的非递归算法的关键:在中序遍历过某个结点的整个左子树后,如何找到该结点的根以及右子树。 基本思想&a…

模态对话框和非模态对话框

创建到堆区这样非模态对话框就不会一闪而过 .exec使程序进入阻塞状态 ()[]{}lambda表达式 55号属性可以在对话框关闭的时候将堆区的内存释放掉从而防止内存泄露

Java9新增特性

特性列表 模块化系统:Java 9引入了模块化系统,将代码划分为模块,以更好地组织和管理代码。新的日期和时间API:Java 9引入了新的日期和时间API,使得处理日期和时间变得更简单、更强大。HTTP/2支持:Java 9引…

代码审计(某个人发卡系统V6.0(php))

一、前台漏洞 1、前台文件包含漏洞(如果开启了gbc,可远程包含) 注入点1: tyid没任何过滤,存在注入 payload:http://faka.com/ajax.php?actselgo POST传参: tyid1/**/union/**/select/**/*/**/from/**/if_km/**/limit/**/0,1# 注入点2: 也是没加任何…

代挂单页网址发布页+加盟代理+APP下载页源码

代挂单页加盟代理网址发布页app下载页HTML单页版本,自行修改源码内文字。自行修改联系方式、登录地址!上传即可使用。源码我已全部打包好,直接上传本站提供的源码,无后台,直接访问即可! 源码下载&#xff…

如何用Excel软件制作最小二乘法①

一、用自带的选项(不推荐),因为感觉只是近似,虽然结果一样 1.在Excel中输入或打开要进行在excel中输入或打开要进行最小二乘法拟合的数据,如图所示。 2.按住“shift”键的同时,用鼠标左键单击以选择数据&a…

代码随想录算法训练营第16天|104. 二叉树的最大深度111.二叉树的最小深度222.完全二叉树的节点个数

JAVA代码编写 104. 二叉树的最大深度 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3示例 2: …

把自己本地项目发布到Gitee

目录 1.准备工作 ​2.gitee创建仓库 3.本地上传代码 4.验证​ 1.准备工作 本地安装了git,公钥私钥都配置好了 2.gitee创建仓库 创建仓库,没有仓库放不了代码 只需要选择分支类型,和带星号的 进入下一页 点这个 3.本地上传代码 新建一…

【计算机网络基础实验】实验二 有线IP互通网络实践

任务一 IP路由协议实现企业路由器通信 目录如下: 任务一 IP路由协议实现企业路由器通信2.1.1 任务描述2.1.2 任务目的2.1.3 任务实施实验需求实验步骤步骤1:更改每台设备的名称步骤2: 给R1接口配置相应IP地址步骤3: 给R2接口配置相…

AI:73-结合语法知识的神经机器翻译研究

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…

【C/C++】什么是POD(Plain Old Data)类型

2023年11月6日,周一下午 目录 POD类型的定义标量类型POD类型的特点POD类型的例子整数类型:C 风格的结构体:数组:C 风格的字符串:std::array:使用 memcpy 对 POD 类型进行复制把POD类型存储到文件中,并从文…

MySQL-基础篇

文章目录 第一章 MYSQL 概述数据库相关概念MySQL 数据库下载安装启动和停止 MySQL客户端连接解决:mysql 不是内部或外部命令,也不是可运行的程序或批处理文件。配置 Path 环境变量解决:net start mysql80 发生系统错误 5。 拒绝访问。MYSQL 的…