## CPU占用率介绍 ### 什么是系统CPU占用率 系统CPU占用率(CPU Percent)是指周期时间内系统的CPU占用率,用于表示系统一段时间内的闲忙程度,也表示CPU的负载情况。系统CPU占用率的有效表示范围为0~10000,其精度为万分比。10000表示系统满负荷运转。 ### 为什么需要系统CPU占用率 系统CPU占用率表示系统的负载情况,用户可以通过查看系统的负载,控制某些业务的流量以达到提高系统使用效率的目的。 ### 什么是线程CPU占用率 线程CPU占用率指单个线程的CPU占用率,用于表示单个线程在一段时间内的闲忙程度。线程CPU占用率的有效表示范围为0~10000,其精度为万分比。10000表示在一段时间内系统一直在运行该线程。单核系统所有线程(包括中断和空闲任务)的CPUP之和为10000。 ``` 说明: 采样周期内被删除任务的CPUP只计算,不显示,所以获取所有线程的CPUP有可能小于总值(单核为10000,多核10000*CPU核数)。 ``` ### 为什么需要线程CPU占用率 线程CPU占用率表示系统中所有线程对CPU的占用情况,用户可以通过查看各个线程CPU占用率来判断所有线程的负载,以便及时获取该线程的负载是否符合设计预期。 ## 运作机制 ### 系统CPU占用率运作机制 UniProton的系统级CPU占用率依赖于Tick模块,通过Tick采样IDLE任务或IDLE软中断计数来实现。 #### 获取系统CPU占用率原理 - 任务框架:系统通过对采样周期内IDLE任务的循环次数与空跑IDLE任务的循环次数比较,计算出此时的系统CPU占用率。 #### CPU占用率告警 在每个采样点,获取当前CPU占用率,如果CPU占用率超过用户配置的CPU占用率告警阈值,通过用户注册的回调函数把告警信息通知用户。 持续的CPU占用率超过告警阈值,只有第一次进行告警,在本次告警恢复后,才能进行下一次告警。 当CPU占用率从告警状态返回到低于CPU占用率告警恢复阈值时,通过回调函数,报告恢复信息。 在统计当前CPU占用率时,如果此时系统运行时间没有达到第一个采样周期,即系统还未统计CPU占用率,则返回的占用率统计结果为初始值(0xffffffff)。 ``` 说明: 任务框架:idle线程是任务,即任务没有被裁剪的情况。 ``` ### 线程CPU占用率运作机制 UniProton的线程级CPU占用率支持两种方式确定采样周期。第一种,配置项中的采样周期配置不为0,则线程级CPUP采样周期为配置项中的采样周期值,这种方式,需要依赖于Tick模块;第二种,配置项中的采样周期配置为0,则采样周期为两次调用SRE_CpupNow或者SRE_CpupThread接口之间的间隔。 #### 获取线程CPU占用率原理 任务框架:系统通过计算在一定时间内,单个线程占用的CPU时间,计算出其CPU占用率。 ``` 说明: 任务框架:idle线程是任务,即任务没有被裁剪的情况。 ```