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

    技术2022-05-11  117

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

     

     

    问题描述

    随着CPU主频的不断提高,在嵌入式领域,在iRmxpsosvxworks等实时操作系统下工作的高主频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 模式。此时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指令对于实时操作系统的实时性没有影响。

     


    最新回复(0)