Linux CPU core的电源管理(3)_cpu ops

作者:wowo 发布于:2015-7-17 22:15 分类:电源管理子系统

由“ARMv8-a架构简介”中有关的介绍可知,ARMv8(包括ARMv7的一些扩展)引入了Virtualization、Security等概念。在这些概念之下,传统的CPU boot、shutdown、reset、suspend/resume等操作,不再那么简单和单纯。因此,ARM将这些底层操作抽象为一些operations,在以统一的方式向上层软件提供API的同时,可以根据不同的场景,有不同的实现。这就是本文要描述的cpu ops。

注1:由“Linux CPU core的电源管理(1)_概述”的描述可知,cpu ops属于arch-dependent的部分,本文基于ARM64平台。

阅读全文>>

标签: Linux SMP cpu operations spin_table psci

评论(20) 浏览(31810)

Concurrency Managed Workqueue之(一):workqueue的基本概念

作者:linuxer 发布于:2015-7-15 18:47 分类:中断子系统

workqueue是一个驱动工程师常用的工具,在旧的内核中(指2.6.36之前的内核版本)workqueue代码比较简单(大概800行),在2.6.36内核版本中引入了CMWQ(Concurrency Managed Workqueue),workqueue.c 的代码膨胀到5000多行,为了深入的理解CMWQ,单单一份文档很难将其描述的清楚,因此CMWQ作为一个主题将会产生一系列的文档,本文是这一系列文 档中的第一篇,主要是基于2.6.23内核的代码实现来讲述workqueue的一些基本概念(之所以选择较低版本的内核,主要是因为代码简单,适合理解 基本概念)。

阅读全文>>

标签: workqueue

评论(25) 浏览(36743)

linux kernel的中断子系统之(九):tasklet

作者:linuxer 发布于:2015-7-2 18:10 分类:中断子系统

对于中断处理而言,linux将其分成了两个部分,一个叫做中断handler(top half),属于不那么紧急需要处理的事情被推迟执行,我们称之deferable task,或者叫做bottom half,。具体如何推迟执行分成下面几种情况:

1、推迟到top half执行完毕

2、推迟到某个指定的时间片(例如40ms)之后执行

3、推迟到某个内核线程被调度的时候执行

对于第一种情况,内核中的机制包括softirq机制和 tasklet机制。第二种情况是属于softirq机制的一种应用场景(timer类型的softirq),在本站的时间子系统的系列文档中会描述。第 三种情况主要包括threaded irq handler以及通用的workqueue机制,当然也包括自己创建该驱动专属kernel thread(不推荐使用)。本文主要描述tasklet这种机制,第二章描述一些背景知识和和tasklet的思考,第三章结合代码描述tasklet 的原理。

注:本文中的linux kernel的版本是4.0

阅读全文>>

标签: tasklet

评论(8) 浏览(38948)

Linux cpufreq framework(2)_cpufreq driver

作者:wowo 发布于:2015-6-19 22:27 分类:电源管理子系统

本文从平台驱动工程师的角度,介绍怎么编写cpufreq驱动。

注1:本文基于linux-3.18-rc4内核,其它版本内核可能会稍有不同。

阅读全文>>

标签: Linux driver cpufreq

评论(5) 浏览(21754)

linux cpufreq framework(1)_概述

作者:wowo 发布于:2015-6-13 22:20 分类:电源管理子系统

linux kernel主要通过三类机制实现SMP系统CPU core的电源管理功能:

1)cpu hotplug。根据应用场景,enable/disable CPU core,具体可参考“Linux CPU core的电源管理(4)_cpu control”。

2) cpuidle framework。在没有进程调度的时候,让CPU core进入idle状态,具体可参考“cpuidle framework系列文章”。

3) cpufreq framework。根据使用场景和系统负荷,调整CPU core的电压(voltage)和频率(frequency),具体可参考本文以及后续cpufreq相关的。

对CPU core来说,功耗和性能是一对不可调和的矛盾,通过调整CPU的电压和频率,可以在功耗和性能之间找一个平衡点。由于调整是在系统运行的过程中,因此cpufreq framework的功能也称作动态电压/频率调整(Dynamic Voltage/Frequency Scaling,DVFS)。

本文主要从功能说明和软件架构两个角度介绍cpufreq framework。

阅读全文>>

标签: Linux cpufreq dvfs hmp

评论(16) 浏览(32526)

Linux电源管理(15)_PM OPP Interface

作者:wowo 发布于:2015-6-4 21:54 分类:电源管理子系统

本文是分析cpufreq framework之前的一篇前置文章,用于介绍Linux电源管理中的Operating Performance Point (OPP)接口。

OPP是一个单纯的软件library,用于归纳、管理各个硬件模块的、可工作的{频率}/ {电压}组合。它不涉及任何硬件,也没有复杂的逻辑,再加上Kernel document(Documentation/power/opp.txt )描述的非常清晰,因此本文只是简单的从功能和API两个方便介绍OPP,不再分析其source code及内部实现逻辑。

阅读全文>>

标签: Linux PM Power opp

评论(12) 浏览(20737)

Linux CPU core的电源管理(2)_cpu topology

作者:wowo 发布于:2015-5-30 21:58 分类:电源管理子系统

在“Linux CPU core的电源管理(1)_概述”中,我们多次提到SMP、CPU core等概念,虽然硬着头皮写下去了,但是蜗蜗对这些概念总有些似懂非懂的感觉。它们和CPU的进化过程息息相关,最终会体现在CPU topology(拓扑结构)上。因此本文将以CPU topology为主线,介绍CPU有关(主要以ARM CPU为例)的知识。

另外,CPU topology除了描述CPU的组成之外,其主要功能,是向kernel调度器提供必要的信息,以便让它合理地分配任务,最终达到性能和功耗之间的平衡。这也是我将“cpu topology”归类为“电源管理子系统”的原因。

阅读全文>>

标签: SMP cpu topology SMT NUMA

评论(22) 浏览(34828)

Linux内核同步机制之(五):Read/Write spin lock

作者:linuxer 发布于:2015-5-22 18:38 分类:内核同步机制

在有了强大的spin lock之后,为何还会有rw spin lock呢?无他,仅仅是为了增加内核的并发,从而增加性能而已。spin lock严格的限制只有一个thread可以进入临界区,但是实际中,有些对共享资源的访问可以严格区分读和写的,这时候,其实多个读的thread进入 临界区是OK的,使用spin lock则限制一个读thread进入,从而导致性能的下降。

本文主要描述RW spin lock的工作原理及其实现。需要说明的是Linux内核同步机制之(四):spin lock是本文的基础,请先阅读该文档以便保证阅读的畅顺。

阅读全文>>

标签: rw spinlock

评论(7) 浏览(26111)

Linux时间子系统之(十四):tick broadcast framework

作者:linuxer 发布于:2015-5-21 19:26 分类:时间子系统

在内核中,有cpuidle framework可以控制cpu的节电:当没有进程调度到该cpu上执行的时候,swapper进程粉墨登场,将该cpu会被推入到idle状态。当然 CPU的idle状态有深有浅,当CPU睡的比较深入的时候,有可能会关闭本地的timer硬件。这样就会引入一个很有意思的问题:local timer将无法唤醒CPU,该cpu上的所有的software timer将无法唤醒cpu。tick broadcast framework就是用来解决这个问题的。

本文中的代码来自linux kernel 4.0。

阅读全文>>

标签: framework tick broadcast

评论(37) 浏览(27267)

Linux CPU core的电源管理(1)_概述

作者:wowo 发布于:2015-4-30 21:20 分类:电源管理子系统

在SMP(Symmetric Multi-Processing)流行起来之前的很长一段时间,Linux kernel的电源管理工作主要集中在外部设备上,和CPU core相关的,顶多就是CPU idle。但随着SMP的普及,一个系统中可用的CPU core越来越多,这些core的频率越来越高,处理能力越来越强,功耗也越来越大。因此,CPU core有关的电源管理,在系统设计中就成为必不可少的一环,与此有关的思考包括:

对消费者(一些专业应用除外)而言,这种暴增的处理能力,是一种极大的浪费,他们很少(或者从不)有如此高的性能需求。但商家对此却永远乐此不疲,原因无外乎:

1)硬件成本越来越低。

2)营销的噱头。

3)软件设计者的不思进取(臃肿的Android就是典型的例子),导致软件效率低下,硬件资源浪费严重。以至于优化几行代码的难度,甚至比增加几个cpu核还困难。

在这种背景下,CPU core的电源管理逻辑,就非常直接了:根据系统的负荷,关闭“多余的CPU性能”,在满足用户需求的前提下,尽可能的降低CPU的功耗。但CPU的控制粒度不可能无限小,目前主要从两个角度实现CPU core的电源管理功能:

1)在SMP系统中,动态的关闭或者打开CPU core(本文重点介绍的功能)。

2)CPU运行过程中,动态的调整CPU core的电压和频率(将在其它文章中单独分析)。

本文将以ARM64为例,介绍linux kernel CPU core相关的电源管理设计。

阅读全文>>

标签: Linux PM core cpu

评论(22) 浏览(40184)

Copyright @ 2013-2015 蜗窝科技 All rights reserved. Powered by emlog