实时操作系统CPU软件降温研究报告

实时操作系统CPU软件降温研究报告

 

 

问题描述

随着CPU主频的不断提高,在嵌入式领域,在iRmxpsosvxworks等实时操作系统下工作的高主频CPU往往需要考虑CPU降温的问题。通常采用的方法是通过风扇或散热片等硬件措施进行降温,但由于嵌入式系统的特殊性,某些嵌入式设备考虑到体积,外壳密闭等因素的限制不适合使用风扇或散热片进行降温,在这种情况下,我们不得不考虑软件降温的可行性。当然软件降温是在万不得已时采取的权宜之计,有条件的情况下当然是硬件降温效果最好。

目前网上有很多降温软件如CPUIdle等,但这些软件都是在win9x等非实时操作系统上运行的,实时操作系统如果用类似方法给CPU降温会不会影响操作系统的效率和操作系统的实时性?本文将着重阐述本人对上述问题的研究结果。

 

研究环境

硬件环境 Intel P 233 ,Intel PIII 700

软件环境 iRmx 实时操作系统

 

工作原理

Intel power state

上图是Intel Cpu 的电源管理部分状态迁移图,Intel 提供以下几种电源管理模式,Auto Halt,Stop Grant,Sleep,Deep Sleep ,Deeper Sleep 。除Auto Halt 外其它模式都会导致时钟停止。在时钟停止状态下,处理器将关闭对SMI#,INIT#LINT[1:0]的侦听,只有在回到Normal状态时才重新开启,这会对系统特别是实时系统产生一定的影响,所以本文不讨论这些模式。

本文着重讨论的是Auto Halt 模式,这也是大多数的降温软件通常采用的方式。

 

Auto Halt 模式的特性

Intel Cpu 通过在Normal状态下执行 HLT 指令将状态迁移到Auto Halt 模式。此时CpuHLT指令插入指令序列,并停止处理指令序列,直到发生SMI#,INIT#,LINIT[1:0](NMI,INTR)PSB 中断消息为止。当发生上述消息后Cpu重新回到Normal状态处理指令,并在处理完中断代码后继续从HLT指令的下一条指令执行。处理器在进入Auto Halt 模式后功耗将有所下降。

 

软件如何实现降温

由于软硬件系统在正常情况下大部分时间CPU利用率都较低,所以只要在CPU空闲时对CPU下一条HLT指令,就可以大大降低CPU的功耗,从而达到降温的目的。

在实时操作系统中,通常我们会设计一个最低优先级的任务做死循环处理,系统在空闲时都会走到该任务中。我们只要在这个任务的循环中加入一条HLT指令就可以达到上述目的。

 

相关研究

CPU 占用率的计算

CPU 占用时间的计算方法: 通过获得上面所提到的最低优先级任务在一段时间T内的CPU占用时间t0, 来推算CPU的占用率,计算公式为 CpuRate = (T-t0) /T 。下面所有实验的CPU占用率计算方法都同该方法。

实验方法

实验编号 1

实验环境 Intel P233 ,iRmx

目的 验证不Halt Halt 情况下CPU占用率的计算结果有没有偏差。

实验内容

100毫秒由高优先级任务 Task1 低优先级任务Task2 发送100 长度为900的消息,低优先级任务收到该消息后做 Times 次循环,通过改变Times的值来控制CPU占用率。分别测试不Halt Halt 情况下,相同Times 时根据上述方法计算处理的CPU占用率数值。

CPU Rate

Times

No Halt

Halt

100

6%

6%

1000

12%

12%

5000

35%

35%

10000

64%

64%

13000

82%

82%

15000

95%

95%

   

结论

Halt Halt 情况下CPU占用率的计算结果没有偏差

实验总结

我在做这个测试之前一直想当然的认为这个问题是HALT和不HALT在软件上的最大变化。我的理由是当HLT指令被执行,最低优先级任务按说应该不占用CPU时间,这样通过得它的CPU占用时间来计算CPU占用率就会有很大偏差。

然而当我做过测试以后,惊讶地发现HALT和不HALT CPU占用率的计算没有什么变化。经过反思后,我恍然大悟,原来操作系统在计算任务的CPU占用时间时是以任务的上下文切换作为统计的触发条件,当任务在执行HLT指令时操作系统并没有进行任务上下文切换,操作系统自然 认为CPU 进入AUTO HALT 状态的这段时间依然是被该任务占用的。

 

CPU 的降温幅度

实验方法

实验编号 2

实验环境Intel PIII 700 CPU 带小散热片 ,iRmx

目的 验证不Halt Halt 情况下不同CPU占用率条件下对CPU温度的影响。

实验内容

测出两种情况下不同CPU占用率对应的CPU温度。

CPU占用率

温度(No Halt)摄氏度

温度(Halt)摄氏度

100%

54

54

80%

54

51

60%

54

47

40%

54

45

20%

54

42

10%

54

40

3%

54

38

从上面测得的数据来看CPU在执行HLT指令后,温度确实有了很明显的下降。下面我们看看上面测得的值和从温度理论推导出来的结果是否吻合。

根据温度理论,CPU的功耗E,热阻R 温度T 三者之间的关系是

T-T0 = E×R ,T0 为初始温度

CPU 占用率r在通常情况下和功耗E成正比,CPUHALT以后还有部分在工作,以及环境温度的影响,所以CPU肯定存在一个初始温度,即r=0时的温度。

在热阻一定的情况下,根据上面所述我们可以设 r = K(T-T0),或T = r/K + T0

其中R=1/K

r=100 ,T=54 r= 10 ,T=40 带入上面公式,得K=6.4 ,T0 = 38.4

理论值对应的温度表为

CPU占用率

温度(Halt)摄氏度

误差

100%

54.0

0

80%

50.9

+0.1

60%

47.8

-0.8

40%

44.6

+0.4

20%

41.5

+0.5

10%

40.0

0

3%

38.8

-0.8

0%

38.4

-

由于我使用的温度计的误差范围在正负1摄氏度范围内,所以上面的测试结果符合理论推导的结果。

结论

CPU 在执行HLT指令后,CPU温度和CPU占用率成正比,和CPU热阻成反比,相同散热条件下,CPU占用率越高,CPU温度越高;相同CPU占用率条件下,热阻越大,即散热越不好,CPU 温升幅度越大。

对系统实时性的影响

实验方法

实验编号 3

实验环境 Intel P233 ,iRmx

目的 验证不Halt Halt 情况下不同CPU占用率条件下软件实时性是否受到影响。

实验内容

CPU 占用率的计算和获得方法同实验1。通过Pentium CPU的一个扩展指令RDTSC(Read Time Stamp Counter) 获得计算机启动以后累计的系统时钟数 sysclkcounter。在实验的软件系统的高最优先级任务CMOSTIMETASK 中断任务中计算每次进入该中断时sysclkcounter 和上次中断时的差值,得到两次中断任务的时间间隔。CMOS 中断每十毫秒发生一次。计算不同CPU占用率下 No Halt Halt CMOS 中断间隔的系统时钟数。

因为 CMOS 中断本身有一定误差,sysclkcounter interval 的有效数字我们只精确到十万位,即时间精确到1毫秒左右。

sysclkcounter

interval

Cpu Rate

No Halt

Halt

3%

1100000

1100000

10%

1100000

1100000

30%

1100000

1100000

50%

1100000

1100000

80%

1100000

1100000

90%

1100000

1100000

   

实验编号 4

实验环境 Intel P233 ,iRmx

目的 验证不Halt Halt 情况下不同中断频度条件下软件实时性是否受到影响。

实验内容

通过向系统不停发送UDP数据包来触发网卡中断,测试不同数据流量下CMOS 中断间隔的系统时钟数。

因为 CMOS 中断本身有一定误差,sysclkcounter interval 的有效数字我们只精确到十万位,即时间精确到1毫秒左右。

 

每百毫秒发送的UDP包数

包大小(UDP包长度)

CPU 占用率(No Halt)

CPU 占用率(Halt)

10毫秒系统时钟次数,精确到10万次(No Halt)

10毫秒系统时钟次数,精确到10万次(Halt)

每秒钟网卡中断数

0

-

3%

3%

1100000

1100000

20

1

10

4%

4%

1100000

1100000

110

50

10

27%

27%

1300000

1300000

200

100

10

56%

56%

1800000

1800000

320

150

10

90%

90%

2300000

2300000

370

实验分析

如果读者细心的话,会发现当网卡中断数增加以后,CMOS中断间隔时间有很大的变化,我在最初看到这个结果时一时无法理解,因为CMOS中断的优先级是我所做实验的系统中最高的(高于网卡中断),网卡中断怎么会对比自己优先级高的CMOS中断产生这么大的影响呢?后来我发现,我所做实验的软件系统中,在响应网卡中断时关闭了所有的中断包括比它优先级高的CMOS中断,这样做的目的是为了防止中断重入时造成堆栈不足,导致系统崩溃。那么这样就不难理解为什么网卡中断会对CMOS中断有如此的影响了。

不过在相同影响的情况下no halt halt 没有什么差别。

结论

HLT 指令的执行对软件系统实时性没有影响。

 

研究总结

通过上述实验,我们可以下结论,CPU 在执行HLT指令后,CPU温度和CPU占用率成正比,和CPU热阻成反比,相同散热条件下,CPU占用率越高,CPU温度越高;相同CPU占用率条件下,热阻越大,即散热越不好,CPU 温升幅度越大。

CPU 执行HLT指令对于实时操作系统的实时性没有影响。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值