2.4.2 DL调度器 -核心代码
/* file: include/linux/sched.h */
struct sched_dl_entity {
/*
任务的参数,即前文提到的 runtime, deadline 与 period. 这几个参数通过系统调用
sched_setattr 进行修改,在运行过程中保持不变。
*/
u64 dl_runtime; /* Maximum runtime for each instance */
u64 dl_deadline; /* Relative deadline of each instance */
u64 dl_period; /* Separation of two instances (period) */
u64 dl_bw; /* dl_runtime / dl_period */
u64 dl_density; /* dl_runtime / dl_deadline */
/*
即前文提到的 scheduling deadline 与 remaining runtime, CBS
用来控制CPU的带宽分配。
*/
s64 runtime; /* Remaining runtime for this instance */
u64 deadline; /* Absolute deadline for this instance */
/* 标识该任务是否是 throttled 状态,如果是的话调度器需要在下一个 replenishment
* time 时调整 runtime 与 deadline 属性。replenishment 操作通过定时器 dl_timer
* 完成 */
unsigned int dl_throttled : 1;
/* 标识该任务是否在消耗完自己的 runtime 之前主动让出 CPU */
unsigned int dl_yielded : 1;
/*
高精度定时器,例如用来为throttled任务做replenishment操作。
*/
struct hrtimer dl_timer;
};Last updated