如何一致占用80%的CPU?

时间:2011-08-28 16:41:10

标签: performance unit-testing cpu

我正在寻找一种方法,以一致的方式占用单个CPU的80%(或任何其他数量)。
我需要这个用于测试在特定CPU利用率条件下触发的组件的单元测试 为此,我可以假设机器处于空闲状态。

这是一种强大且可能与操作系统无关的方法吗?

3 个答案:

答案 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)