我正在关注 https://www.kernel.org/doc/Documentation/scheduler/sched-deadline.txt 中的 sched-deadline 页面中的 Minimal main。 来自手册:
此外,在目前的实施下,所有 参数值必须至少为 1024(即刚刚超过一微秒,这是实现的分辨率),并且小于 2^63。如果这些检查中的任何一个失败,sched_setattr(2) 都会失败并显示错误 EINVAL。但是,当我在截止日期/期间输入任何小于 100*000 (ns)(例如 99 *1000)的值时,我会收到错误:
sched_setattr:参数无效这是我的代码,从 sched-deadline 网页中的
Minimal-main 更改为:
/* This creates an execution_time/99 us reservation */
attr.sched_policy = SCHED_DEADLINE;
attr.sched_runtime = execution_time + 1024 ;
attr.sched_period = attr.sched_deadline =99*1000 ;
ret = sched_setattr(0, &attr, flags);
printf("We have called sched_setattr, and ret value is:%d\n", ret);
if (ret < 0) {
done = 0;
perror("sched_setattr");
exit(-1);
}
我在这里缺少什么?
root/kernel/sched/deadline.c 说:
DL周期默认限制;在顶端,我们防范小 util 任务仍然获得非常长的有效运行时间,在底端,我们防范计时器 DoS。
static unsigned int sysctl_sched_dl_period_max = 1 << 22; /* ~4 seconds */
static unsigned int sysctl_sched_dl_period_min = 100; /* 100 us */