Почему процессы с низким приоритетом могут повлиять на задержку процесса с высоким приоритетом? - PullRequest
0 голосов
/ 13 марта 2020

Я проверил задержку rt-процесса циклическим тестированием. И обнаружил, что при запуске нескольких процессов rt с более низким приоритетом (приоритет 40) задержка процесса rt с высоким приоритетом станет больше. Я не могу этого объяснить.

cyclictest - одна из программ rt-тестов. https://github.com/jlelli/rt-tests/tree/master/src/cyclictest

Cyclictest измеряет задержку между истечением таймера и фактическим выполнением потока, который установил таймер. Это делается путем создания моментального снимка непосредственно перед ожиданием определенного интервала времени c (t1), затем создания другого моментального снимка после завершения таймера (t2), затем сравнения теоретического времени включения с фактическим временем активации (t2). - (t1 + sleep_time)). Это значение представляет собой задержку для этого таймера.

Фальшивый код циклического теста:

clock_gettime(CLOCK_MONOTONIC, &t1);
next = t1 + 1000;
clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, &next, NULL);
clock_gettime(CLOCK_MONOTONIC, &t2);
latency = t2 - next;

Команда теста (-p80 означает, что приоритет тестового потока равен 80, -n означает использование clock_nanosleep к ожиданию определенного c временного интервала): . / cyclictest -p80 -n

Беспокоящий процесс прост:

struct sched_param schedp;
schedp.sched_priority = 40;
sched_set_scheduler(0, SHED_FIFO, &schedp);
while(1) {
    srand(time(0));
    while(j++ < rand()%1000000);
    usleep(10);
}

In Linux ядро, независимо от количества процессов с более низким приоритетом, если процесс с высоким приоритетом работает, он будет выполняться немедленно.

Может кто-нибудь объяснить, почему запуск нескольких процессов с низким приоритетом может повлиять на процесс с высоким приоритетом? латентность

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...