Как занять 80% процессора последовательно? - PullRequest
16 голосов
/ 28 августа 2011

Я ищу способ занять ровно 80% (или любое другое число) одного ЦП последовательным образом.
Мне это нужно для какого-то модульного теста, который тестирует компонент, который запускается при определенных условиях использования ЦП
Для этого я могу предположить, что машина в противном случае простаивает.

Какой надежный и, возможно, независимый от ОС способ сделать это?

Ответы [ 3 ]

15 голосов
/ 28 августа 2011

Нет такой вещи, как загрузка процессора 80% времени.Процессор всегда либо используется, либо простаивает.Через некоторое время вы можете получить среднее использование 80%.Есть ли определенный период времени, который вы хотите усреднить за?Этот псевдокод должен работать на разных платформах, а загрузка ЦП более чем на 1 секунду составляет 80%:

5 голосов
/ 28 августа 2011

Довольно легко написать программу, которая поочередно вращается и спит, чтобы получить любой конкретный уровень нагрузки, который вы хотите.Я бросил это вместе через пару минут:

#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 голосов
/ 03 июня 2014

Хитрость в том, что если вы хотите занять 80% ЦП, оставьте процессор занятым на 0,8 секунды (или 80% любого временного интервала. Здесь я принимаю его равным 1 секунде), а затем дайте ему поспать в течение 0,2 секунды. хотя желательно не слишком загружать процессор, иначе все ваши процессы начнут работать медленно. Вы можете попробовать около 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...