首页 > 系统相关 >linux控制cpu占用率

linux控制cpu占用率

时间:2022-10-31 16:07:34浏览次数:50  
标签:std int INTERVAL linux include 占用率 cpu


之前在<编程之美>上提到说控制cpu的使用率使能在任务管理器上画一条正弦线
现在下面提供一个在Linux平台上实现的控制cpu频率在某个值
​cpu_load.c​​

#include <iostream>
#include <pthread.h>
#include <time.h>
#include <math.h>
#include <unistd.h>

using namespace std;

typedef long long int int64;
const int NUM_THREADS = 1; //CPU core nums
int INTERVAL = 100;
int cpuinfo = 15; //CPU utilization rate

// time unit is "ms"
int64 GetTickCount()
{
timespec now;
int64 sec, nsec;

clock_gettime(CLOCK_MONOTONIC, &now);
sec = now.tv_sec;
nsec = now.tv_nsec;

return sec * 1000 + nsec / 1000000;
}

void* CPUCost(void *args)
{
int busyTime = INTERVAL * cpuinfo / 100;
int idleTime = INTERVAL - busyTime;
int64 startTime = 0;

std::cout << "XXXX CPUCost" << std::endl;
std::cout << "XXXX cpuinfo = " << cpuinfo << std::endl;

/*
* within INTERVAL ms, INTERVAL = busyTime + idleTime,
* spend busyTime ms to let cpu busy,
* spend idleTime ms top let cpu idle
*/
while (true) {
startTime = GetTickCount();
while((GetTickCount() - startTime) <= busyTime);
usleep(idleTime * 1000);
}
}

int main(int argc, char **argv)
{
pthread_t t[NUM_THREADS];
int ret;

std::cout << "please input cpu utilization rate" << std::endl;
std::cin >> cpuinfo;
for(int i = 0; i < NUM_THREADS; i++) {
ret = pthread_create(&t[i], NULL, CPUCost, NULL);
if(ret)
std::cout << "XXXX create err" << std::endl;
}

pthread_exit(NULL);
return 0;
}

编译: ​​g++ cpu_load.c -lpthread -lrt -o cpu_load​

1.设置cpu的占用率为10%

linux控制cpu占用率_编程之美


linux控制cpu占用率_#include_02

2.设置cpu的占用率为60%

linux控制cpu占用率_ios_03


linux控制cpu占用率_#include_04

3.设置cpu的占用率为100%

linux控制cpu占用率_ios_05


linux控制cpu占用率_#include_06


程序需要在空闲的机器上运行,才能比较精确地获取到设置的CPU利用率


标签:std,int,INTERVAL,linux,include,占用率,cpu
From: https://blog.51cto.com/u_15854579/5810102

相关文章

  • linux cpu使用率
    限制某个进程的cpu使用率cd/sys/fs/cgroup/cpumkdircg1//在cpu目录下创建一个cpu控制族群,这时会在这个目录下自动生成几个文件,其中,限制cpu使用率主要和两个文件有关:......
  • linux下PS1命令提示符
    PS1PS1就是用来设置命令提示符的环境变量以下是PS1中可以使用的转义字符\d:代表日期,格式为weekdaymonthdate,例如:"MonAug1"\H:完整的主机名称。例如:我的机器名称为......
  • linux 利用rsync同步文件到多台机器
    背景:我需要经常把160机器上的文件,同步到171,111,105等为什么选择rsync?它可以实现增量同步。解决方案:1.安装sudoapt-getinstallrsync#Debiansudoyum......
  • Linux下磁盘管理工具:hdparm/iostat/parted/fdiisk/badblocks/smartctl/losetup/sg3_ut
    一、hdparm:    hdparm可以检测,显示与设定IDE,SCSI,SATA,SAS硬盘的硬件参数,    如:hdparm-I/dev/sdc可以获取sdc的硬件信息    hdparm-W0/de......
  • linux下项目自动化备份
    #!/bin/bash#日期:20220927#执行环境:192.168.25.38#功能:每周自动备份/data下"elasticsearch|project|software"的数据#描述:此脚本每周一执行一次,自动删......
  • linux基础命令4
    用户和组群账户管理用户的角色是通过UID(用户ID号)来标识的,每个用户的UID都是不同的。在Linux系统中有三大类用户,分别是root用户、系统用户和普通用户。root用户UID为0......
  • Linux安装MySQL
    我使用的是yum安装MySQL,但是MySQL是没有yum源的,这时候就要去MySQL官网下载,下面步骤是安装最新的yum源,如果不想使用最新的这里我就直接给下载地址了https://dev.mysql.com/......
  • CentOS7 linux查看端口号的
    文章目录​​1.查看已开放的端口​​​​firewall-cmd--list-ports​​​​2.查询端口号8080是否开启​​​​firewall-cmd--query-port=8080/tcp​​​​3.开放端口(开放......
  • linux 如何ssh免密登录
    需求:因为有多台服务器,需要互相拷贝数据,每次都要输入密码有些麻烦。所以,想免密登录。背景:有两台服务器:服务器A:192.168.49.171 服务器B:192.168.49.160 需......
  • linux expect
    linuxexpect介绍expect是由DonLibes基于Tcl(ToolCommandLanguage)语言开发的,主要应用于自动化交互式操作的场景,借助Expect处理交互的命令,可以将交互过程如:ssh登录,ftp......