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. BurpSuite的基础使用,这个教程有“坑”?

    BurpSuite简介 BurpSuite是一款辅助渗透的工具,可以给我们带来许多便利.Burp给我们提供了简单的HTTP抓包改包,数据枚举模块,以及各种安全漏洞的手动式扫描与爬虫式扫描,还有很多经常 ...

  2. SQL Server如何查看存储过程的执行计划

    有时候,我们需要查看存储过程的执行计划,那么我们有什么方式获取存储过程的历史执行计划或当前的执行计划呢? 下面总结一下获取存储过程的执行计划的方法. 1:我们可以通过下面脚本查看存储过程的执行计划,但 ...

  3. linux watch 命令使用;进行循环执行程序,并显示结果;

    watch 能间歇地执行程序,并将输出结果以全屏的方式显示,默认时2s执行一次: watch -n 5 ping -c 1 www.baidu.com # 进行循环5秒钟,发送一次ping包: 使用范 ...

  4. sqlite3 国产化如何添加密码

    sqlite3 国产化如何添加密码 sqlite3 国产化如何添加密码sqlite3 国产化如何添加密码

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

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

  6. 洛谷 SP14932 LCA - Lowest Common Ancestor

    洛谷 SP14932 LCA - Lowest Common Ancestor 洛谷评测传送门 题目描述 A tree is an undirected graph in which any two ...

  7. Codeforces Round #594 (Div. 2) B. Grow The Tree 水题

    B. Grow The Tree Gardener Alexey teaches competitive programming to high school students. To congrat ...

  8. .NET Core NuGet 多项目套餐打包的正确姿势

    NuGet 默认只支持一个菜一个菜打包,不支持套餐打包.当对一个 csproj 项目进行 nuget 打包时(比如使用 dotnet pack 命令),只会将当前项目 build 出来的 dll 程序 ...

  9. golang数据结构之冒泡排序

    //BubbleSort 冒泡排序 func BubbleSort(arr *[]int) { ; i >= ; i-- { ; j-- { if (*arr)[j] > (*arr)[i ...

  10. Ubuntu更新python3.5到python3.7

    一 下载wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1rc2.tgz 二 解压tar zxvf Python-3.7.1rc2.tg ...