linux cpufreq framework(4)_cpufreq governor

作者:wowo 发布于:2015-8-23 21:15 分类:电源管理子系统

由“linux cpufreq framework(3)_cpufreq core”的描述可知,cpufreq policy负责设定cpu调频的一个大致范围,而cpu的具体运行频率,则需要由相应的cufreq governor决定(可自行调节频率的CPU除外,后面会再详细介绍)。那到底什么是cpufreq governor?它的运行机制是什么?这就是本文要描述的内容。

阅读全文>>

标签: Linux governor cpufreq

评论(33) 浏览(21486)

Concurrency Managed Workqueue之(四):workqueue如何处理work

作者:linuxer 发布于:2015-8-17 19:41 分类:中断子系统

本文主要讲述下面两部分的内容:

1、将work挂入workqueue的处理过程

2、如何处理挂入workqueue的work

阅读全文>>

标签: workqueue Concurrency Managed

评论(17) 浏览(25291)

Concurrency Managed Workqueue之(三):创建workqueue代码分析

作者:linuxer 发布于:2015-8-6 18:22 分类:中断子系统

本文主要以__alloc_workqueue_key函数为主线,描述CMWQ中的创建一个workqueue实例的代码过程。

阅读全文>>

标签: alloc_workqueue

评论(36) 浏览(29357)

Concurrency Managed Workqueue之(二):CMWQ概述

作者:linuxer 发布于:2015-7-31 12:29 分类:中断子系统

一种新的机制出现的原因往往是为了解决实际的问题,虽然linux kernel中已经提供了workqueue的机制,那么为何还要引入cmwq呢?也就是说:旧的workqueue机制存在什么样的问题?在新的 cmwq又是如何解决这些问题的呢?它接口是如何呈现的呢(驱动工程师最关心这个了)?如何兼容旧的驱动呢?本文希望可以解开这些谜题。

本文的代码来自linux kernel 4.0。

阅读全文>>

标签: CMWQ

评论(17) 浏览(31680)

linux cpufreq framework(3)_cpufreq core

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

前文(Linux cpufreq framework(2)_cpufreq driver)从平台驱动工程师的角度,简单的介绍了编写一个cpufreq driver的大概步骤。但要更深入理解、更灵活的使用,必须理解其内部的实现逻辑。

因此,本文将从cpufreq framework core的角度,对cpufreq framework的内部实现做一个简单的分析。

阅读全文>>

标签: Linux core cpufreq

评论(10) 浏览(23068)

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) 浏览(33772)

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

评论(26) 浏览(40127)

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

评论(9) 浏览(42369)

Linux cpufreq framework(2)_cpufreq driver

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

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

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

阅读全文>>

标签: Linux driver cpufreq

评论(5) 浏览(23487)

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) 浏览(34767)

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