自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

悟空明镜

寻道在前方

  • 博客(53)
  • 收藏
  • 关注

原创 Linux Kernel调度器学习路线图

按照本人最近的学习路线图,如下:scheduler若干个基础结构体简介scheduler初始化CFS调度算法基本思想CFS调度算法 bandwidth throttlecpu拓扑和调度域调度组的建立和初始化fork/clone等方式创建的进程如何被调度的被wake_up_process之后的进程是如何被调度的CFS调度算法怎么计算进程(PELT算法)/cpu/系统 利用率的EA...

2020-01-16 07:05:53 5517 3

原创 [big/little system scheduler]五. big.LITTLE Technology

概述本文涉及的内容如下:为何需要big.little 技术如何配置big.littlebig.little系统如何调度为何需要big.little技术Modern software stacks place conflicting requirements on mobile systems. On the one hand is a demand for very high performance for tasks such as games, while on the other is

2020-06-10 19:25:27 1394

转载 Linux内核tracepoints

文章转载: https://www.cnblogs.com/muahao/p/7999281.html具体的可以参考kernel的文章,路径如下:Documentation/trace里面的tracepoints.txt和tracepoint-analysis.txt。这里简要说明一下,举一个小例子,怎么样使用!内核中的每个tracepoint提供一个钩子来调用probe函数。一个tracepoint可以打开或关闭。打开时,probe函数关联到tracepoint;关闭时,probe函数不关联到tra

2020-06-03 18:32:23 1099

原创 [power]四. Power State Coordination Interface电源管理通用接口

The Power State Coordination Interface (PSCI) provides an OS agnostic method for implementing power management use cases where cores can be powered up or down. This includes:Core idle management.Dy...

2020-05-02 22:13:19 2553

原创 [power]三. Assembly language power instructions

ARM assembly language includes instructions that can be used to place the core in a low-power state. The architecture defines these instructions as hints, meaning that the core is not required to take...

2020-05-02 22:01:35 1016

原创 [power]一 Idle management

讲解ARM当前idle management的来龙去脉。

2020-05-01 23:16:48 1599

原创 [power]二. Dynamic voltage and frequency scaling(DVFS)简单概述

Many systems operate under conditions where their workload is variable. Therefore it is usefulto have the ability to reduce or increase the core performance to match the expected coreworkload. Clock...

2020-04-28 12:40:20 2743

原创 Analysis and Solution for Cpuidle Power Nightmare

在公司2019年上半年的kernel大会,需要每个组员准备一份PPT讲解碰到的疑难问题或者新思想等等之类的都可以。在debug CPU idle功耗的时候,发现CPU持续好几秒一直处于C1(WIFI)状态,功耗很高。所以下面的PPT就是讲解这部分内容的。内容概述涉及的内容如下:CPUidle governor当前两个governor ladder和menu的简单讲解power nigh...

2020-04-12 11:53:54 691

原创 DECLARE_STATIC_KEY_FALSE--static key学习记录

最近在看kernel5.4.26的调度器代码,看到下面的:static int select_task_rq_fair(struct task_struct *p, int prev_cpu, int sd_flag, int wake_flags) { struct sched_domain *tmp, *sd = NULL; int cpu =...

2020-03-31 13:39:59 1532

原创 Kernel space lock contention配置及其使用

概述本文涉及到的内容如下:kernel lock相关debug方式,比如lock耗时,拿不到lock,lock依赖等等trace的使用1.开启lock contenttion涉及到的config配置config LOCKDEP bool depends on DEBUG_KERNEL && TRACE_IRQFLAGS_SUPP...

2020-03-18 18:34:43 1936

原创 pr_emerg耗时,影响性能原理排查

概述本文涉及到的性能debug方式如下:ftrace的使用。lock contention/lockdep的使用。一、 问题来源以及debug思路“在调试 vdsp的dvfs,发现notify执行dvfs callback的时候callback中执行会很慢,两条log之间什么都不作,耗时都可能在8ms左右,固定cpu/ddr频率也不没效果。”debug思路如下:确认在何种情况下...

2020-02-24 18:18:14 2243

原创 2020新年愿望

愿望不多,一一列举如下:希望武汉新型冠状病毒能够尽快得到有效控制和消失希望自己身体快快好起来,最近几天发烧实在是感悟良多2020必须多锻炼和多吃水果希望家人和朋友都健康快乐总结为两句话送给自己:身体健康永远是革命的本钱把能努力的都努力好,最终等待命运垂青...

2020-01-22 17:44:24 665

原创 [scheduler]九. EAS如何根据能效为进程选择目标CPU

一、概述之前在讲解新创建进程和idle进程被wakeup之后如何被调度器调度的原理,有两个点没有分析的很清楚,就是在这个调度的过程中,如何选择一个cpu来执行调度实体。现在单独拎出来详细分析:如果EAS feature启用的话,执行函数流:select_energy_cpu_brute如果EAS feature没有启用的话,执行传统的函数流:find_idlest_cpu简单的流...

2020-01-16 07:08:19 5363 1

原创 [scheduler]11. 主调度器(__schedule()函数)如何工作的

一 概述我们经常在创建线程执行函数/worker执行函数,定时器执行函数等等情况下,会经常看到schedule函数的调用,这是进程上下文,还有中断上下文的调度,即preempt_schedule_irq.另外我们在进程调度的时候会看到是否需要设置重新调度的标识,这时候1.1 schedule()这个函数是最常使用的调度函数:static inline void sched_submit_w...

2020-01-16 07:08:00 7431 1

原创 [scheduler]六. fork/clone等方式创建的进程如何被调度的

从kernel/fork.c里面,我们能够看到,无论是userspace还是kernel space在创建进程的时候最后的调用路径都是相同的,最后都走到_do_fork函数,我们看看源码:/* For compatibility with architectures that call do_fork directly rather than * using the syscall e...

2020-01-16 07:07:47 2095

原创 [scheduler]十. 不考虑能效是如何为task选择合适的cpu?

一 概述之前在讲解新创建进程和idle进程被wake_up_process之后如何被调度器调度的原理,有两个点没有分析的很清楚,就是在这个调度的过程中,如何选择一个cpu来执行调度实体。现在单独拎出来详细分析:如果EAS feature启用的话,执行函数流:select_energy_cpu_brute如果EAS feature没有启用的话,执行传统的函数流:find_idlest_cpu...

2020-01-16 07:07:10 2749

原创 [Python解析systrace.html]chrome打开systrace分析,图形显示时间点与文本时间点一一对应,方便debug使用

一、编写这个脚本的理由:抓取systrace之后,需要使用chrome在网站chrome://tracing/解析出来,但是很多时候,我们发现问题之后,需要vim systrace文件定位到具体位置。这时候问题来了,不容易查找这个task到底在文件的哪个位置。这个脚本的目的的就是解决此问题。二、使用方式在systrace上面作为零点判断的依据是irq、ipi或者task。目前抓取的systr...

2019-07-08 11:33:47 3436

原创 【cpufreq governor】cpu util 和 cpu margin怎么计算的

在计算cpu的util(函数sugov_get_util)期间需要使用margin来补偿util(在看schedutil governor的时候,不仅仅有cpu 的util margin,还有freq margin),得到最终的util+=margin 那么这个margin怎么计算的呢? sugov_update_shared–>sugov_get_util–>boosted_cp...

2019-04-26 18:31:09 4789

原创 WALT Window Assisted Load Tracking的思想和实现原理

1.主要是计算如下几个结构体的元素:struct rq { /*必须尽快明白这几个参数的含义*/ ………………………………………………………….#ifdef CONFIG_SCHED_WALT u64 cumulative_runnable_avg; u64 window_start; u64 curr_runnable_sum; u...

2019-04-26 18:31:03 6163 5

原创 [cpufreq governor] scale_freq_capacity/scale_cpu_capacity怎么计算的

定义的地方#ifdef CONFIG_CPU_FREQ #define arch_scale_freq_capacity cpufreq_scale_freq_capacity extern unsigned long cpufreq_scale_freq_capacity(struct sched_domain *sd, int cpu); extern unsigned l...

2019-04-26 18:30:48 1851

原创 [cpufreq governor] schedutil governor解析

1.schedutil governor相关的结构体说明struct sugov_policy { struct cpufreq_policy *policy; /*cpu freq的policy*/ struct sugov_tunables *tunables; /*tunable结构体,根据用户需求改变*/ struct list_head tuna...

2019-04-26 18:30:38 12788

原创 [scheduler]调度器如何判断cpu_overutilized?

计算过程如下:static bool cpu_overutilized(int cpu) { return __cpu_overutilized(cpu, 0, NULL); } static bool __cpu_overutilized(int cpu, int delta, struct task_struct *p) { struct rq ...

2019-04-26 18:30:14 2333

原创 [scheduler]cfs调度算法如何判断task是否是Misfit task?

什么是Misfit task,满足如下几个条件的task就是Misfit task,是做负载均衡的一个条件当前cpu的capacity不是系统最大的cpu capacity当前task的util(修正后的)不超过当前cpu的capacity的90%调度器什么时候检测Misfit task?当pick next task时候,检测是否有Misfit task当更新task gr...

2019-04-26 18:29:59 1748 2

原创 interactive governor study for android

interactive governor全部思考思路:1、Interactive governor 初始化,一些定时器绑定的函数,创建内核线程进行调频并注册interative governor(对应cpufreq_interactive_initfunction)。2、注册governor执行函数:cpufreq_governor_interactive这个函数通过三个不同的eve...

2019-04-26 18:29:42 4709 2

原创 ARM调度域/调度组之概念理解

CPU拓扑结构存在下面三种:SMT Level 超线程处理器的一个核心MC Level 多核CPU的一个核心DIE Level 一个物理CPU的晶片(注意不是package,package是封装好了的,肉眼看到的CPU处理器)cpu最小级别的就是超线程处理器的一个smt核,次小的一级就是一个多核cpu的核,然后就是一个物理cpu封装,再往后就是cpu阵列,根据这些cpu级别的不同,...

2019-04-26 18:29:21 4698 1

原创 git 如何修改前一次的提交,而不需要Abandoned原先的提交

这里是记录下自己遇到的问题。即你提交了两笔patch,先后顺序为a–>bgit push之后发现,前一笔提交b有问题需要修改,如何修改呢?git revert HEAD^git add .git commit -s --amend[参考]:https://blog.csdn.net/jfkidear/article/details/17795781...

2019-01-02 16:18:09 2966

原创 2019-新年新计划

在2018年12月份,忙于其他的事情,导致12月份博客没有update。计划2019如下:坚持每个月读一本书,目前在读《万历十五年》学习Python继续深入学习schedule内存子系统中断子系统给娃做多多的工艺品迎接二宝的诞生,这个很赞。加油,离35岁又近了一步了。后面还要换大房子,摇到号买新车子。这些都是票子啊。...

2019-01-02 13:23:56 909 1

原创 Android app启动耗时分析

最近在看下面这个case:双击锁屏界面“未读信息”,手指离开屏幕的前一帧开始计时,至页面跳转到信息页面完全展示结束. 为何9.0版本耗时比8.1版本要多些.多是调度问题导致的.我擦.哈哈.本文的目的是理清楚app从点击到完全展示页面耗时是怎么测量或者说衡量的标准是什么?以前没仔细研究过.下面记录打卡下.通过systrace来定义:查找出用户点击屏幕开始的点,可以看touch的irq中断...

2018-11-27 17:31:25 1389

原创 ps命令显示进程状态解析

使用ps -ax可以看到显示的信息如下: PID TTY STAT TIME COMMAND 1 ? Ss 0:01 /sbin/init 2 ? S 0:00 [kthreadd] 3 ? S 0:00 [ksoftirqd/0] 5 ? S< 0:0...

2018-11-01 10:39:24 5050

原创 戴荃的歌,悟空--感想

拜师前我的心性:“我无性,人若骂我,我也不恼,若打我,我也不嗔,只是陪个礼儿就罢了。一生无性”.如同婴儿一般无性,无知(非贬义).拜师后:“你这去,定生不良。凭你怎么惹祸行凶,却不许说是我的徒弟,你说出半个字来,我就知之,把你这猢狲剥皮锉骨,将神魂贬在九幽之处,教你万劫不得翻身!” 教导方向出现问题,而不是教导不能行过之事,却是生事之后不准报家门.进入社会之后:“但他饥时,与他铁丸子吃;渴时,...

2018-10-17 14:13:00 857

转载 [linux kernel-并发与同步]2.atomic工作原理

一 源由-需要解决什么问题我们的程序逻辑经常遇到这样的操作序列:读一个位于memory中的变量的值到寄存器中修改该变量的值(也就是修改寄存器中的值)将寄存器中的数值写回memory中的变量值如果这个操作序列是串行化的操作(在一个thread中串行执行),那么一切OK,然而,世界总是不能如你所愿。在多CPU体系结构中,运行在两个CPU上的两个内核控制路径同时并行执行上面操作序列,有可能...

2018-09-29 15:40:32 1873 2

原创 [linux kernel-并发与同步]3.semaphore工作原理及其使用案例

一 semaphore工作原理我们经常在kernel源码中声明semaphore,如下两种方式:静态申请:#define DEFINE_SEMAPHORE(name) \ struct semaphore name = __SEMAPHORE_INITIALIZER(name, 1) 动态申请:static inline void sema_init(struc...

2018-09-28 17:32:56 2105

原创 linux kernel soft lockup/hard lockup简介及其解决思路

最近有一个朋友问到我一个kernel panic问题.由于不是做这方面的,但是了解下和其解决思路还是有必要的.一 概述在linux kernel里,有一个debug选项CONFIG_HARDLOCKUP_DETECTOR。使能它可以打开kernel中的soft lockup和hard lockup探测。这两个东西到底有什么用处那?首先,soft/hard lockup的实现在kernel/wa...

2018-09-27 17:48:09 11486 2

转载 cpu_relax()函数的意义

最近在看wake_up_process流程的时候,发现在try_to_wake_up函数里面有这么一条语句: while (p->on_cpu) cpu_relax();一直想弄明白cpu_relax()函数的真实含义. 我们查看这个函数的定义如下: arm32:#if __LINUX_ARM_ARCH__ == 6 || defined(CON...

2018-09-04 19:29:07 9621

原创 使用taskset将task绑定到指定的CPU上

目前的平台是big.LITTLE 架构,遇到一个卡顿问题,怀疑和小核上中断过于频繁有关,所以想把SF绑定到大核看看。首先ps -e获取SurfaceFlinger的pid:/ # ps -e | grep "surfaceflinger" ...

2018-08-29 19:18:59 10223

原创 git下载Android kernel 源码并进行编译

一. 如何获取Android 内核源码 1 如果能够访问Google网站,则直接访问如下网站: https://source.android.com/setup/build/building-kernels 进行相应的Android 内核源码下载2 如果不能访问Google网站,则 使用清华的镜像下载对应源码: 名称 清华服务器地址 common http...

2018-08-27 17:36:20 6322 1

原创 在linux kernel中添加私有的ftrace event两种方式(trace_printk)

以实际例子来阐释整个实现过程。 1.测试驱动如下(定时获取某个cpu的当前频率和最高频率):#include <linux/init.h> #include <linux/kernel.h> #include <linux/kernel_stat.h

2018-08-23 18:58:31 6081

原创 [cpufreq governor]sched governor解析

前有schedutil governor来调节cpu频率,现有schedfreq governor来调节cpu频率,现在来讲解它的来龙去脉。 源代码参考AOSP kernel的这个分支:remotes/origin/android-msm-wahoo-4.4-pie,kernel version:4.4.116。源代码下载地址:https://aosp.tuna.tsinghua.edu.cn/...

2018-08-22 19:31:50 6133 2

原创 linux kernel insmod模块出现的两个错误以及解决方案

编译了自己的驱动,但是insmod出现问题: 第一个问题: [ 12.722535] sciu2s: module verification failed: signature and/or required key missing - tainting kernel [ 12.722560] sciu2s: Unknown symbol usb_serial_deregister_...

2018-08-21 09:43:36 13857 4

原创 【算法】【指针的妙用】自然数求和1+2+3+..+n,不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)

题目描述求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。样例输入 3 5 样例输出 6 15使用等差数列公式n(1+n)/2怎么按照条件来实现算法呢?#include <stdio.h>#include <stdint.h&

2018-08-16 19:25:23 865

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除