linux下给CPU增加指定百分比的压力

博客介绍了编写程序控制CPU占用率的相关内容。因计算机CPU占率不同会影响性能,需编写程序将一个或多个CPU占用到指定值,如50%。还说明了使用方式,可通过调节参数达到不同占比,结束程序按Ctrl+C。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景和目的

一台计算机会因为当前CPU的占率不同情况表现出不同的稳定性和实时性以及其他性能情况。需要编写一个程序将一个CPU或者多个CPU占用到指定值的占用率,比如50%。很多工具都是直接一颗CPU占满,意义不大。故此特地写一个代码。

源代码

#include <thread>
#include <unistd.h>
#include <signal.h>
#include <functional>

#define SLEEP_TIME 8
#define SLEEP_RATE 2

bool b_exit = false;

static void my_handler(int sig)
{
    b_exit = true;
}

void cpu_run(int p_cpuid)
{
    cpu_set_t set;
    CPU_ZERO(&set);
    CPU_SET(p_cpuid, &set);
    pthread_setaffinity_np(pthread_self(), sizeof(set), &set);

    int64_t t = 0;
    while (!b_exit)
    {
        for (int i = 0; i < 1024; i++)
        {
            for (int j = 0; j < 1024 * 1024; j++)
            {
                t = 123456789;
                t *= 123456789;
            }
            if (i % SLEEP_RATE == 0)
            {
                std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIME));
            }
        }
    }
    if (b_exit) exit(0);
}

int main()
{
    signal(SIGINT, my_handler);
    int cpu_num = sysconf(_SC_NPROCESSORS_CONF);
    for (int i = 0; i < cpu_num; i++)
    {
        std::thread *p = new std::thread(std::bind(cpu_run, i));
    }
    std::this_thread::sleep_for(std::chrono::hours(24));
    return 0;
}

使用方式

g++ main.cpp -lpthread -std=c++17
./a.out

打开另个窗口使用HTOP观察所有CPU占比。由于各种各样的CPU性能差异,可以通过调节SLEEP_TIME和SLEEP_RATE的值来达到不同的占比情况。(注意:此处默认会将所有CPU达到同一个使用率,如果不想耗费所有CPU简单修改一下代码即可)。想要结束在运行程序窗口Ctrl+C即可。

使用效果

一个测试套件实现了对linux系统资源使用率的设定,目前版本包含: 1. cpu_limit实现了linux操作系统内在指定cpu各核心上分别占用指定cpu利用率; 2. memory_limit实现了linux操作系统内占用一定的内存使得空闲空间到达某个设定值。 文件列表 ******************************************************************************* 文件名称    cpu_limit 1、简述                  程序的作用是将指定cpu各核心上分别占用指定cpu利用率。 2、基本用法              cpu_limit [[int cpu_number] float cpu_utilization_percentage]             主要有2种使用方法:             a. cpu_limit             说明:             单独执行不带参数列表的cpu_limit时,可以在系统支持范围内任意选择2个或者两个以上cpu,并且支持分别对每个cpu的使用率进行设定。Cpu范围可以是连续的,但要保证范围内的cpu都是存在的,例如0-2表示cpu0、cpu1、cpu2;也可以是离散的,例如0.2.4表示cpu0、cpu2、cpu4。             b. cpu_limit [cpu_number] cpu_utilization_percentage             说明:             cpu_number 指定cpu的编号,如果省略则表示当前系统全部的核。             cpu_utilization_percentage 指定了统一的cpu利用率。 3、Example:             cpu_limit 0 0.5          cpu0的资源利用率增加50%。             cpu_limit 0.25           全部CPU的资源利用率增加25%。 4、注意:             a. 不要尝试输入非法的参数。             b. 不要输入不存在的cpu_number。             c. 不要输入float(0,1]范围以外的cpu_utilization_percentage。             d. 不要后台运行此程序。             f. 当前total定义为10000微秒,在测试中较稳定。但如果同时运行多个cpu_limit时,效果不好时,适当的调整total值即可。 ******************************************************************************* 文件名称    cpu_limit.c 1、简述                  cpu_limit程序源码。 2、基本用法             gcc cpu_limit.c -o cpu_limit -lpthread 3、注意:             a. 由于需要引用libpthread.so,所以编译时要附加-lpthread参数。 ******************************************************************************* 文件名称    cpu_limit.h 1、简述                  cpu_limit程序头文件。 ******************************************************************************* 文件名称    memory_limit 1、简述                  程序的作用是占用一定的内存使得空闲内存空间达到某个制定值。 2、基本用法              memory_limit free_mem    说明:             free_mem的格式为xxxxxxxxU,其中xxxxxxxx代表数值部分,U代表单位部分。             数值必须是正整数,单位部分可以是以下几种之一:             G(g)            GiB             M(m)            MiB             K(k)            KiB             [B]             Byte 3、Example:
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值