varch/doc/cpul.md

2.0 KiB
Raw Permalink Blame History

介绍

cpul 是一个用于C语言的简单CPU负载cpuload模块定义了一系列与CPU负载管理相关的数据结构、宏以及函数接口旨在方便开发者在C语言项目中对CPU负载进行控制和监测等操作。

接口

函数

cpul_init函数

int cpul_init(CPUL *cpul);

功能描述:用于初始化CPUL实例,将CPUL结构初始化为默认值并检查传入指针的有效性。初始化需要提供获取原始的负载的函数方法针对linux的cpuload可以参考 test_cpul.c

cpul_get函数

int cpul_get(CPUL *cpul, uint16_t *load);

功能描述:从CPUL实例中获取当前的CPU负载值同时会检查参数以及状态的有效性。

cpul_set函数

int cpul_set(CPUL *cpul, uint16_t load);

功能描述:设置CPUL实例的目标CPU负载值会对传入的参数进行有效性检查。

cpul_task函数

int cpul_task(CPUL *cpul);

功能描述执行一个CPU负载管理任务根据当前负载值和目标负载值来对CPU负载进行管理操作。

使用例子

void *loadgen_entry(void *ptr)
{
    #define PERIOD 10
    const int coreid = *(int *)ptr;
    CPUL cpul;
    int ret = 0;
    uint32_t count = 0;
    uint16_t load = 0;

    cpul.coreid = coreid;
    cpul.resolution = 10;
    cpul.raw = cpul_raw;
    ret = cpul_init(&cpul);

    ret = cpul_set(&cpul, 5000);

    while(1)
    {
        count += PERIOD;
        if (count >= 25200000) count = 0;

        if (count % 1000 == 0)
        {
            ret = cpul_get(&cpul, &load);
            printf("cpul_get<%d> %2d.%02d%%, %d, %d\r\n", coreid, (uint16_t)(load / 100), load % 100, cpul.ctrl.tload, cpul.ctrl.refine);
        }

        cpul_task(&cpul);
        usleep(1000 * PERIOD);
    }
}

通过这些函数接口开发者可以方便地在C语言程序中实现对CPU负载的初始化、获取、设置以及管理等功能。