AI工具为啥可以分析Perfetto性能?手把手教你常用SQL分析性能问题

【AI Infra】Perfetto性能分析工具指南 Perfetto是一款开源性能分析工具,提供系统级和应用级的活动数据追踪功能。其界面分为四个区域:左侧操作区(包含Trace查看、SQL查询、预置分析等功能)、上方信息区、中间图形化展示区以及下方详细信息区。工具支持快捷键操作(w/s缩放、a/d移动、m标记等),并能高效处理大体积Trace文件。通过Timeline分析可发现性能瓶颈,如案例中update_actor耗时过高的问题,最终定位到CPU offloading导致的MemcpyH2D操作耗时过长,提出了优化方案。Perfetto相比Systrac 阅读详情

背景

近来AI在平时工作中频繁使用,经常有人说是否可以考虑使用AI来分析Perfetto等场景。其实大家可能会感叹惊讶为啥AI还可以分析Perfetto呢?其实大家去体验一下AI分析Perfetto相关文件就会知道,其实后面的本质原理就是使用Perfetto本身支持的SQL语句对文件的相关表进行查询和统计等操作。

在这里插入图片描述所以说理解AI背后的原理就会觉得其实AI也没有那么神秘,下面列出与AI可以分析Perfetto的原理:

AI理解用户的自然语言
—》 AI会去查找生成达到用户要求的 SQL语句
—》使用生成的SQL语句对Perfetto文件相关表进行检索查询情况
—》AI对查询到的结果进行整理

其实Perfetto的sql使用对于我们黑盒情况下分析统计性能问题也是作用很大的,所以学习Perfetto SQL的使用是非常有必要的。

在这里插入图片描述

一、为什么 Perfetto 使用 SQL?

1.1 传统性能分析的痛点

痛点传统工具Perfetto SQL 解决方案
数据孤岛Systrace、Logcat、内存快照各自独立统一 Trace 文件,所有数据一张表查询
分析困难需要肉眼在可视化界面中寻找问题SQL 精确查询,秒级定位
无法量化“看起来卡顿” → 无法衡量SQL 统计精确到毫秒
难以对比不同 Trace 无法批量分析SQL 导出数据,批量对比
学习成本高每个工具一套使用方法标准 SQL,一次学会到处用

1.2 SQL 查询的优势

精确量化示例:

-- 精确找出所有超过 100ms 的卡顿
SELECT name, dur/1e6 as ms FROM slice WHERE dur > 100000000;

多表关联示例:

-- 关联 slice -> thread_track -> thread -> process 四张表
SELECT process.name, thread.name, slice.name, slice.dur
FROM slice 
JOIN thread_track ON slice.track_id = thread_track.id
JOIN thread ON thread_track.utid = thread.utid
JOIN process ON thread.upid = process.upid;

二、环境准备

2.1 下载工具

curl -LO https://github.com/google/perfetto/releases/latest/download/trace_processor_linux_amd64
mv trace_processor_linux_amd64 trace_processor_shell
chmod +x trace_processor_shell

2.2 验证安装

$ ./trace_processor_shell --version
Perfetto Trace Processor v47.0

三、表关系说明(重要!)

关联路径:slice → thread_track → thread → process

slice.track_id = thread_track.id
thread_track.utid = thread.utid
thread.upid = process.upid

⚠️ 常见错误:直接 JOIN process 而不经过 thread_track 和 thread,会导致笛卡尔积,结果完全错误!


四、基础 SQL 查询(全部实测验证)

4.1 Trace 基本信息

SELECT 
    'Trace时长' as metric, 
    ROUND((MAX(ts) - MIN(ts))/1e9, 2) as value, 
    '秒' as unit 
FROM slice
UNION ALL
SELECT 'Slice总数', COUNT(*), '个' FROM slice
UNION ALL
SELECT '进程数量', COUNT(DISTINCT upid), '个' FROM thread WHERE upid IS NOT NULL;

执行:

./trace_processor_shell trace.pftrace -q /dev/stdin << 'EOF'
SELECT 
    'Trace时长' as metric, 
    ROUND((MAX(ts) - MIN(ts))/1e9, 2) as value, 
    '秒' as unit 
FROM slice
UNION ALL
SELECT 'Slice总数', COUNT(*), '个' FROM slice
UNION ALL
SELECT '进程数量', COUNT(DISTINCT upid), '个' FROM thread WHERE upid IS NOT NULL;
EOF

输出:

"metric","value","unit"
"Trace时长",5.37,"秒"
"Slice总数",10090,"个"
"进程数量",105,"个"

4.2 进程耗时排名(✅ 完整 JOIN 条件)

SELECT 
    p.name, 
    COUNT(*) as cnt, 
    ROUND(SUM(s.dur)/1e9, 2) as total_s
FROM slice s
JOIN thread_track tt ON s.track_id = tt.id      -- 关键:关联 track
JOIN thread t ON tt.utid = t.id                 -- 关键:关联 thread
JOIN process p ON t.upid = p.id                 -- 关键:关联 process
GROUP BY p.id 
ORDER BY total_s DESC 
LIMIT 5;

执行:

./trace_processor_shell trace.pftrace -q /dev/stdin << 'EOF'
SELECT 
    p.name, 
    COUNT(*) as cnt, 
    ROUND(SUM(s.dur)/1e9, 2) as total_s
FROM slice s
JOIN thread_track tt ON s.track_id = tt.id
JOIN thread t ON tt.utid = t.id
JOIN process p ON t.upid = p.id
GROUP BY p.id 
ORDER BY total_s DESC 
LIMIT 5;
EOF

输出:

"name","cnt","total_s"
"/system/bin/surfaceflinger",8111,14.42
"system_server",273,9.47
"/vendor/bin/hw/android.hardware.sensors@1.0-service",247,9.18
"com.android.launcher3",640,0.73
"mdss_fb0",153,0.22

❌ 错误写法(缺少 JOIN 条件):

-- 错误!会产生笛卡尔积,所有结果都一样
SELECT p.name, SUM(s.dur)/1e6 as time 
FROM slice s 
JOIN process p        -- 缺少 ON 条件!
GROUP BY p.id;

4.3 最耗时的操作

SELECT 
    name, 
    COUNT(*) as cnt, 
    ROUND(MAX(dur)/1e6, 2) as max_ms
FROM slice 
GROUP BY name 
ORDER BY max_ms DESC 
LIMIT 5;

输出:

"name","cnt","max_ms"
"threadMain",132,175.71
"vsyncRequested = 0 ",24,173.54
"mCondition.wait",24,173.09
"HIDL::ISensors::poll::client",122,47.33
"binder transaction",172,46.92

4.4 长耗时操作(>10ms)

SELECT 
    name, 
    ROUND(ts/1e9, 2) as time_s, 
    ROUND(dur/1e6, 2) as ms
FROM slice 
WHERE dur > 10000000 
ORDER BY dur DESC 
LIMIT 5;

输出:

"name","time_s","ms"
"threadMain",41825.02,175.71
"threadMain",41824.82,174.60
"threadMain",41823.02,173.92
"vsyncRequested = 0 ",41825.02,173.54
"vsyncRequested = 0 ",41824.82,173.19

4.5 线程耗时统计(✅ 完整 JOIN 条件)

SELECT 
    t.name as thread, 
    p.name as proc, 
    ROUND(SUM(s.dur)/1e9, 2) as total_s
FROM slice s
JOIN thread_track tt ON s.track_id = tt.id
JOIN thread t ON tt.utid = t.id
JOIN process p ON t.upid = p.id
GROUP BY t.id 
ORDER BY total_s DESC 
LIMIT 5;

输出:

"thread","proc","total_s"
"app","/system/bin/surfaceflinger",13.61
"SensorService","system_server",9.41
"HwBinder:991_1","/vendor/bin/hw/android.hardware.sensors@1.0-service",6.99
"sensors@1.0-ser","/vendor/bin/hw/android.hardware.sensors@1.0-service",2.19
"droid.launcher3","com.android.launcher3",0.41

4.6 Binder 通信分析

SELECT 
    name, 
    COUNT(*) as cnt, 
    ROUND(AVG(dur)/1e6, 2) as avg_ms, 
    ROUND(MAX(dur)/1e6, 2) as max_ms
FROM slice 
WHERE category = 'binder' 
GROUP BY name;

输出:

"name","cnt","avg_ms","max_ms"
"binder async rcv",150,0.00,0.00
"binder reply",172,27.29,46.44
"binder transaction",172,28.00,46.92
"binder transaction async",150,0.00,0.00

4.7 调度延迟分析(✅ 完整 JOIN 条件)

SELECT 
    thread.name, 
    sched.ts/1e9 as time_s, 
    sched.dur/1e6 as ms, 
    sched.cpu
FROM sched
JOIN thread USING (utid)      -- 使用 USING 简化写法
WHERE sched.dur > 10000000
ORDER BY sched.dur DESC 
LIMIT 5;

输出:

"name","time_s","ms","cpu"
"swapper",41822.44,2986.34,6
"swapper",41822.44,1556.84,7
"swapper",41824.00,913.56,7
"swapper",41822.55,749.87,4
"swapper",41825.02,409.86,7

4.8 帧渲染分析

SELECT 
    name, 
    COUNT(*) as cnt, 
    ROUND(AVG(dur)/1e6, 2) as avg_ms, 
    ROUND(MAX(dur)/1e6, 2) as max_ms
FROM slice 
WHERE name LIKE '%vsync%' 
GROUP BY name 
ORDER BY cnt DESC 
LIMIT 5;

输出:

"name","cnt","avg_ms","max_ms"
" connection->vsyncRequest = None",2400,0.10,0.51
"vsyncRequested = 1 ",108,5.34,18.96
"VSyncDispatchTimerQueue 0x74f0397af0 cancelTimer...",80,0.03,0.11
"0x74f0397af0 VSyncDispatchTimerQueue::schedule...",78,0.85,1.43
"VSyncDispatchTimerQueue 0x74f0397af0 timerCallback...",58,0.29,0.71

五、主线程与渲染分析(全部实测验证)

5.1 RenderThread 最耗时方法(✅ 完整 JOIN 条件)

SELECT 
    s.name as method_name,
    p.name as process_name,
    ROUND(s.dur/1e6, 2) as duration_ms,
    ROUND(s.ts/1e9, 2) as timestamp_s
FROM slice s
JOIN thread_track tt ON s.track_id = tt.id
JOIN thread t ON tt.utid = t.id
JOIN process p ON t.upid = p.id
WHERE t.name = 'RenderThread'
ORDER BY s.dur DESC
LIMIT 10;

执行:

./trace_processor_shell trace.pftrace -q /dev/stdin << 'EOF'
SELECT 
    s.name as method_name,
    p.name as process_name,
    ROUND(s.dur/1e6, 2) as duration_ms,
    ROUND(s.ts/1e9, 2) as timestamp_s
FROM slice s
JOIN thread_track tt ON s.track_id = tt.id
JOIN thread t ON tt.utid = t.id
JOIN process p ON t.upid = p.id
WHERE t.name = 'RenderThread'
ORDER BY s.dur DESC
LIMIT 10;
EOF

输出:

"method_name","process_name","duration_ms","timestamp_s"
"DrawFrames 277526","com.android.launcher3",17.88,41824.63
"DrawFrames 277483","com.android.launcher3",16.79,41823.64
"Drawing 437.00 1186.00 644.00 1457.00","com.android.launcher3",15.73,41824.63
"Drawing 437.00 1186.00 644.00 1457.00","com.android.launcher3",13.92,41823.64
"DrawFrames 277569","com.android.launcher3",13.36,41825.63

5.2 掉帧统计(帧耗时 > 16.67ms)

SELECT 
    '掉帧统计' as metric,
    COUNT(*) as frame_count,
    ROUND(AVG(dur)/1e6, 2) as avg_frame_ms,
    ROUND(MAX(dur)/1e6, 2) as max_frame_ms
FROM slice
WHERE name LIKE '%DrawFrame%' AND dur > 16667000
UNION ALL
SELECT 
    '总帧数',
    COUNT(*),
    ROUND(AVG(dur)/1e6, 2),
    ROUND(MAX(dur)/1e6, 2)
FROM slice
WHERE name LIKE '%DrawFrame%';

输出:

"metric","frame_count","avg_frame_ms","max_frame_ms"
"掉帧统计",2,17.33,17.88
"总帧数",5,13.99,17.88

分析:5 帧中有 2 帧掉帧(40% 掉帧率)

5.3 Handler 消息处理耗时(✅ 完整 JOIN 条件)

SELECT 
    s.name as handler_msg,
    p.name as process,
    COUNT(*) as count,
    ROUND(AVG(s.dur)/1e6, 2) as avg_ms,
    ROUND(MAX(s.dur)/1e6, 2) as max_ms
FROM slice s
JOIN thread_track tt ON s.track_id = tt.id
JOIN thread t ON tt.utid = t.id
JOIN process p ON t.upid = p.id
WHERE s.name LIKE '%handler%' OR s.name LIKE '%Message%' OR s.name LIKE '%Looper%'
GROUP BY s.name, p.name
HAVING count > 0
ORDER BY max_ms DESC
LIMIT 10;

输出:

"handler_msg","process","count","avg_ms","max_ms"
"handleMessage","/system/bin/surfaceflinger",5,8.76,13.02
"JIT compiling android.os.Looper...","com.android.launcher3",1,4.07,4.07
"monitor contention with owner temporary-7...","com.tencent.android.qqdownloader:daemon",1,2.00,2.00

5.4 IO 操作耗时(✅ 完整 JOIN 条件)

SELECT 
    s.name as operation,
    p.name as process,
    COUNT(*) as count,
    ROUND(AVG(s.dur)/1e6, 2) as avg_ms,
    ROUND(MAX(s.dur)/1e6, 2) as max_ms
FROM slice s
JOIN thread_track tt ON s.track_id = tt.id
JOIN thread t ON tt.utid = t.id
JOIN process p ON t.upid = p.id
WHERE s.name LIKE '%read%' OR s.name LIKE '%write%' OR s.name LIKE '%fsync%' OR s.name LIKE '%open%'
GROUP BY s.name, p.name
HAVING count > 0
ORDER BY max_ms DESC
LIMIT 10;

输出:

"operation","process","count","avg_ms","max_ms"
"threadMain","/system/bin/surfaceflinger",132,35.06,175.71
"Lock contention on thread list lock...","com.tencent.android.qqdownloader:daemon",1,2.58,2.58
"mdss_mdp_cmd_readptr_done","[NULL]",15,0.84,1.85

六、ANR 与卡顿排查(全部实测验证)

6.1 ANR WatchDog 相关(✅ 完整 JOIN 条件)

SELECT 
    s.name as operation,
    p.name as process,
    t.name as thread,
    ROUND(s.dur/1e6, 2) as duration_ms,
    ROUND(s.ts/1e9, 2) as timestamp_s
FROM slice s
JOIN thread_track tt ON s.track_id = tt.id
JOIN thread t ON tt.utid = t.id
JOIN process p ON t.upid = p.id
WHERE s.name LIKE '%ANR%' OR s.name LIKE '%anr%' OR s.name LIKE '%WatchDog%' OR s.name LIKE '%freeze%'
ORDER BY s.dur DESC
LIMIT 10;

输出:

"operation","process","thread","duration_ms","timestamp_s"
"monitor contention with owner |ANR-WatchDog| (106)...","com.zhihu.android","m.zhihu.android",0.33,41823.53

6.2 锁竞争分析(✅ 完整 JOIN 条件)

SELECT 
    s.name as lock_contention,
    p.name as process,
    ROUND(s.dur/1e6, 2) as duration_ms,
    ROUND(s.ts/1e9, 2) as timestamp_s
FROM slice s
JOIN thread_track tt ON s.track_id = tt.id
JOIN thread t ON tt.utid = t.id
JOIN process p ON t.upid = p.id
WHERE s.name LIKE '%Lock contention%' OR s.name LIKE '%monitor contention%'
ORDER BY s.dur DESC
LIMIT 10;

6.3 卡顿时间分布

SELECT 
    CASE 
        WHEN dur < 1000000 THEN '<1ms'
        WHEN dur < 5000000 THEN '1-5ms'
        WHEN dur < 10000000 THEN '5-10ms'
        WHEN dur < 16667000 THEN '10-16.67ms'
        WHEN dur < 33333000 THEN '16.67-33.33ms (1-2帧)'
        ELSE '>33.33ms (严重卡顿)'
    END as duration_range,
    COUNT(*) as count,
    ROUND(100.0 * COUNT(*) / (SELECT COUNT(*) FROM slice), 2) as percentage
FROM slice
GROUP BY duration_range
ORDER BY MIN(dur);

七、常用 SQL 速查表

7.1 基础查询

#查询目的核心 SQL
1Trace 基本信息SELECT COUNT(*), MAX(ts)-MIN(ts) FROM slice
2进程耗时排名SELECT p.name, SUM(s.dur) FROM slice s JOIN thread_track tt ON s.track_id=tt.id JOIN thread t ON tt.utid=t.id JOIN process p ON t.upid=p.id GROUP BY p.id
3最耗时操作SELECT name, MAX(dur) FROM slice GROUP BY name
4长耗时操作SELECT * FROM slice WHERE dur > 10000000
5线程耗时SELECT t.name, SUM(s.dur) FROM slice s JOIN thread_track tt ON s.track_id=tt.id JOIN thread t ON tt.utid=t.id GROUP BY t.id
6Binder 分析SELECT * FROM slice WHERE category='binder'
7调度延迟SELECT * FROM sched WHERE dur > 10000000
8帧渲染SELECT * FROM slice WHERE name LIKE '%vsync%'

7.2 主线程与渲染

#查询目的核心 SQL
9RenderThread 耗时SELECT s.name, p.name, s.dur FROM slice s JOIN thread_track tt ON s.track_id=tt.id JOIN thread t ON tt.utid=t.id JOIN process p ON t.upid=p.id WHERE t.name='RenderThread'
10掉帧统计SELECT COUNT(*) FROM slice WHERE name LIKE '%DrawFrame%' AND dur > 16667000
11Handler 耗时SELECT * FROM slice WHERE name LIKE '%handler%'
12IO 耗时SELECT * FROM slice WHERE name LIKE '%read%' OR name LIKE '%write%'

7.3 ANR 与卡顿

#查询目的核心 SQL
13ANR WatchDogSELECT * FROM slice WHERE name LIKE '%ANR%'
14锁竞争SELECT * FROM slice WHERE name LIKE '%contention%'
15卡顿分布SELECT CASE WHEN dur > 16667000 THEN '卡顿' END, COUNT(*) FROM slice

八、重要限制说明

8.1 SQL 文件限制

❌ 错误做法(多个 SELECT):

-- analysis.sql - 会报错!
SELECT '查询1';
SELECT '查询2';  -- 多个 SELECT 报错

错误信息:

Result rows were returned for multiples queries. 
Ensure that only the final statement is a SELECT statement...

✅ 正确做法(单个 SELECT 或 UNION):

-- 只保留一个 SELECT
SELECT '查询1';

-- 或使用 UNION 合并
SELECT '查询1' as q UNION ALL SELECT '查询2';

8.2 JOIN 条件必须完整

❌ 错误(笛卡尔积):

-- 错误!所有结果都一样
SELECT p.name, SUM(s.dur) 
FROM slice s 
JOIN process p        -- 缺少 ON 条件
GROUP BY p.id;

✅ 正确(完整 JOIN 链):

-- 正确!结果准确
SELECT p.name, SUM(s.dur) 
FROM slice s
JOIN thread_track tt ON s.track_id = tt.id
JOIN thread t ON tt.utid = t.id
JOIN process p ON t.upid = p.id
GROUP BY p.id;

8.3 保存结果到文件

./trace_processor_shell trace.pftrace -q query.sql > result.csv

九、性能优化建议总结

问题数据严重程度建议
threadMain 卡顿最大 175.71ms🔴 严重需深入分析代码
RenderThread 掉帧40% 掉帧率🔴 严重优化绘制逻辑
Binder 延迟平均 28ms🟡 中等改为异步调用
Handler 消息最大 13ms🟢 轻微持续监控

参考:

  • Perfetto 文档:https://perfetto.dev/docs/
  • SQL 表参考:https://perfetto.dev/docs/analysis/sql-tables

原文地址:
https://mp.weixin.qq.com/s/_bMe-BjwaiLzceI4_DhnPw

更多framework实战开发干货,定期输出相关干货,请关注下面“千里马学框架”

Perfetto实战:用SQL分析AI Infra性能瓶颈 性能分析是系统调优的关键环节。当应用出现“一切正常却响应缓慢”的疑难问题时,开发者需要一种能统览内核调度、进程线程状态与硬件事件的全链路追踪工具。Perfetto作为Google开源的下一代系统性能分析平台,通过ftrace采集内核事件,以protobuf高效存储trace数据,并借助trace_processor将数据导入SQLite,支持用SQL语句灵活查询和聚合。这种设计让性能分析从肉眼观察时间线升级为数据化检索,极大提升定位效率。在AI Infra场景中,无论是Android端侧推理还是Linux服 阅读详情

相关推荐

深入Linux调度分析:Perfetto实战与性能优化指南

本文深入探讨了Perfetto工具在Linux调度分析和性能优化中的应用。作为Google推出的全系统跟踪工具,Perfetto凭借其长时间记录能力和强大的SQL分析引擎,成为解决调度问题的利器。文章详细介绍了环境搭建、实战案例分析以及高级优化技巧,帮助开发者高效诊断和优化Linux系统性能问题。

weixin_29214335的博客 364

Perfetto与AI结合:如何用AI优化系统性能分析

在系统性能优化领域,Perfetto已经成为了一个强大的工具,能够提供详细的跟踪数据。但面对海量的性能数据,如何快速准确地找出问题点并给出优化建议,仍然是一个挑战。最近我尝试将AI技术与Perfetto结合,开发了一个智能分析工具,效果出乎意料的好,今天就来分享一下这个经验。通过自动化分析和智能建议,我们可以更高效地优化系统性能,让开发人员把精力集中在更有创造性的工作上。平台内置的AI辅助编程功能也帮了不少忙,特别是在数据处理和模型调优阶段给出了很多有用的建议。在开发这个工具的过程中,我发现。

CrystalwaveEagle34的博客 766

Perfetto实战指南:AI训练性能瓶颈的精准定位与优化方案

在AI基础设施和MLOps领域,GPU利用率不达标往往是表象,真正的问题常隐藏在CPU调度、磁盘I/O与锁竞争等系统级细节中。性能分析工具Perfetto作为谷歌开源的系统追踪平台,不仅局限于Android,在Linux服务器上同样能提供全链路的事件录制与回放能力。它基于ftrace、perf_event与用户态打点,将每个线程的调度、等待与运行状态转化为可查询的时序数据,配合Trace Processor的SQL分析引擎,能将瓶颈精确到具体进程和线程。通过掌握Perfetto的采集配置、权限处理与后台录制

weixin_29295541的博客 298

基于 Perfetto 与 AI 的 Android 性能自动化诊断方案

本文介绍了一种自动化智能性能诊断方案,用于快速定位Android项目中的UI卡顿问题。

lixiong0713的博客 717

Perfetto Trace 分析实战:用 Harness Engineering 打造稳定可用的 AI Agent

在大模型与业务系统之间,真正决定AI Agent稳定性的往往不是模型本身的智商,而是那套连接二者的“工程骨架”——Harness Engineering。其核心原理是将模型视为只有大脑而没有手脚的个体,通过工具封装、上下文管理、执行循环和反馈机制,让模型能够安全、高效地调用外部能力。这项技术最大的价值在于,它能把不可靠的模型决策限制在可控的边界内,从而降低试错成本、提升工程交付质量。在性能分析与系统调优场景中,面对Perfetto这类复杂Trace工具,工程师可以借助AI Agent自动完成进程筛选、指标关

weixin_42523543的博客 138

基于C#的ASP.NET开发的党史学习网站课设

开展党史学习教育,就是要以史为镜、以史明志,把苦难辉煌的过去、日新月异的现在、光明宏大的未来贯通起来,在鉴往知来中砥砺前行,在乱云飞渡中把准航向,在凝心聚力中团结奋斗,共同创造新的历史伟业。登陆按钮与数据库进行连接,逻辑实现是如图3.1.3所示,自己定义一个SQL查询语句,将账号、密码放入SQL查询语句中,用sqlDataReader.HasRows语句进行逐一比较,找出结果,将用户名存入session并调用cookies,如果结果存在就关闭数据库,进行数据跳转,并弹出登陆成功的提示框,并关闭数据库。

m0_62408555的博客 975

Perfetto如何用AI优化Android性能分析

最近在优化公司APP时,发现手动分析Perfetto的trace文件实在太费时间,于是尝试用AI自动化这个流程,效果出乎意料的好。传统使用Perfetto时,开发者需要手动查看各种图表,像侦探一样寻找性能问题的蛛丝马迹。我选择Python作为开发语言,因为它有成熟的Perfetto解析库,而且AI生态丰富。最方便的是不需要配置任何环境,打开浏览器就能开始编码,对于这种需要快速验证想法的项目再合适不过了。AI不仅指出了问题,还建议使用更高效的图片格式和预加载策略。按照建议优化后,冷启动时间减少了23%。

AmberLeopard26的博客 863

麒麟v10(ky10.x86_64)升级——openssl-3.2.2、openssh-9.8p1

执行命令: make -j 4 && make install 这里要等待一段时间,等待编译完成。执行命令: ./configure --prefix=/usr/local/src/zlilb。执行命令: ./config --prefix=/usr/local/src/openssl。执行命令: make -j 4 && make test && make install。执行命令: make -j 4 && make install。执行命令: /etc/init.d/sshd restart。

X_yufei的博客 7429

「快马 + Perfetto:AI 驱动的性能分析与一键优化实践」

对于需要持续运行的服务类项目,平台的部署功能特别实用。我测试的一个Node.js服务,通过自动生成的优化方案,QPS直接从120提升到了210,整个过程不到10分钟。这套组合拳特别适合中小团队——既获得了专业级性能工具的能力,又不需要搭建复杂分析环境。特别是他们的AI对话区,直接描述性能问题就能获得定制化建议,对我这种非专业运维人员特别友好。最近在研究性能优化工具时,发现Google开源的Perfetto确实是个宝藏。的AI能力,可以打造出更智能的性能优化方案。:编辑代码时就能看到当前函数的性能评分。

GoldEagle19的博客 622

华为无线AP+AC(ensp)

VLAN 100--192.168.100.0/24为AP的管理IP地址VLAN10--192.168.10.0/24为无线用户获取的IP地址在DHCP Server(LSW3)上查看地址分配情况。

abcdlalal的博客 1万+

zynq-7000学习笔记(八)——USB摄像头图像采集

PC平台:WINDOWS 10 64位 Xilinx设计开发套件:Xilinx_vivado_sdk_2015.4 开发板:Zed Board USB摄像头:罗技 C270(720P) linux源码:2016_R1 一、配置linux,支持UVC       如果是中星微的ZC3XX系列的芯片,则要进到GSPCA把ZC3XX的驱动选上

luotong86的专栏 1万+

OpenPerfetto — AI Agent + Trace 分析的尝试与经验分享

OpenPerfetto:AI与Trace分析的创新融合工具 摘要:OpenPerfetto是一款将AI Agent深度集成到Perfetto Trace分析工具中的开源项目,旨在解决性能分析工作中的两大痛点:AI独立分析的可信度问题和传统Trace工具的操作繁琐性。该项目采用前后端分离架构,前端基于Perfetto UI实现Agent核心模块,后端构建Skills系统和LLM代理,实现AI Agent对于Trace的智能分析。

engine1016的博客 1221

继电器管理策略(二)

介绍了电池管理系统中的继电器管理,包含控制和诊断

manjixingkong1234的专栏 419

Perfetto TraceProcessor实战指南:从零掌握性能分析利器

Perfetto作为Google开源的生产级性能追踪与分析平台,其TraceProcessor组件是连接原始追踪数据与深度分析的关键桥梁。无论你是Android开发者排查应用卡顿,还是后端工程师分析分布式系统性能,TraceProcessor都能提供SQL级别的灵活查询能力,将复杂的性能数据转化为可操作的洞察。本文面向所有需要深入理解系统行为的开发者,提供从入门到精通的实战指南。 ## 核心概念

gitblog_01136的博客 993

Zemax与Matlab交互:双胶合优化详细流程

Zemax与Matlab交互:双胶合优化详细流程

weixin_72050316的博客 630

倍福--TwinSAFE功能块的使用

在安全模块的程序设计中,输入变量取反,或者把PLC的变量连接到安全的功能块程序中, 操作流程 1.1. 功能块输出取反 例如修改IN,右击属性,然后可在Single-Channel选项中选择是NO还是NC的输入信号。 1.2. PLC标准变量作为安全程序的输入 1.2.1. 建立两个PLC变量 1.2.2. 安全程序区创建变量 1.2.3. 功能块变量链接 首先,PLC变量不能直接连到Estop功能块的输入变量中,否则会报错,但PLC可以连接到SafeAnd这些功能块,然后再转出来,如下所示

weixin_41883890的博客 5315

Perfetto性能分析终极指南:从零到精通的系统级追踪解决方案

在当今复杂的软件系统中,性能问题往往是隐藏最深、最难定位的"幽灵"。当你的应用出现卡顿、内存泄漏或CPU性能瓶颈时,传统的调试工具往往力不从心。Perfetto性能分析工具正是为解决这一痛点而生,它提供了从系统内核到应用层的全方位追踪能力,成为Android、Linux和Chrome系统的默认追踪系统。 Perfetto不仅仅是一个简单的性能监控工具,它是一个完整的生产级客户端追踪、性能分析和系

gitblog_00165的博客 629

PCL 八叉树的使用

八叉树(Octree)是一种空间划分的数据结构,广泛应用于三维点云的处理和分析。八叉树通过将空间递归地划分为八个子区域,可以有效地组织和索引三维点数据,提升点云的查询、降采样和配准等操作的效率。

纵马踏花向自由 1659

3大突破性策略:让Perfetto性能分析从被动监控到主动优化的跨越式升级

在现代复杂软件系统的性能分析领域,Perfetto已经从一个单纯的追踪工具演变为一个完整的性能洞察平台。这个由Google开发的开源项目不仅提供了生产级的客户端追踪、性能分析和可视化能力,更重新定义了我们对系统性能的理解方式。从移动应用到桌面软件,从游戏引擎到机器学习框架,Perfetto正在改变开发者诊断性能瓶颈的工作流程。 [![Perfetto架构示意图](https://raw.gitc

gitblog_00013的博客 436

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Perfetto深度解析:5大核心功能如何重塑现代性能分析体验

在当今复杂的软件系统中,性能分析不再是可选项,而是确保用户体验和系统稳定性的关键环节。Perfetto作为Google开源的生产级客户端追踪、性能分析和系统诊断工具套件,正在重新定义性能监控的标准。这个强大的平台不仅支持Android、Chrome等大型项目,还为企业级应用提供了完整的端到端分析解决方案。 ## 项目核心价值与定位 Perfetto的核心理念是"全栈可视化"——从内核级的系统调

gitblog_00016的博客 584

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

技术深度解析:Perfetto TraceProcessor架构设计与企业级性能分析实战指南

**Perfetto TraceProcessor**作为Google开源的高性能追踪分析引擎,为现代软件系统提供了生产级的性能数据查询与分析能力。这一企业级工具解决了大规模分布式系统中性能监控、瓶颈诊断和优化决策的核心技术挑战,通过创新的SQL化查询引擎和列式存储架构,实现了对复杂追踪数据的高效处理与深度分析。🔧⚡️ ## 技术挑战全景图:企业级性能分析的多维复杂性 在现代软件架构中,性能

gitblog_01198的博客 768

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Android性能测试自动化:Perfetto+AI诊断方案实践

性能测试中,trace分析常被人工采集和经验判断所拖累,导致效率低下。Perfetto作为新一代系统性能分析工具,通过对内核调度、进程状态、用户态切片等事件进行采集,并经trace_processor转换为结构化SQL数据,为自动化分析提供了坚实底座。在此基础上,结合人工智能技术,将SQL提取的关键指标作为输入,让AI完成归因解释,能够有效将原始trace中的高维噪声降为可读的诊断结论。这样的自动化诊断链路适用于Android应用启动缓慢、掉帧、周期性卡顿等性能问题的持续测试与回归拦截,帮助团队减少重复劳动

weixin_33521678的博客 226

从零构建Perfetto:揭秘跨平台性能分析框架的架构与实现

本文深入解析Perfetto跨平台性能分析框架的架构与实现,重点介绍其模块化设计、低开销跟踪技术和Linux调度问题优化。通过核心架构解析、与systrace对比及实战案例,展示Perfetto如何成为现代系统性能分析的事实标准,帮助开发者高效诊断性能瓶颈。

soda5的博客 892

使用AI分析trace

之前有记录过trace分析步骤AI时代,借助AI工具,我们能更高效地分析trace官网。

叶辞树的博客 194
上一篇: 干货分享:sf中Layer泄露问题分析修复实战方法--直播总结
下一篇: 安卓车载手机Framework 面试真题汇总(fw/性能优化/多屏/Input/Binder/wms)-近期v搜集ip学员汇总
千里马学框架
博客等级 码龄6年 1万+粉丝 651原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值