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

类别:软件工程 点击:0 评论:0 推荐:

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

 

 

问题描述

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

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

 

研究环境

硬件环境 Intel P 233 ,Intel PIII 700

软件环境 iRmx 实时操作系统

 

工作原理

上图是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 模式。此时Cpu将HLT指令插入指令序列,并停止处理指令序列,直到发生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成正比,CPU在HALT以后还有部分在工作,以及环境温度的影响,所以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指令对于实时操作系统的实时性没有影响。

 

本文地址:http://com.8s8s.com/it/it37593.htm