diff --git a/study/debug/tools/perfetto/README.md b/study/debug/tools/perfetto/README.md index 569b3b3..dca3cb6 100755 --- a/study/debug/tools/perfetto/README.md +++ b/study/debug/tools/perfetto/README.md @@ -1,16 +1,20 @@ --- -title: 使用 Hexo 搭建 GitHub Page 博客(一) -date: 2018-09-02 18:40 +title: Perfetto for linux-使用 Perfetto 分析调度问题 +date: 2020-11-21 22:40 author: gatieme -tags: hexo +tags: + - scheduler + - linux + - debug categories: - - hexo -thumbnail: -blogexcerpt: 博文摘要 + - scheduler +thumbnail: +blogexcerpt:
Perfetto 工具是 Android 下一代全新的统一的 trace 收集和分析框架, 在 Android 9.0(API级别28)或更高版本的设备上, 可以使用 System Tracing 的 System App 在设备上记录系统跟踪, 可以抓取平台和app的 trace 信息, 是用来取代 systrace 的, 但 systrace 由于历史原因也还会一直存在, 并且 Perfetto 抓取的 trace 文件也可以同样转换成 systrace 视图. --- + | CSDN | GitHub | Hexo | |:----:|:------:|:----:| | [Aderstep--紫夜阑珊-青伶巷草](http://blog.csdn.net/gatieme) | [`AderXCoding/system/tools`](https://github.com/gatieme/AderXCoding/tree/master/system/tools) | [gatieme.github.io](https://gatieme.github.io) | @@ -40,7 +44,7 @@ Perfetto 工具是 Android 下一代全新的统一的 trace 收集和分析框 ## 1.2 Perfetto 优点 ------- -1. 支持 Android 和 Linux 上的全系统跟踪, 可以在线抓取长时间(可达数小时)的 trace, 子系统[跟踪处理器](https://perfetto.dev/docs/analysis/trace-processor) 专门设计用于将数小时的跟踪数据有效地保存到本地中, 并基于流行的SQLite查询引擎公开SQL查询接口支持 SQL 查询. 这样就可以在后台开启, 让它一直抓取 trace 了, 特别适用于那种复现概率很低, 又比较严重的性能问题. +1. 支持 Android 和 Linux 上的全系统跟踪, 可以在线抓取长时间(可达数小时)的 trace, 子系统[跟踪处理器](https://perfetto.dev/docs/analysis/trace-processor) 专门设计用于将数小时的跟踪数据有效地保存到本地中, 并基于流行的SQLite查询引擎公开SQL查询接口支持 SQL 查询. 这样就可以在后台开启, 让它一直抓取 trace 了, 特别适用于那种复现概率很低, 又比较严重的性能问题. 2. Perfetto 具有很好的可扩展性, 它除了支持标准的 tracepoints(例如CPU调度信息, 内存信息等)之外, 还可以监听系统的多种信息, 比如 procfs 以及 sysfs 接口等; 还可以通过 atrace HAL 层扩展, 在 Android P当中, Google新增加了一个 atrace HAL 层, atrace 进程可以调用这个HAL的接口来获取当前的扩展信息, 比如添加用于记录电池和电量使用的统计信息, 程序的执行路径等. 相关代码可见 [Google 提交](https://android-review.googlesource.com/c/platform/frameworks/native/+/770934), 这样如果需要扩展 tracepoints 的话, 就可以按照 graphic 的示例添加即可. @@ -80,7 +84,7 @@ adb shell setprop persist.traced.enable 1 ## 2.2 抓取 trace ------- -跟 systrace 一样, Perfetto 为我们提供了两种方式来抓取 trace 日志. +跟 systrace 一样, Perfetto 为我们提供了两种方式来抓取 trace 日志. 1. 通过 [Perfetto UI](https://ui.perfetto.dev/#!/) 中的记录页面, 参照 [Quickstart: Record traces on Android](https://perfetto.dev/docs/quickstart/android-tracing). @@ -233,6 +237,6 @@ Perfetto 提供了一个兼容的 UI 来打开 原来的 systrace, 参见 [catap * 本作品/博文 ( [AderStep-紫夜阑珊-青伶巷草 Copyright ©2013-2017](http://blog.csdn.net/gatieme) ), 由 [成坚(gatieme)](http://blog.csdn.net/gatieme) 创作. -* 采用知识共享许可协议知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可. 欢迎转载、使用、重新发布, 但务必保留文章署名[成坚gatieme](http://blog.csdn.net/gatieme) ( 包含链接: http://blog.csdn.net/gatieme ), 不得用于商业目的. +* 采用知识共享许可协议知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可. 欢迎转载、使用、重新发布, 但务必保留文章署名[成坚gatieme](http://blog.csdn.net/gatieme) ( 包含链接: http://blog.csdn.net/gatieme ), 不得用于商业目的. * 基于本文修改后的作品务必以相同的许可发布. 如有任何疑问, 请与我联系. diff --git a/study/debug/tools/systrace/README.md b/study/debug/tools/systrace/README.md index ff700a7..3c79767 100755 --- a/study/debug/tools/systrace/README.md +++ b/study/debug/tools/systrace/README.md @@ -1,10 +1,48 @@ +--- + +title: Systrace for Linux-使用 systrace 分析 linux & android 的调度问题 +date: 2020-11-21 20:22 +author: gatieme +tags: + - scheduler + - linux + - debug +categories: + - scheduler +thumbnail: +blogexcerpt:
笔者在日常内核性能优化的工作中, 主要涉及 终端(Android) 和 服务器(Server) 和 嵌入式 (RTOS) 等多个场景, 在终端场景下做内核开发和调度优化的时候, 经常会使用 atrace、systrace 等工具, 在惊叹于 google 的技术能力, 也时长在想这些工具是否可以用于服务器以及嵌入式领域.

使用 systrace 可以抓取到 sched、irq 以及帧的信息, 帧的信息我们服务器和嵌入式领域肯定是不会有的, 但是 sched、irq 等信息, 对于服务器领域也同样有意义. 如果能够在这些场景使用 systrace, 对于我们性能调优是有重大意义的. + + +--- + + +| 日期 | 作者 | GitHub| CSDN | BLOG | +| ------- |:-------:|:-------:|:-------:|:-------:| +| 2020-11-21 | [gatieme](https://blog.csdn.net/gatieme) | [AderXCoding](https://github.com/gatieme/AderXCoding/tree/master/system/tools/glibc/001-version) | [Linux(Ubuntu/CentOS) 下查看 GLIBC 版本](https://blog.csdn.net/gatieme/article/details/108945425) | [Linux(Ubuntu/CentOS) 下查看 GLIBC 版本](https://oskernellab.com/2020/10/06/2020/1006-0001-Linux_get_glibc_version/)| + + +
+ + + +本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作 + +知识共享许可协议 + +因本人技术水平和知识面有限, 内容如有纰漏或者需要修正的地方, 欢迎大家指正, 鄙人在此谢谢啦 + +**转载请务必注明出处, 谢谢, 不胜感激** + +
+ + # 1 问题来源 ------- -笔者在日常内核性能优化的工作中, 主要涉及 终端(Android) 和 服务器(Server) 和 嵌入式 (RTOS) 等多个场景, 在终端场景下做内核开发和调度优化的时候, 经常会使用 atrace、systrace 等工具, 在惊叹于 google 的技术能力, 也时长在想这些工具是否可以用于服务器以及嵌入式领域. +笔者在日常内核性能优化的工作中, 主要涉及 终端(Android) 和 服务器(Server) 和 嵌入式 (RTOS) 等多个场景, 在终端场景下做内核开发和调度优化的时候, 经常会使用 atrace、systrace 等工具, 在惊叹于 google 的技术能力, 也时长在想这些工具是否可以用于服务器以及嵌入式领域. + - 使用 systrace 可以抓取到 sched、irq 以及帧的信息, 帧的信息我们服务器和嵌入式领域肯定是不会有的, 但是 sched、irq 等信息, 对于服务器领域也同样有意义. 如果能够在这些场景使用 systrace, 对于我们性能调优是有重大意义的. systrace 的一些信息如下图所示: @@ -115,3 +153,16 @@ trace-viewer 上显示的是日志中以抓取开始时间点为基准的相对 [4.1C: Using the Systrace and dumpsys tools](https://google-developer-training.github.io/android-developer-advanced-course-practicals/unit-2-make-your-apps-fast-and-small/lesson-4-performance/4-1c-p-systrace-and-dumpsys/4-1c-p-systrace-and-dumpsys.html) [Ftrace 实现原理与开发实践](http://tinylab.org/ftrace-principle-and-practice) + + + +
+ +* 本作品/博文 ( [AderStep-紫夜阑珊-青伶巷草 Copyright ©2013-2017](http://blog.csdn.net/gatieme) ), 由 [成坚(gatieme)](http://blog.csdn.net/gatieme) 创作. + +* 采用知识共享许可协议知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可. 欢迎转载、使用、重新发布, 但务必保留文章署名[成坚gatieme](http://blog.csdn.net/gatieme) ( 包含链接: http://blog.csdn.net/gatieme ), 不得用于商业目的. + +* 基于本文修改后的作品务必以相同的许可发布. 如有任何疑问,请与我联系. + +* **转载请务必注明出处, 谢谢, 不胜感激** +
diff --git a/study/kernel/01-process/05-schedule/07-cfs/08-wake_affine/README.md b/study/kernel/01-process/05-schedule/07-cfs/08-wake_affine/README.md index 01a4b82..6bc7a41 100644 --- a/study/kernel/01-process/05-schedule/07-cfs/08-wake_affine/README.md +++ b/study/kernel/01-process/05-schedule/07-cfs/08-wake_affine/README.md @@ -1,7 +1,10 @@ title: Linux CFS调度器之唤醒WAKE_AFFINE 机制--Linux进程的管理与调度(三十一) date: 2020-05-24 15:58 author: gatieme -tags: kernel +tags: + - linux + - kernel + - scheduler categories: - scheduler thumbnail: diff --git a/study/kernel/02-memory/00-code/layout/layout.c b/study/kernel/02-memory/00-code/layout/layout.c index 32e3d2e..1755c11 100644 --- a/study/kernel/02-memory/00-code/layout/layout.c +++ b/study/kernel/02-memory/00-code/layout/layout.c @@ -39,7 +39,6 @@ void show_layout(void) #define MLM(b, t) b, t, ((t) - (b)) >> 20 #define MLG(b, t) b, t, ((t) - (b)) >> 30 #define MLK_ROUNDUP(b, t) b, t, DIV_ROUND_UP(((t) - (b)), SZ_1K) -#if 0 pr_notice("Virtual kernel memory layout:\n"); #ifdef CONFIG_KASAN pr_notice(" kasan : 0x%16lx - 0x%16lx (%6ld GB)\n", @@ -75,7 +74,6 @@ void show_layout(void) pr_notice(" memory : 0x%16lx - 0x%16lx (%6ld MB)\n", MLM((unsigned long)phys_to_virt(SYMS_FUN("memblock_start_of_DRAM")), (unsigned long)high_memory)); -#endif //pr_notice("KIMAGE_VADDR: 0x%16lx\n", KIMAGE_VADDR); pr_notice("PAGE_OFFSET : 0x%16lx\n", PAGE_OFFSET); #undef MLK