Menu
0 Comments

Linux cpuidle framework(1)_概述和软件架构

1. 序

在计算零碎中,CPU的功用是处死顺序。,总结执意咱们在教科书上学到的东西。:取指、译码、处死。如下成绩就来了。,假使缺勤处死顺序,你想用CPU做什么?或许你会说,刚要一个人站。。确凿,它将中止,但什么时辰中止、健康状况如何中止,纵然咱们可能朝外思索。,由于实践的软件和武器装备机遇难得的复杂。

让咱们回到Linux 内核上,Linux零碎,CPU被两类顺序使用:类是一个人加工(或螺纹),也称为手续环境;其余的的是各式各样的各样的临时性失去知觉。、非常的处置顺序,也称临时性失去知觉环境。

一个人手续的在性,它是用来处置事务的。,假使您读取用户输出并将其显示在屏风上。并且市老是满足。,假使用户不再进入,屏风上不喜欢显示新的愿意的。。此刻,就是这么大的手续可以举办CPU。,但会一直预备回复(如用户仓促的有调举措)。同一地,假使零碎不临时性失去知觉、非常事变,CPU不喜欢工夫来临时性失去知觉环境。

在Linux 内核中,CPU消遣时间社会地位,这叫做弃置不顾社会地位。,而cpuidle framework,执意行政机关这种社会地位。

注:cpuidle 边框专业丛书将以ARM64为例平台,由于ARM64很快就被释放令了,内核的青年时期版本缺勤相干信号,如下咱们选择了最新的内核版本。

2. 功用概述

这是一段工夫。,Linux 内核CPU 消遣时间边框难得的复杂。,复杂到driver技师只必要在“include\asm-arm\arch-xxx\”中解说一个人名字为arch_idle的inline职务,并在该职务中转让kernel陈设的cpu_do_idle管嘴,更不用说,内核的其余的嫁妆扶助了咱们业主。,列举如下:

   1:staticinlinevoid arch_idle(void)
   2: {
   3:         cpu_do_idle();
   4: }

以人工声迷宫植入前使用的ARM926单片机为例,cpuidle的处置手续是: 
B start_kernel(arch\arm\kernel\) 
start_kernel->rest_init(init\) 
零碎设定初值满足后,将第一个人加工(init)更代替消遣时间加工, 
以下是整个手续的一圈,旋转…
 
cpu_idle->default_idle(arch\arm\kernel\) 
arch_idle(include\asm-arm\arch-xxx\) 
cpu_do_idle(include/asm-arm/) 
cpu_arm926_do_idle(arch/arm/mm/) 
mcr     p15, 0, r0, c7, c0, 4           @ Wait for interrupt   WFI讲授 

纵然复杂,它收录两个消遣时间处置点。:

1)消遣时间手续

idle一个人手续的在性,处理闲时成绩。

咱们晓得,Linux零碎容易搬运的根底是加工调整,每个人加工不再运转,它叫做CPU idle。纵然,健康状况如何判别这种社会地位?内核采取了一种更复杂的办法。:在设定初值手续(零碎的第一个人加工)满足设定初值以后的,把它形状一个人消遣时间的手续,由于手续的前是最小量的,这么,当消遣时间加工被布置为,它传达零碎的其余的加工不再运转。,也执意说,CPU idle了。终极,从消遣时间加工转让消遣时间讲授(在这里是WFI),让CPU进入消遣时间社会地位。

“ARM WFI和WFE讲授引见,WFI Wakeup 事变将提醒CPU从WFI社会地位,通常境况下,这些事变是已确定的临时性失去知觉。,这么CPU提醒后将处死临时性失去知觉处置顺序。,处置机正中鹄的已确定的提醒手续,处置顺序回复时的调整,当缺勤其余的必要调整的加工处死时,调整器将回复消遣时间加工的处死。,自然,消遣时间加工不做任何的事实。,持续进入消遣时间社会地位,可得到再提醒。

2)WFI

WFI用于处理弃置不顾成绩。

普通境况下,ARM CPU idle时,您可以使用WFI讲授,将CPU放入Wait for interrupt社会地位。在这种社会地位下,无论如何(和特派臂) 玉蜀黍发育不良的穗的完成,可指的是“ARM
WFI和WFE讲授”)会把ARM 玉蜀黍发育不良的穗座钟停业,减少开支电力。

或许你会想,就是这么大的手续终止。,为什么咱们必要开拓CPUIDE? 边框?对给驱肠虫给驱肠虫的看法:

ARM CPU的设计变成越来越复杂,对能源节约的询问越来越高,如下很多CPU将源自中断推延弃置不顾社会地位下的电力两个方面思索,设计各式各样的弃置不顾成绩等级。一个人更敏感的延误状况,可以使用低推延、超级强权怠速;延宕不敏感的需要,你可以使用高艳迟、低功耗消遣时间。

软件必要本使用场面,在恰当的时辰,选择恰当的的消遣时间社会地位。战术选择是什么,找错误这么复杂。这执意cpuidle framework的在意思(咱们可以粉底上面cpuidle 边框的软件建筑风格,支持者这点)。

3. 软件架构

Linux 内核中,cpuidle framework谎言“drivers/cpuidle”文件夹中,收录cpuidle core、cpuidle governors和cpuidle 驾驶顺序三模块,重行集成谎言内核中。 sched正中鹄的cpuidle entry,CPU消遣时间行政机关的和谐满足。软件建筑风格列举如下:

1)内核 schedule模块

谎言内核中,担任完成idle螺纹的传播参加比赛的人(cpuidle 入口处逻辑,包罗消遣时间以图案装饰的选择、怠速进入等。

2)cpuidle core

cpuidle core担任完成cpuidle 边框的总体边框,首要功用包罗:

粉底cpuidle的使用场面,笼统出cpuidle device、cpuidle driver、cpuidle 统治者三实在性;

以职务转让的形成,为亚表层SCED模块陈设管嘴;

以SysFS的形成,为用户余地陈设管嘴;

向亚表层的cpuidle 驾驶模块,陈设一致的为引航流露和行政机关相互作用;

亚表层速度调节手柄模块,陈设一致的统治者留下印象行政机关相互作用。

cpuidle 玉蜀黍发育不良的穗信号首要包罗:cpu、、、。

3)cpuidle drivers

担任怠速机制的工具,即:健康状况如何进入弃置不顾社会地位,将中断什么合格证书,等一下。

不同的的architecture、不同的CPU core,会有不同的的cpuidle driver,平台驾驶开拓人员,可以在cpuidle 在玉蜀黍发育不良的穗陈设的边框下,开拓本人的cpuidle driver。信号首要包罗:。

4)cpuidle governors

Linux 内核边框具有两种绝对笼统的以图案装饰。:

以图案装饰1,provider/consumer以图案装饰,interrupt、clock、timer、质量边框,如调节剂,执意这种以图案装饰。。它的表明是,该武器装备模块为一个人或多个模块上菜用具。,如下framework必要从对上(consumer)和对下(consumer)两个角度举行软件笼统;

以图案装饰2,driver/governor以图案装饰,本文所描画的cpuidle 边框执意这种以图案装饰。它的表明是:武器装备(或许该武器装备所对应的驾驶软件)可以陈设多种可选“项目”(在这里即idle 程度),工具项目(即机制),担任驱赶者,纵然终于选择哪样的项目(或战术)呢?,另一个人模块担任统治者。。

以图案装饰解读5月2日相当笼统,把它放到cpuidle的场面外面,这容易地担心。:

先发制人说过,差不多CPU陈设各式各样的消遣时间成绩等级(即ABO提到的打算)。,这些弃置不顾 成绩等级暗中的首要使著名是消遣时间时的功耗和中断。。cpuidle driver(机制)担任解说这些弃置不顾社会地位(全部人社会地位的功耗和推延使著名是多少),退去相干事情的工具。终极,cpuidle 驱赶者会告知州长就是这么大的人,本特派使用场面的统治者,确定选择哪个消遣时间社会地位(战略)。

内核中,cpuidle 州长谎言州长/登记中。

4. 软件涨潮

里德本章先发制人,咱们还请讲师里德以下三篇文字:

“Linux cpuidle framework(2)_cpuidle core”

“Linux cpuidle 边框(3) generic CPU idle driver”

“Linux cpuidle 边框(4)菜肴 governor”

后面提到过,内核将在零碎启动后满足,在init加工(或螺纹)中,处置cpuidle相干的事实。普通手续是这么大的的(内核启动相干的辨析),将在其余的文字中清楚的描画。:

率先要解说的是,在SMP(多核)零碎中,CPU启动的手续是:

1)启动主CPU,启动手续相似地移交的单环的零碎。:stext–>start_kernel–>rest_init–>cpu_startup_entry

2)启动其余的CPU,可以有多种方法,譬如,CPU 热点火塞等,开端手续是:secondary_startup–>__secondary_switched–>secondary_start_kernel–>cpu_startup_entry

上述的信号谎言./ARCH/ARM64/内核中、init /等一下,感兴趣的讲师可以指的是本人。。决定性的它们都以同一的方法回去,运转到CPUST-StutupIn管嘴,管嘴谎言内核/ SCED中。,担任处置CPU 懒散的东西,就是这么大的手续列举如下(临时性疏忽已确定的更猛力地的分栏),譬如CPU idle 投票选举等。。

cpu_startup_entry涨潮:

cpu_startup_entry 
arch_cpu_idle_prepare,弃置不顾前预备工作,在ARM64中缺勤完成
cpu_idle_loop,进入cpuidle的主一圈 
假使目前不喜欢调整零碎!need_resched()),处死后续举措
local_irq_disable,停业IRQ临时性失去知觉 
arch_cpu_idle_enter,arch相干的cpuidle enter,在ARM64中缺勤完成
cpuidle_idle_call,main idle function 
cpuidle_select,经过cpuidle governor,选择一个人cpuidle state 
cpuidle_enter,经过cpuidle state,进入消遣时间社会地位
… 
临时性失去知觉发生,弃置不顾进项(使充满),此刻IRQ被制止。,如下CPU不克不及应唱圣歌发生临时性失去知觉的事变。 
cpuidle_reflect,使充满cpuidle governor,补充社会地位 
local_irq_enable,使能临时性失去知觉,应唱圣歌临时性失去知觉事变,跳过到有重大意义的的临时性失去知觉处置职务 
…                         
arch_cpu_idle_exit,相似地输出,缺勤处死ARM64

详细信号复杂,不再辨析,但较宽容的,这点也必要下划线。:

使用cpuidle 当边框进入消遣时间社会地位时,慢车IRQ做停业社会地位。,如下当你从消遣时间回复,不得不下一步举行。,直到IRQ翻开,处死有重大意义的的临时性失去知觉处置顺序,这和先发制人移交的cpuidle不同的。同时,也旧的颁发专业合格证书了这点。Linux
cpuidle 边框(4)菜肴 governor
提到它,为什么菜肴 速度调节手柄刚要在反照相互作用中设置一个人打手势。。由于反照在停业时被转让。,必要尽快归来,处置临时性失去知觉。

发表评论

电子邮件地址不会被公开。 必填项已用*标注