Я пишу программу на C ++ для SUSE Linux Real Time и пытаюсь собрать статистику синхронизации для своей политики планирования циклического перебора (RR).Я могу установить политику RR через
#include <sched.h>
...
struct sched_param sparms;
sparms.sched_priority = 99;
if (sched_setscheduler(0, SCHED_RR, &sparms) < 0){
perror("sched_setsched");
exit(1);
}
и могу определить квант времени через sched_rr_get_interval()
.В документации ОС указано, что квант времени можно изменить с помощью приятного значения процесса.Тем не менее, это не имело никакого эффекта.Я изменил значение nice с помощью nice()
и подтвердил, что оно действительно изменилось с помощью getpriority()
, но sched_rr_get_interval()
возвращает то же самое время.Кто-нибудь знает, что происходит?
Редактировать: Добавлен код ниже.setpriority()
не работал.
...
#include <stdio.h>
#include <unistd.h>
#include <sys/resource.h>
...
// Set scheduler to RR
struct sched_param sparms;
sparms.sched_priority = 99;
if(sched_setscheduler(0, SCHED_RR, &sparms) < 0){
fprintf(stderr, "Error setting thread scheduling policy & priority.");
exit(-1);
}
timespec qtm;
sched_rr_get_interval(0, &qtm);
fprintf(stderr, "Time quantum(thread 1): %lds %ldns.\n", qtm.tv_sec, qtm.tv_nsec);
fprintf(stderr, "Current nice value: %d\n", getpriority(PRIO_PROCESS, 0));
if(nice(90) < 0) fprintf(stderr, "Error setting time quantum.\n");
//setpriority(PRIO_PROCESS, 0, 10);
fprintf(stderr, "New nice value: %d\n", getpriority(PRIO_PROCESS, 0));
sched_rr_get_interval(0, &qtm);
fprintf(stderr, "New time quantum(thread 1): %lds %ldns.\n", qtm.tv_sec, qtm.tv_nsec);
...
Редактировать: Версия ОС: 2.6.33.7-rt29-0.5-rt