1. 概述

1.1 基本概念

CPU(中央处理器, Central Processing Unit)占用率可以分为系统CPU占用率和任务CPU占用率两种。

系统CPU占用率(CPU Percent)是指周期时间内系统的CPU占用率,用于表示系统一段时间内的闲忙程度,也表示CPU的负载情况。系统CPU占用率的有效表示范围为0~100,其精度(可通过配置调整)为百分比。 100表示系统满负荷运转。

任务CPU占用率指单个任务的CPU占用率,用于表示单个任务在一段时间内的闲忙程度。任务CPU占用率的有效表示范围为0~100,其精度(可通过配置调整)为百分比。 100表示在一段时间内系统一直在运行该任务。

用户通过系统级的CPU占用率,判断当前系统负载是否超出设计规格。

通过系统中各个任务的占用情况,判断查看当前的各个任务的CPU占用率是否符合设计的预期。

1.2 运作机制

Huawei LiteOS的CPUP(CPU Percent,系统CPU占用率)采用任务级记录的方式,在任务切换中,记录任务启动时间,和任务切出或者退出时间,每次任务退出,系统会累加整个任务的占用时间。

在los_config.h中可以对CPU占用率模块进行选配,对于CPU占用模块,可通过LOSCFG_KERNEL_CPUP配置打开(YES)和关闭(NO)。

Huawei LiteOS提供以下两种CPU占用率的信息查询:

  • 系统CPU占用率。
  • 任务CPU占用率。

CPU占用率的计算方法:

系统CPU占用率=系统中除idle任务外其他任务运行总时间/系统运行总时间

任务CPU占用率=任务运行总时间/系统运行总时间

2 开发指导

2.1 使用场景

通过系统级的CPU占用率,判断当前系统负载是否超出设计规格。

通过系统中各个任务的占用情况,判断查看当前的各个任务的CPU占用率是否符合设计的预期。

2.2 功能

Huawei LiteOS系统中的CPU占用率模块为用户提供下面几种功能。

功能分类 接口名 描述
获取系统CPU占用率 LOS_SysCpuUsage 获取当前系统CPU占用率
--- LOS_HistorySysCpuUsage 获取系统历史CPU占用率
获取任务CPU占用率 LOS_TaskCpuUsage 获取指定任务CPU占用率
- LOS_HistoryTaskCpuUsage 获取指定任务历史CPU占用率
- LOS_AllTaskCpuUsage 获取所有任务CPU占用率

2.3 开发流程

CPU占用率的典型开发流程:

  1. 调用获取系统CPU使用率函数LOS_SysCpuUsage。
  2. 调用获取系统历史CPU使用率函数LOS_HistorySysCpuUsage。
  • 系统根据不同模式进入任务获取不同时间段的系统计数值,恢复中断;
  1. 调用获取指定任务CPU使用率函数LOS_TaskCpuUsage。
  • 若任务已创建并且可用,则关中断,正常获取,恢复中断;
  • 若任务未创建或不可用,则返回错误码;
  1. 调用获取指定任务历史CPU使用率函数LOS_HistoryTaskCpuUsage。
  • 若任务已创建并且可用,则关中断,根据不同模式正常获取,恢复中断;
  • 若任务未创建或不可用,则返回错误码;
  1. 调用获取所有任务CPU使用率函数LOS_AllTaskCpuUsage。
  • 若CPUP已初始化,则关中断,根据不同模式正常获取,恢复中断;
  • 若CPUP未初始化或有非法入参,则返回错误码;

3 注意事项

  • 由于CPU占用率对性能有一定的影响,同时只有在产品开发时需要了解各个任务的占用率,因此建议在产品发布时,关掉CPUP模块的裁剪开关LOSCFG_KERNEL_CPUP。

  • 通过上述接口获取到的返回值是千分值。该值可以通过与LOS_CPUP_PRECISION_MULT相除获得相应的百分值。

4 编程实例

4.1 实例描述

本实例实现如下功能:

  1. 创建一个用于CPUP测试的任务。
  2. 获取当前系统CPUP。
  3. 以不同模式获取历史系统CPUP。
  4. 获取创建的CPUP测试任务的CPUP。
  5. 以不同模式获取创建的CPUP测试任务的CPUP。

4.2 编程示例

前提条件:

  • 在los_config.h中,将OS_INCLUDE_CPUP配置项打开。

代码实现如下:

#include "los_task.h"
#include "los_cpup.h"
#define MODE 4
UINT32 cpupUse;
OS_CPUP_TASK_S pstCpup;
UINT16 pusMaxNum = 0;
UINT32 g_CpuTestTaskID;
VOID Example_cpup()
{
printf("entry cpup test example\n");
while(1) {
usleep(100);
}
}
UINT32 it_cpup_test()
{
UINT32 uwRet;
TSK_INIT_PARAM_S CpupTestTask;
/*创建用于cpup测试的任务*/
memset(&CpupTestTask, 0, sizeof(TSK_INIT_PARAM_S));
CpupTestTask.pfnTaskEntry = (TSK_ENTRY_FUNC)Example_cpup;
CpupTestTask.pcName = "TestCpupTsk"; /*测试任务名称*/
CpupTestTask.uwStackSize = OS_TSK_DEFAULT_STACK_SIZE;
CpupTestTask.usTaskPrio = 5;
CpupTestTask.uwResved = LOS_TASK_STATUS_DETACHED;
uwRet = LOS_TaskCreate(&g_CpuTestTaskID, &CpupTestTask);
if(uwRet != LOS_OK)
{
printf("CpupTestTask create failed .\n");
return LOS_NOK;
}
usleep(100);
/*获取当前系统cpu占用率*/
cpupUse = LOS_SysCpuUsage();
printf("the current system cpu usage is: %d\n",cpupUse);
/*获取历史系统cpu 1s内的占用率,历史cpu占用率的获取分三种模式,MODE1表示10s 内占用率,MODE2表示
前一个1s内占用率,MODE3表示小于1s内*/
//cpupUse = LOS_HistorySysCpuUsage(MODE1);
//printf("the history system cpu usage in 10s: %d\n",cpupUse);
//cpupUse = LOS_HistorySysCpuUsage(MODE2);
//printf("the history system cpu usage in 1s: %d\n",cpupUse);
cpupUse = LOS_HistorySysCpuUsage(MODE);
printf("the history system cpu usage in <1s: %d\n",cpupUse);
/*获取指定任务的cpu占用率,该测试例程中指定的任务为以上创建的cpup测试任务*/
cpupUse = LOS_TaskCpuUsage(g_CpuTestTaskID);
printf("cpu usage of the CpupTestTask:\n TaskID: %d\n usage: %d\n",g_CpuTestTaskID,cpupUse);
/*获取指定历史任务在<1s内的cpu占用率,该测试例程中指定的任务为以上创建的cpup测试任务*/
cpupUse = LOS_HistoryTaskCpuUsage(g_CpuTestTaskID, MODE);
printf("cpu usage of the CpupTestTask in <1s:\n TaskID: %d\n usage:%d
\n",g_CpuTestTaskID,cpupUse);
return LOS_OK;
}

4.3 结果验证

编译运行得到的结果为:

--- Test start---
ntry cpup test example
uawei LiteOS# the current system cpu usage is : 49
he history system cpu usage in <1s: 50
pu usage of the CpupTestTask:
askID:4
sage:17
pu usage of the CpupTestTask in <1s:
askID:4
sage:12
---Test End ---```

liteos CPU占用率(十六)的更多相关文章

  1. 记一次CPU占用率和load高的排查

    前不久公司进行了一次大促,晚上值班.大促是从晚上8点多开始的,一开始流量慢慢的进来,观察了应用的各项指标,一切都是正常的,因为这是双11过后的第一次大促,想着用户的购买欲应该不会太强,所以我们的运维同 ...

  2. 编程之美读书笔记1.1——让CPU占用率曲线听你的指挥

    http://blog.csdn.net/pipisorry/article/details/36189155 <strong><span style="font-size ...

  3. FL Studio中有关减少CPU占用率的一些技巧

    在使用FL Studio20进行音乐制作时经常容易碰到的工程卡顿,声音延迟现象绝大部分是由于电脑CPU超负荷运行而导致的.除了提升电脑本身的性能以外,在FL Studio20中我们也可以运用一些方法来 ...

  4. 查看Windows下引起Oracle CPU占用率高的神器-qslice

    前言: qslice是一个win2000的工具包,能分析进程的cpu占用率,我们用于分析oracle的性能 这是绿色的软件无需安装. 我们经常会碰到oracle的CPU占用居高不下,无法快速定位到问题 ...

  5. Visual Studio 2013 Ultimate因为CodeLens功能导致Microsoft.Alm.Shared.Remoting.RemoteContainer.dll高CPU占用率的折中解决方案

    1.为什么Microsoft.Alm.Shared.Remoting.RemoteContainer.dll的CPU占用率以及内存使用率会那么高? 在Visual Studio 2013 Ultima ...

  6. C#获取CPU占用率、内存占用、磁盘占用、进程信息

    代码: using System; using System.Collections.Generic; using System.Diagnostics; using System.Threading ...

  7. CPU占用率呈正弦实现,及实时输出进程和线程的CPU占用率

    CPU占用率呈正弦实现,及实时输出进程和线程的CPU占用率 #include "stdafx.h" #include <windows.h> #include < ...

  8. 获取进程CPU占用率

    获取进程CPU占用率 // 时间转换 static __int64 file_time_2_utc(const FILETIME* ftime) { LARGE_INTEGER li; li.LowP ...

  9. Linux下java进程CPU占用率高分析方法

    Linux下java进程CPU占用率高分析方法 在工作当中,肯定会遇到由代码所导致的高CPU耗用以及内存溢出的情况.这种情况发生时,我们怎么去找出原因并解决. 一般解决方法是通过top命令找出消耗资源 ...

随机推荐

  1. ListenAndServe源码剖析

    使用goland追踪阅读ListenAndServe源码,剖析服务器启动流程 ListenAndServe阅读 func ListenAndServe(addr string, handler Han ...

  2. 记一次微信小程序的开发

    使用工具: 1.微信Web开发者工具 2.Visual Studio 2019 前端采用color UI,后端采用c# .net 过程中的几个重点点记录 1.color UI使用 下载colorUI以 ...

  3. ActiveMQ持久化到MySQL以及使用SSL协议通讯

    最近公司事情稍微少了点,研究下怎么优化几个系统的交互,因为我们目前使用的是长链接的同步接口,就考虑用下MQ来处理下.由于公司对安全有要求且和CA业务有关,则使用了SSL协议.此文使用的是Activem ...

  4. 监控redis命令 - monitor

    有时候我们需要知道客户端对redis服务端做了哪些命令操作.我们可以试用monitor命令来查看.它能清楚的看到客户端在什么时间点执行了那些命令. MONITOR 是一个调试命令,每个命令流回来的re ...

  5. [Linux] Nginx服务下统计网站的QPS

    单位时间的请求数就是QPS,那么在nginx服务的网站下,如果要统计QPS并且按从高到低排列,需要使用awk配合sort进行处理awk做的主要工作是把access每行日志按分隔符分开,然后循环每一行, ...

  6. 201871010102-常龙龙《面向对象程序设计(java)》第十二周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  7. Java入门之人需要注意的5大步骤

    作为最抢手的程序开发言语之一,Java在互联网领域中的方位无需赘言.抢手也带来了高薪和许多的作业时机,对那些预备通过学习Java来改动自己命运的同学来说,需求做好以下作业. 1.考虑一下 学习Java ...

  8. fis3打包中的一些注意事项

    1.在html文件中,如果在标签的style属性内添加路径,fis不会识别改路径并打包,如 2.fis主要针对静态文件进行打包.对其他文件打包会出现一些问题. 比如jsp页面.下面的例子script. ...

  9. Vue ---- 组件文件分析 组件生命周期钩子 路由 跳转 传参

    目录 Vue组件文件微微细剖 Vue组件生命周期钩子 Vue路由 1.touter下的index.js 2.路由重定向 3.路由传参数 补充:全局样式导入 路由跳转 1. router-view标签 ...

  10. oracle视图和索引

    视图和索引 视图 视图的作用 控制数据访问.简化查询.避免重复访问相同的数据 视图的优点 限制用户只能通过视图检索数据,用户看不到底层基表 注意事项 视图可以理解为临时表,会随着真实表的数据变化而自动 ...