update scheduler blog

This commit is contained in:
Cheng Jian
2020-11-26 21:25:22 +08:00
parent 8b9a9674b5
commit d6c32a2025
4 changed files with 70 additions and 14 deletions
+13 -9
View File
@@ -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: <br>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) 创作.
* 采用<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="知识共享许可协议" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议</a>进行许可. 欢迎转载、使用、重新发布, 但务必保留文章署名[成坚gatieme](http://blog.csdn.net/gatieme) ( 包含链接: http://blog.csdn.net/gatieme ), 不得用于商业目的.
* 采用<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="知识共享许可协议" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议</a>进行许可. 欢迎转载、使用、重新发布, 但务必保留文章署名[成坚gatieme](http://blog.csdn.net/gatieme) ( 包含链接: http://blog.csdn.net/gatieme ), 不得用于商业目的.
* 基于本文修改后的作品务必以相同的许可发布. 如有任何疑问, 请与我联系.
+53 -2
View File
@@ -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: <br>笔者在日常内核性能优化的工作中, 主要涉及 终端(Android) 和 服务器(Server) 和 嵌入式 (RTOS) 等多个场景, 在终端场景下做内核开发和调度优化的时候, 经常会使用 atrace、systrace 等工具, 在惊叹于 google 的技术能力, 也时长在想这些工具是否可以用于服务器以及嵌入式领域.<br><br>使用 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/)|
<br>
本作品采用<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议</a>进行许可, 转载请注明出处, 谢谢合作
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="知识共享许可协议" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a>
因本人技术水平和知识面有限, 内容如有纰漏或者需要修正的地方, 欢迎大家指正, 鄙人在此谢谢啦
**转载请务必注明出处, 谢谢, 不胜感激**
<br>
# 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)
<br>
* 本作品/博文 ( [AderStep-紫夜阑珊-青伶巷草 Copyright ©2013-2017](http://blog.csdn.net/gatieme) ), 由 [成坚(gatieme)](http://blog.csdn.net/gatieme) 创作.
* 采用<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="知识共享许可协议" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议</a>进行许可. 欢迎转载、使用、重新发布, 但务必保留文章署名[成坚gatieme](http://blog.csdn.net/gatieme) ( 包含链接: http://blog.csdn.net/gatieme ), 不得用于商业目的.
* 基于本文修改后的作品务必以相同的许可发布. 如有任何疑问,请与我联系.
* **转载请务必注明出处, 谢谢, 不胜感激**
<br>
@@ -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:
@@ -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