linux 电源管理
文章平均质量分 91
inux 电源管理
雪饼android之路
这个作者很懒,什么都没留下…
展开
-
linux cpufreq framework(4)_cpufreq governor
最后,我们介绍一下kernel中常见的cpufreq governor。性能优先的governor,直接将cpu频率设置为policy->{min,max}中的最大值。功耗优先的governor,直接将cpu频率设置为policy->{min,max}中的最小值。由用户空间程序通过scaling_setspeed文件修改频率。4)Ondemand根据CPU的当前使用率,动态的调节CPU频率。类似Ondemand,不过频率调节的会平滑一下,不会忽然调整为最大值,又忽然调整为最小值。转载 2024-02-23 22:00:00 · 115 阅读 · 0 评论 -
linux cpufreq framework(3)_cpufreq core
前文(Linux cpufreq framework(2)_cpufreq driver)从平台驱动工程师的角度,简单的介绍了编写一个cpufreq driver的大概步骤。但要更深入理解、更灵活的使用,必须理解其内部的实现逻辑。因此,本文将从cpufreq framework core的角度,对cpufreq framework的内部实现做一个简单的分析。转载 2024-02-21 23:00:00 · 91 阅读 · 0 评论 -
Linux cpufreq framework(2)_cpufreq driver
本文从平台驱动工程师的角度,介绍怎么编写cpufreq驱动。转载 2024-02-20 23:45:00 · 99 阅读 · 0 评论 -
linux cpufreq framework(1)_概述
本文介绍了cpufreq framework的基本情况,后面通过以下的文章,分析其它内容:linux cpufreq framework(2)_cpufreq driver,从平台驱动工程师的角度,介绍怎么编写cpufreq驱动;linux cpufreq framework(3)_cpufreq core,分析cpufreq的内部实现,并总结cpufreq提供的sysfs接口,介绍怎么通过sysfs,控制系统的调频行为;转载 2024-02-20 20:45:00 · 96 阅读 · 0 评论 -
Linux电源管理(14)_PM OPP Interface
当前复杂的SoCs都包括多个协同工作的子模块。根据具体的应用场景,很多子模块(蜗蜗注:典型的例子是 CPU )并不需要一直工作在最高的频率上。因此SoC中的子模块划分为不同的domains,允许一些domains在较低的电压 / 频率下工作,而另一些在较高的电压 / 频率下工作。domain中的设备支持的所有频率和电压的组合,称作Operating Performance Points,简称为OPPs。注1:为什么一定是频率和电压的组合?因为频率高低决定器件的工作性能,降低性能的目的是节省功耗。转载 2024-02-03 00:00:00 · 126 阅读 · 1 评论 -
Linux电源管理(12)_从设备驱动的角度看电源管理
相信工作稍微久一点的linux驱动工程师都深有体会:在旧时光里,实现某一个设备的电源管理功能,是非常简单的一件事情。大多数设备都被抽象为platform设备,driver只需要提供suspend/resume/shutdown等回调函数,并注册到kernel即可。kernel会在系统电源状态切换的过程中,调用driver提供的回调函数,切换设备的电源状态。但是在新时代中,设备电源管理有关的操作,被统一封装在struct dev_pm_ops结构中了。转载 2024-01-23 23:00:00 · 233 阅读 · 0 评论 -
Linux cpuidle framework(4)_menu governor
本文以menu governor为例,进一步理解cpuidle framework中governor的概念,并学习governor的实现方法。在当前的kernel中,有2个governor,分别为ladder和menu(蜗蜗试图理解和查找,为什么会叫这两个名字,暂时还没有答案)。ladder在periodic timer tick system中使用,menu在tickless system中使用。注:有关periodic timer tick和tickless的知识,可参考本站时间子系统的系列文章。转载 2023-12-22 23:00:00 · 69 阅读 · 0 评论 -
Linux cpuidle framework(3)_ARM64 generic CPU idle driver
本文以ARM64平台下的cpuidle driver为例,说明怎样在cpuidle framework的框架下,编写cpuidle driver。另外,本文在描述cpuidle driver的同时,会涉及到CPU hotplug的概念,因此也可作为CPU hotplug的引子。转载 2023-12-21 23:00:00 · 82 阅读 · 0 评论 -
Linux cpuidle framework(2)_cpuidle core
cpuidle core是cpuidle framework的核心模块,负责抽象出cpuidle device、cpuidle driver和cpuidle governor三个实体,并提供如下功能(可参考“Linux cpuidle framework(1)_概述和软件架构”中的软件架构):1)向底层的cpuidle driver模块提供cpudile device和cpuidle driver的注册/注销接口。2)向cpuidle governors提供governor的注册接口。转载 2023-12-19 23:00:00 · 86 阅读 · 0 评论 -
Linux cpuidle framework(1)_概述和软件架构
2: {4: }以蜗蜗之前使用过的一个ARM926的单核CPU为例(内核版本为Linux2.6.23),cpuidle的处理过程是:;系统初始化完成后,将第一个进程(init)变为idle进程,;以下都是在进程的循环中,周而复始…WFI指令虽然简单,却包含了idle处理的两个重点:1)idle进程idle进程的存在,是为了解决“何时idle”的问题。我们知道,Linux系统运行的基础是进程调度,而所有进程都不再运行时,称作cpu idle。但是,怎么判断这种状态呢?转载 2023-12-18 23:00:00 · 52 阅读 · 0 评论 -
CPU idle framework_ARM WFI和WFE指令
在 ARM 架构中,WFI(Wait For Interrupt)和 WFE(Wait For Event)是两个指令,用于处理器的低功耗和休眠模式。WFI 指令用于将处理器进入低功耗模式,直到中断信号到来时才被唤醒。当执行 WFI 指令时,处理器将停止指令的执行,停止取指,并且进入休眠状态。当一个中断被触发时(如外部中断、定时器中断等),处理器会退出低功耗模式,继续执行后续指令。WFE 指令用于将处理器进入低功耗模式,直到某个事件发生时才被唤醒。原创 2023-12-12 23:00:00 · 1214 阅读 · 0 评论 -
Linux common clock framework(3)_实现逻辑分析
和fixed rate类似,不再一一说明。转载 2023-12-05 23:45:00 · 151 阅读 · 0 评论 -
Linux common clock framework(2)_clock provider
我们在上面提到了clock provider的两种DTS定义方式,哪一种好呢?从规范化、条理性的角度,毫无疑问方式2是好的,它真正理解了Device Tree的精髓,并细致的执行。且可以利用很多clock framework的标准实现(后面会讲)。而方式1的优点是,DTS容易写,相应的clock driver也较为直观,只是注册一个一个clock provider即可,没有什么逻辑可言。换句话说,方式1比较懒。后面的API描述,蜗蜗会着重从方式2的角度,因为这样才能体会到软件设计中的美学。转载 2023-12-03 17:49:40 · 77 阅读 · 0 评论 -
Linux common clock framework(1)_概述
如今,可运行Linux的主流处理器平台,都有非常复杂的clock tree,我们随便拿一个处理器的spec,查看clock相关的章节,一定会有一个非常庞大和复杂的树状图,这个图由clock相关的器件,以及这些器件输出的clock组成。下图是一个示例:clock相关的器件包括:用于产生clock的Oscillator(有源振荡器,也称作谐振荡器)或者Crystal(无源振荡器,也称晶振);用于倍频的PLL(锁相环,Phase Locked Loop);用于分频的divider;用于多路选择的Mux;转载 2023-11-17 23:45:00 · 197 阅读 · 0 评论 -
一文搞懂linux regulator子系统
Regulator指的是稳定器,有电压稳定器及电流稳定器两种,能够自动维持恒定电流或者电压。其中,电压稳定器voltage regulator在电路中比较常见。从设备驱动的角度来看,regulator的控制比较简单,主要有enable/disable/输出电压或电流大小的控制。Linux利用regulator framework对regulator进行管理和控制。转载 2023-09-11 23:00:00 · 223 阅读 · 0 评论 -
Linux Regulator Framework(2)_regulator driver
本文从regulator driver的角度,描述怎样基于regulator framework编写regulator驱动。同时,以此为契机,学习、理解regulator有关的物理特性,以便能够更好的使用它们。转载 2023-09-10 16:30:31 · 218 阅读 · 0 评论 -
Linux Regulator Framework(1)_概述
Regulator,中文名翻译为“稳定器”,在电子工程中,是voltage regulator(稳压器)或者current regulator(稳流器)的简称,指可以自动维持恒定电压(或电流)的装置。voltage regulator最早应用于功放电路中,主要用于滤除电源纹波(100或者120Hz)和噪声,以及避免“输出电压随负载的变化而变化”的情况。后来,随着IC级别的regulator的出现(便宜了),voltage regulator几乎存在于任何的电子设备中。转载 2023-09-08 23:00:00 · 156 阅读 · 0 评论 -
Linux PM QoS framework(3)_per-device PM QoS
per-device PM QoS是针对指定设备的QoS framework,背后的思考如下:在Runtime PM的框架下,当device的引用计数减为0的时候,RPM会suspend该device。不过,device进入suspend状态以及从suspend状态resume是需要消耗时间的(相关信息保存在pm domain中),而系统其它实体(如用户空间程序)可能对该设备的响应时间有要求,这就是一种形式的QoS request,称作resume_latency。转载 2023-09-03 16:42:48 · 178 阅读 · 0 评论 -
Linux PM QoS framework(2)_PM QoS class
回顾上一篇文章(Linux PM QoS framework(1)_概述和软件架构),PM QoS framework抽象出4个系统级别的QoS constraint(统称为PM QoS class),分别是cpu&dma latency、network latency、network throughput和memory bandwidth。并提供一系列的接口,动态的搜集、整理系统对这些constraint的需求情况。转载 2023-08-31 00:00:00 · 291 阅读 · 0 评论 -
Linux PM QoS framework(1)_概述和软件架构
QOS为Quality Of Service(服务质量)的简称,对PM QoS而言,表示Linux kernel电源管理相关的服务质量。那到底什么是服务质量呢?我们知道,Linux PM的主要功能,是节省功耗,但同时,会付出一定的性能代价,例如延迟(latency)增加、吞吐量(throughput)下降。可以把PM当作一种服务,把它对性能的影响,类比为服务的质量(QoS)。对性能的影响越大,QoS越低,反之越高。转载 2023-08-28 22:00:00 · 227 阅读 · 0 评论 -
一文搞懂linux PM QOS
linux PM QOS(power management quality of service,服务质量)表示linux内核电源管理的质量。它是一种在功耗和性能之间做出权衡的机制,通过使用constraint(约束)作为指标,来表达各个模块对PM的需求和限制。linux PM QOS有两种框架:CPU latency QoS和per-device PM QoS。CPU latency QoS用于控制CPU的最大延迟,以保证实时性能。转载 2023-08-27 16:32:34 · 461 阅读 · 0 评论 -
一文搞懂linux power domain framework
什么是power domain framework?在搞清楚这个问题之前,有必要先弄清楚什么是power domain,以及它解决了什么问题。从字面上理解,power domain指的是电源域。SOC是由多功能模块组成的一个整体,对于工作在相同电压且功能内聚的功能模块,可以划为一个逻辑组,这样的一个逻辑组就是一个电源域。简单来说,电源域就是逻辑划分,在该逻辑划分中包含了物理实体和电源线的连接关系。电源域之间存在着包含关系,这样就是一个父子关系的电源域。电源域也存在着兄弟关系,这样就是同一级的电源域。转载 2023-08-22 19:04:20 · 255 阅读 · 0 评论 -
Linux PM domain framework(1)_概述和使用流程
在复杂的片上系统(SOC)中,设计者一般会将系统的供电分为多个独立的block,这称作电源域(Power Domain),这样做有很多好处,例如:1)将不同功能模块的供电分开,减小相互之间的干扰(如模拟和数字分开)。2)不同功能所需的电压大小不同:小电压能量损耗低,但对信号质量的要求较高;大电压能量损耗高,对信号质量的要求较低。因此可以根据实际情况,使用不同的电压供电,例如CPU core只需1.2v左右即可,而大部分的I/O则需要3.3v左右。转载 2023-08-16 23:00:00 · 309 阅读 · 0 评论 -
Linux电源管理(9)_wakelocks
wakelocks最初出现在Android为linux kernel打的一个补丁集上,该补丁集实现了一个名称为“wakelocks”的系统调用,该系统调用允许调用者阻止系统进入低功耗模式(如idle、suspend等)。同时,该补丁集更改了Linux kernel原生的电源管理执行过程(kernel/power/main.c中的state_show和state_store),转而执行自定义的state_show、state_store。这种做法是相当不规范的,它是典型的只求实现功能,不择手段。转载 2023-07-31 22:30:00 · 309 阅读 · 0 评论 -
Linux电源管理(8)_Wakeup count功能
Wakeup count是Wakeup events framework的组成部分,用于解决“system suspend和system wakeup events之间的同步问题”。本文将结合“Linux电源管理(6)_Generic PM之Suspend功能”和“Linux电源管理(7)_Wakeup events framework”两篇文章,分析wakeup count的功能、实现逻辑、背后的思考,同时也是对这两篇文章的复习和总结。转载 2023-07-05 22:45:00 · 402 阅读 · 0 评论 -
Linux电源管理(7)_Wakeup events framework
仔细推敲一下,上面所讲的同步问题包括两种情况:情况1:内核空间的同步wakeup events产生后,通常是以中断的形式通知device driver。driver会处理events,处理的过程中,系统不能suspend。注 1 :同步问题只存在于中断开启的情况,因为若中断关闭,就不会产生wakeup events,也就不存在同步的概念。情况2:用户空间的同步一般情况下,driver对wakeup events处理后,会交给用户空间程序继续处理,处理的过程,也不允许suspend。转载 2023-07-03 21:45:00 · 641 阅读 · 0 评论 -
Linux电源管理(6)_Generic PM之Suspend功能
下面图片对Linux suspend&resume过程做了一个概述,读者可以顺着这个流程阅读内核源代码。具体的说明,可以参考后面的代码分析。转载 2023-06-14 12:33:57 · 1480 阅读 · 0 评论 -
【Linux kernel】Linux电源管理(5)_Hibernate和Sleep功能介绍
Hibernate和Sleep两个功能是Linux Generic PM的核心功能,它们的目的是类似的:暂停使用——>保存上下文——>关闭系统以节电········>恢复系统——>恢复上下文——>继续使用。本文以内核向用户空间提供的接口为突破口,从整体上对这两个功能进行介绍,并会在后续的文章中,分析它们的实现逻辑和执行动作。转载 2023-01-30 22:00:00 · 644 阅读 · 0 评论 -
【Linux kernel】Linux电源管理(4)_Power Management Interface
Linux电源管理中,相当多的部分是在处理Hibernate、Suspend、Runtime PM等功能。而这些功能都基于一套相似的逻辑,即“Power management interface”。该Interface的代码实现于“include/linux/pm.h”、“drivers/base/power/main.c”等文件中。主要功能是:对下,定义Device PM相关的回调函数,让各个Driver实现;对上,实现统一的PM操作函数,供PM核心逻辑调用。转载 2023-01-29 22:00:00 · 802 阅读 · 0 评论 -
【Linux kernel】Linux电源管理(3)_Generic PM之Reboot过程
本文是我们在分析Linux内核时第一次遇到Architecture和Machine的概念,顺便解释一下。内核代码中最常见的目录结构就是:arch/xxx/mach-xxx/(例如arch/arm/mach-bcm/)。由该目录结构可知,Architecture(简称arch)是指具体的体系结构,如ARM、X86等等。Machine呢,是指具体体系结构下的一个或一系列的SOC,如bcm等。转载 2022-12-18 11:01:22 · 1222 阅读 · 0 评论 -
【Linux kernel】Linux电源管理(2)_Generic PM之基本概念和软件架构
这里的Generic PM,是蜗蜗自己起的名字,指Linux系统中那些常规的电源管理手段,包括关机(Power off)、待机(Standby or Hibernate)、重启(Reboot)等。这些手段是在嵌入式Linux普及之前的PC或者服务器时代使用的。在那个计算机科学的蛮荒时代,人类在摩尔定律的刺激下,孜孜追求的是计算机的计算能力、处理性能,因此并不特别关心Power消耗。转载 2022-11-30 22:00:00 · 275 阅读 · 0 评论 -
【Linux kernel】Linux电源管理(1)_整体架构
在这个世界中,任何系统的运转都需要能量。如树木依靠光能生长,如马儿依靠食物奔跑,如计算机系统依靠电能运行。而能量的获取是有成本的,因此如果能在保证系统运转的基础上,尽量节省对能量的消耗,就会大大提升该系统的生存竞争力。这方面,大自然已经做的很好了,如植物的落叶,如动物的冬眠,等等。而在计算机的世界里(这里以运行Linux OS的嵌入式系统为例),称作电源管理(Power Management)。通俗的讲,电源管理就是:“想让马儿跑,不想马吃草”。转载 2022-11-29 23:45:00 · 623 阅读 · 0 评论