Anytrace线下性能归因

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. APM线下性能归因实践 (Anytrace) 字节跳动 / 刘成清
2.
3. 课程收益 “降维” 分析App性能 iOS “后⻔” 服务 常⻅性能问题归因手段
4. 大纲 1. 线下工具的前世今生 2. 性能归因的降本增效 3. 原理分析 4. 总结回顾
5. 线下工具的前世今生 真实用户 Cloud 线上 APM平台 业务埋点 线下 PC工具 Debug SDK 性能归因 内部模拟 用户 自动化测试
6. 线下工具的前世今生
7. 线下工具的前世今生 采集 生产 天 专家 分钟 小白 消费 + 归因
8. 线下工具的前世今生 自动归因 消费 数据展现 Perfetto 采集 生产 ADB Instru ments kTrace 人工 早期 Appiu m Monkey 现在 ADB kTrace Bytest FastBot ?
9. 线下工具的前世今生 ? & t1 t2 t3 t4 main method1 method2 block t5 t6
10. 线下工具的前世今生 直接定位原因 基于发展史,我们需要什么样的线下工具 ? 数据足够详细 尽可能图形化数据 没有使用⻔槛 图表简单易读 减少使用限制
11. 大纲 1. 线下工具的前世今生 2. 性能归因的降本增效 3. 原理分析 4. 总结回顾
12. 性能归因的降本增效 Store
13. 性能归因的降本增效 部⻔:70+ 疑难问题:25+
14. 性能归因的降本增效 消费 采集 数据生产 清洗&聚类 卡顿 内存 电量 火焰图&调用栈 引用树 图表联动 DXTMsg ktrace MemoryGraph AppleSmart Battery ADB profilo Rapeal Thor 自动化测试 人工测试 Fastbot
15. 归因的降本增效 卡顿问题 哪里发生卡顿?定位到代码 为啥导致卡顿?辅助信息 • 线程快照 • 线程状态&优先级 • 毫秒级CPU使用率 火焰图& 线程甘特图
16. 归因的降本增效 (卡顿) 发现卡顿 查日志 工具 埋点 重打包 复现卡顿 分析数据 归因
17. 归因的降本增效 (卡顿—慢函数) • 主线程sqlite3_step • 耗时4.43s
18. 归因的降本增效 (卡顿—慢函数—锁等待) Blocked 8.792ms and runable by thread 0x9971 in Lark Block by NSLock
19. 归因的降本增效 (卡顿—慢函数—资源抢占) 卡顿——资源抢占: • • • 软中断 高优先级线程抢占主线程 优先级反转
20. 归因的降本增效 (卡顿—低消耗高频) 卡顿——低消耗高频函数: • • 火焰图无平顶函数 各函数调用符合预期
21. 归因的降本增效 (卡顿—低消耗高频) 卡顿——低消耗高频函数: • • 火焰图无平顶函数 各函数调用符合预期
22. 归因的降本增效 (卡顿—类预加载) JVMTI • EventClassFileLoadHook • EventClassLoad • EventClassPrepare Preload Class
23. 归因的降本增效 (卡顿—启动) • 横向对比 • 数据波动 • 监控粒度
24. 归因的降本增效 内存消耗在哪? 内存问题 定位到代码或资源 • 内存节点与引用关系 • 节点与代码或资源的映射关系 引用树& 各维度聚类
25. 归因的降本增效 (内存) MemoryGraph Link Map 节点内存 节点引用边 Java:dump hprof Native:Raphael 内存归属
26. 归因的降本增效 (内存) 聚类 排序 补充 信息 • 某一场景内存居高不下 • 进入某一场景后,内存 “激增” 对比
27. 归因的降本增效 (内存)
28. 归因的降本增效 (内存) Bitmap • 是否使用 • 图片还原
29. 归因的降本增效 (内存) 对比 • 放大变量 • 聚焦范围
30. 归因的降本增效 如何精准测量? 功耗问题 各类图表 定位到代码 • 系统维度统计电量消耗 • 多指标归因能力联动
31. 归因的降本增效 (功耗) sysdiagnosis 电量 iPhone AppleSmart Battery 电流 华为 小米 Oppo Thor 电压
32. 归因的降本增效 (功耗)
33. 归因的降本增效 (数据生产—Fastbot)
34. 大纲 1. 线下工具的前世今生 2. 性能归因的降本增效 3. 原理分析 4. 总结回顾
35. 原理分析 火焰图 = Hook: 插桩: 采样: + 线程 快照 JVMTI systrace profilo fishhook llvm ktrace 符号化
36. 原理分析 The ktrace utility enables kernel trace logging for the specified pro-cesses. Kernel trace data is logged to the file ktrace.out. The kernel operations that are tracedincludesystem calls, namei translations, sig-nal processing, and I/O.
37. 原理分析 wait_result_t thread_block_reason(args) { thread_t self = current_thread(); if (self->state & ~(TH_RUN | TH_IDLE)) { KERNEL_DEBUG_CONSTANT_IST(KDEBUG_TRACE, MACHDBG_CODE(DBG_MACH_SCHED, MACH_BLOCK), reason, VM_KERNEL_UNSLIDE(continuation), 0, 0, 0); } // 切换其他线程 do { new_thread = thread_select(self, processor, &reason); } while (!thread_invoke(self, new_thread, reason)); sched_prim.c Thread Event code } boolean_t thread_unblock(thread_t thread, wait_result_t wresult) { KERNEL_DEBUG_CONSTANT_IST(KDEBUG_TRACE, MACHDBG_CODE(DBG_MACH_SCHED, MACH_MAKE_RUNNABLE) | DBG_FUNC_NONE, (uintptr_t)thread_tid(thread), thread->sched_pri, thread->wait_result, sched_run_buckets[TH_BUCKET_RUN], 0); } Kernel Debug
38. 原理分析 static uint64_t kptimer_fire(args) { // ... if (sample_flags & SAMPLE_FLAG_NON_INTERRUPT) { // outside of interrupt context, backtrace the current thread kperf_backtrace_sample(&(sbuf->kcallstack), context); } else { kperf_kcallstack_sample(&(sbuf->kcallstack), context); } } void kperf_backtrace_sample(args) { // ... kernel_debug(PERF_CS_BACKTRACE | DBG_FUNC_START, 1); cs->kpkc_nframes = backtrace_frame(cs->kpkc_word_frames, cs->kpkc_nframes - 1, context->starting_fp, &trunc); kernel_debug(PERF_CS_BACKTRACE | DBG_FUNC_END, cs->kpkc_nframes); } kperf / kptimer.c timer_fire backtrace_sample kernel_debug
39. 原理分析 62078 Jan,2022
40. 原理分析 libimobiledevice adb idb tidevice Jan,2022
41. 原理分析 USBMuxd usb / wifi • • Lockdownd socket 用于在USB协议上实现多路TCP连接 将USB通信抽象为TCP通信 DeveloperDiskImage
42. 原理分析 USBMuxd usb / wifi Lockdownd DeveloperDiskImage socket • • iOS系统上: /System/Library/LaunchDaemons lockdownd 会创建一个 TCP socket,端口号为 62078
43. 原理分析 USBMuxd usb / wifi ? Lockdownd socket ClassName DeveloperDiskImage DTXMessage + SelectorName + Arguments
44. 原理分析 USBMuxd usb / wifi Lockdownd socket DeveloperDiskImage DTXMessage DTXMessageParser waitForMoreData: incrementalBu er DTXMessage invokeWithTarget: replyChannel: validator runningProcesses
45. 原理分析 USBMuxd usb / wifi • Lockdownd socket DeveloperDiskImage DTXMessage /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
46. 原理分析 USBMuxd usb / wifi • Lockdownd socket DeveloperDiskImage DTXMessage /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
47. 原理分析 USBMuxd Lockdownd DeveloperDiskImage DTXMessage _requestChannelWithCode: identifier: NativeClass Channel ServiceID Channel code DTXMessage Selector & Arguments Channel code DTXMessage Function Return Channel code Jan,2022
48. 原理分析 start server “Instruments.remoteserver” published capabilities iPhone 1 iPhone 2 services. activitytracetap services. sysmontap services. graphics.opengl services. coreprofile device monitor code & channel start server “mobile_image_mounter” dxt message is mount mount image parse plist data CPU GPU Net parse ktrace data Battery Fps Stack
49. 大纲 1. 线下工具的前世今生 2. 性能归因的降本增效 3. 原理分析 4. 总结回顾
50. 总结回顾 前世今生 降本增效 线下工具的发展目标 对比Instruments与Perfetto的优势 采集 消费 卡顿分析 快照采集的另一种方式ktrace 内存分析 62078后⻔的工作原理 功耗分析 数据 生产 原理分析 Fastbot
51. 总结回顾 让工具变得更简单,使归因不再有⻔槛
52. 鸣谢: • 字节的AppHealth团队及各业务方团队的技术方案与落地实践 • ArchSummit主办方及出品人老师给予的平台与指导意⻅ Diggo Anytrace
53.
54.

Home - Wiki
Copyright © 2011-2024 iteam. Current version is 2.139.0. UTC+08:00, 2024-12-23 10:19
浙ICP备14020137号-1 $Map of visitor$