怎么获取多核环境下每个cpu的使用率
2个回答
展开全部
方法1: 使用CPU的处理能力基准计算实时CPU占用率
具体描述:
(1) 在RTOS系统启动前, 使用Tick中断测试CPU的处理能力基准 CPUPerformanceBase;
(2) 在系统进入运行后, 使用空闲任务执行与测试CPU处理能力基准完全相同的算法, 得到RTCPUPerformance.
(3) 周期地计算CPU占用率, 并清除RTCPUPerformance的值, 一般每秒钟计算一次:
RealTime CPU Load = 1 - (RTCPUPerformance/CPUPerformanceBase) * 100%
评价:
这个算法只适用于工控, 电信等对不需要使CPU进入掉电保护模式的领域。
方法2: 在Tick中断中对RTOS中的任务进行采样
具体描述:
(1) 系统进入运行后, 每次Tick中断发生时, 采样一下当前正在执行的任务, 如果CPU处于HALT态, 累加haltTimes
(2) 周期性地计算CPU占用率, 一般每秒钟计算一次, 并清除haltTimes:(tickIntFrequance表示Tick中断的发生频率)
RealTime CPU Load = haltTimes / tickIntFrequance
某个任务对CPU占用率的贡献 = 一个周期内该任务被采样到的次数 / tickIntFrequance * 100%
评价:
这个算法适用于对CPU占用率精度要求不高的消息电子产品。
方法3: 精确计算每个任务对CPU占用率的贡献
具体描述:
(1) 除Tick中断外,另开一个比Tick中断频率快若干倍的周期中断(就叫AUXTimer中断吧), 这个中断只对一个计数器执行一次累加。
(2) 在OS每次执行任务切换时读取该计数器的值(AUXTimer), 并保存到TCB中, 比如, 从任务Task1切换到任务Task2, 算法如下:
Task1, 换出动作:
task1的结束运行时间 = AUXTimer的当前值
task1的总运行时间 = task1的总运行时间 + task1的结束运行时间 - task1的开始运行时间
Task2, 换入动作:
task2的开始运行时间 = AUXTimer的当前值
(以上算法中没有考虑数字回绕, 在工程实现时应当考虑, 发生回绕后任务的结束运行时间小于任务的开始运行时间。
(3) 周期性地计算CPU占用率, 一般每秒钟计算一次, 并清除每个任务的总运行时间, 下面的公式中, 一个周期内的总时间等于AUXTimer周期除以Tick周期得到的倍数:
某个任务对CPU占用率的贡献 = 一个周期内该任务的总运行时间 / 一个周期内的总时间
RealTime CPU Load = 所有任务的CPU占用率之和
具体描述:
(1) 在RTOS系统启动前, 使用Tick中断测试CPU的处理能力基准 CPUPerformanceBase;
(2) 在系统进入运行后, 使用空闲任务执行与测试CPU处理能力基准完全相同的算法, 得到RTCPUPerformance.
(3) 周期地计算CPU占用率, 并清除RTCPUPerformance的值, 一般每秒钟计算一次:
RealTime CPU Load = 1 - (RTCPUPerformance/CPUPerformanceBase) * 100%
评价:
这个算法只适用于工控, 电信等对不需要使CPU进入掉电保护模式的领域。
方法2: 在Tick中断中对RTOS中的任务进行采样
具体描述:
(1) 系统进入运行后, 每次Tick中断发生时, 采样一下当前正在执行的任务, 如果CPU处于HALT态, 累加haltTimes
(2) 周期性地计算CPU占用率, 一般每秒钟计算一次, 并清除haltTimes:(tickIntFrequance表示Tick中断的发生频率)
RealTime CPU Load = haltTimes / tickIntFrequance
某个任务对CPU占用率的贡献 = 一个周期内该任务被采样到的次数 / tickIntFrequance * 100%
评价:
这个算法适用于对CPU占用率精度要求不高的消息电子产品。
方法3: 精确计算每个任务对CPU占用率的贡献
具体描述:
(1) 除Tick中断外,另开一个比Tick中断频率快若干倍的周期中断(就叫AUXTimer中断吧), 这个中断只对一个计数器执行一次累加。
(2) 在OS每次执行任务切换时读取该计数器的值(AUXTimer), 并保存到TCB中, 比如, 从任务Task1切换到任务Task2, 算法如下:
Task1, 换出动作:
task1的结束运行时间 = AUXTimer的当前值
task1的总运行时间 = task1的总运行时间 + task1的结束运行时间 - task1的开始运行时间
Task2, 换入动作:
task2的开始运行时间 = AUXTimer的当前值
(以上算法中没有考虑数字回绕, 在工程实现时应当考虑, 发生回绕后任务的结束运行时间小于任务的开始运行时间。
(3) 周期性地计算CPU占用率, 一般每秒钟计算一次, 并清除每个任务的总运行时间, 下面的公式中, 一个周期内的总时间等于AUXTimer周期除以Tick周期得到的倍数:
某个任务对CPU占用率的贡献 = 一个周期内该任务的总运行时间 / 一个周期内的总时间
RealTime CPU Load = 所有任务的CPU占用率之和
北京北龙超级云计算有限责任公司
2021-11-11 广告
2021-11-11 广告
实力强不强,谁更好的问题是见仁见智的。一般都是要把机构的资质、行业经验、外部资源、成功案例情况等综合来评估和考量。是需要从当前自己关心的方面去衡量,不是一句话两句话能说完的。如果想了解更多详细信息,可以咨询下北京北龙超级云计算有限责任公司。...
点击进入详情页
本回答由北京北龙超级云计算有限责任公司提供
展开全部
获取代码: using System; using System.Collections.Generic; using System.Diagnostics; using System.Threading; using System.IO; using System.Text; using System.Management; using System.Runtime.InteropServices; namespace Lemon...
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询