只是尝试使用SCHED_FIFO策略将计划优先级设置为最大。在我安装 libpam-systemd 后,这段代码开始抛出错误。
编辑:归结为以下两个问题,尽可能清楚地表达它们。
STRACE:
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;
}
Run Code Online (Sandbox Code Playgroud)
问题:为什么 root 用户应该获得 EPERM?
还尝试在下面设置但/etc/security/limits.conf没有任何运气。
root soft rtprio 99
root hard rtprio 99
Run Code Online (Sandbox Code Playgroud)
来自 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
Run Code Online (Sandbox Code Playgroud)
更新
文件中内核代码错误linux/kernel/sched/core.c
#ifdef CONFIG_RT_GROUP_SCHED
/*
* Do not …Run Code Online (Sandbox Code Playgroud)