Просто пытаюсь установить максимальный приоритет расписания с помощью политики SCHED_FIFO
. Этот код начал выдавать ошибку после того, как я установил libpam-systemd.
EDIT: сводится к двум приведенным ниже вопросам, задайте их как можно яснее.
СТРЕЙС:
sched_setscheduler(564, SCHED_FIFO, {99}) = -1 EPERM (Операция не разрешена)
param.sched_priority = sched_get_priority_max(SCHED_FIFO);
printf("priority %d \n", param.sched_priority);
ret1 = sched_setscheduler(getpid(), SCHED_FIFO, ¶m);
printf("sched_setscheduler ret %d \n", ret1);
if(ret1 == -1){
perror("sched_setscheduler");
goto fail;
}
ВОПРОС: Почему привилегированный пользователь должен получить EPERM?
Также безуспешно пытался установить ниже в /etc/security/limits.conf
.
root soft rtprio 99
root hard rtprio 99
ИЗ ФАЙЛА КОНФИГУРАЦИИ KENREL
#CONFIG_SCHED_AUTOGROUP is not set
CONFIG_CGROUP_SCHED=y
CONFIG_FAIR_GROUP_SCHED=y
CONFIG_CFS_BANDWIDTH=y
CONFIG_RT_GROUP_SCHED=y
CONFIG_GENERIC_SCHED_CLOCK=y
CONFIG_CGROUPS=y
CONFIG_CGROUP_DEBUG=y
CONFIG_CGROUP_FREEZER=y
ОБНОВЛЕНИЕ Ошибка в коде ядра в файле linux/kernel/sched/core.c
#ifdef CONFIG_RT_GROUP_SCHED
/*
* Do not allow realtime tasks into groups that have no runtime
* assigned.
*/
if (rt_bandwidth_enabled() && rt_policy(policy) &&
task_group(p)->rt_bandwidth.rt_runtime == 0 &&
!task_group_is_autogroup(task_group(p))) {
task_rq_unlock(rq, p, &flags);
return -EPERM;
}
#endif
PASS CASE: без libpam-systemd
я получаю следующие значения
[ 36.278241] rt_bandwidth_enabled(): 1
[ 36.281977] rt_policy(policy) : 1
[ 36.285367] task_group_is_autogroup(task_group(p)) : 0
[ 36.289883] task_group(p)->rt_bandwidth.rt_runtime : 950000000
FAIL CASE: с libpam-systemd
я получаю следующие значения
[ 2096.713855] rt_bandwidth_enabled(): 1
[ 2096.717871] rt_policy(policy) : 1
[ 2096.721408] task_group_is_autogroup(task_group(p)) : 0
[ 2096.726180] task_group(p)->rt_bandwidth.rt_runtime: 0
ВОПРОС: Почему libpam-systemd должен изменять пропускную способность среды выполнения rt для пользователя root?
Значения времени выполнения Scheduler RT из proc
root@jarvis:/home/jarvis# cat /proc/sys/kernel/sched_rt_runtime_us
950000
root@jarvis:/home/jarvis# cat /proc/sys/kernel/sched_rt_period_us
1000000
Любая помощь высоко ценится.