我正在寻找一种方法,以一致的方式占用单个CPU的80%(或任何其他数量)。
我需要这个用于测试在特定CPU利用率条件下触发的组件的单元测试
为此,我可以假设机器处于空闲状态。
这是一种强大且可能与操作系统无关的方法吗?
答案 0 :(得分:15)
没有80%的时间占用CPU。 CPU始终处于使用状态或空闲状态。在一段时间内,您可以将平均使用率提高到80%。是否有一个特定的时间段你希望它被平均?这个伪代码应该可以跨平台工作,超过1秒的CPU使用率为80%:
while True:
startTime = time.now()
while date.now() - startTime < 0.8:
Math.factorial(100) // Or any other computation here
time.sleep(0.2)
答案 1 :(得分:6)
很容易编写一个程序,可以交替旋转和睡眠以获得您想要的任何特定负载级别。我在几分钟内把它扔在一起:
#include <stdlib.h>
#include <signal.h>
#include <string.h>
#include <time.h>
#include <sys/time.h>
#define INTERVAL 500000
volatile sig_atomic_t flag;
void setflag(int sig) { flag = 1; }
int main(int ac, char **av) {
int load = 80;
struct sigaction sigact;
struct itimerval interval = { { 0, INTERVAL }, { 0, INTERVAL } };
struct timespec pausetime = { 0, 0 };
memset(&sigact, 0, sizeof(sigact));
sigact.sa_handler = setflag;
sigaction(SIGALRM, &sigact, 0);
setitimer(ITIMER_REAL, &interval, 0);
if (ac == 2) load = atoi(av[1]);
pausetime.tv_nsec = INTERVAL*(100 - load)*10;
while (1) {
flag = 0;
nanosleep(&pausetime, 0);
while (!flag) { /* spin */ } }
return 0;
}
答案 2 :(得分:2)
诀窍是如果你想占用80%的CPU,让处理器忙碌0.8秒(或任何时间间隔的80%。这里我把它当作1秒),然后让它睡眠0.2秒虽然建议不要过多使用CPU,否则所有进程都会开始运行缓慢。你可以尝试大约20%左右。 以下是在Python中完成的示例:
import time
import math
time_of_run = 0.1
percent_cpu = 80 # Should ideally replace this with a smaller number e.g. 20
cpu_time_utilisation = float(percent_cpu)/100
on_time = time_of_run * cpu_time_utilisation
off_time = time_of_run * (1-cpu_time_utilisation)
while True:
start_time = time.clock()
while time.clock() - start_time < on_time:
math.factorial(100) #Do any computation here
time.sleep(off_time)