zoukankan      html  css  js  c++  java
  • liteos CPU占用率(十六)

    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
    ");
        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 .
    ");
    return LOS_NOK;
    }
    usleep(100);
    /*获取当前系统cpu占用率*/
    cpupUse = LOS_SysCpuUsage();
    printf("the current system cpu usage is: %d
    ",cpupUse);
    /*获取历史系统cpu 1s内的占用率,历史cpu占用率的获取分三种模式,MODE1表示10s 内占用率,MODE2表示
    前一个1s内占用率,MODE3表示小于1s内*/
    //cpupUse = LOS_HistorySysCpuUsage(MODE1);
    //printf("the history system cpu usage in 10s: %d
    ",cpupUse);
    //cpupUse = LOS_HistorySysCpuUsage(MODE2);
    //printf("the history system cpu usage in 1s: %d
    ",cpupUse);
    cpupUse = LOS_HistorySysCpuUsage(MODE);
    printf("the history system cpu usage in <1s: %d
    ",cpupUse);
    /*获取指定任务的cpu占用率,该测试例程中指定的任务为以上创建的cpup测试任务*/
    cpupUse = LOS_TaskCpuUsage(g_CpuTestTaskID);
    printf("cpu usage of the CpupTestTask:
     TaskID: %d
     usage: %d
    ",g_CpuTestTaskID,cpupUse);
    /*获取指定历史任务在<1s内的cpu占用率,该测试例程中指定的任务为以上创建的cpup测试任务*/
    cpupUse = LOS_HistoryTaskCpuUsage(g_CpuTestTaskID, MODE);
    printf("cpu usage of the CpupTestTask in <1s:
     TaskID: %d
     usage:%d
    
    ",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 ---```
  • 相关阅读:
    329. Longest Increasing Path in a Matrix
    2、evaluate-reverse-polish-notation
    1、minimum-depth-of-binary-tree
    2、替换空格
    C风格字符串和C++string对象的相互转化
    1、二维数组中的查找
    8、sort排序中比较函数的几种应用方式
    1131(★、※)Subway Map
    7、(★、※)判断一个序列是否是二叉查找树的后序、前序遍历序列
    041219~051219流水账
  • 原文地址:https://www.cnblogs.com/linhaostudy/p/11047259.html
Copyright © 2011-2022 走看看