需要改动的数据结构
cpumask
c
if (!cpumask_equal(housekeeping_cpumask(HK_TYPE_DOMAIN),
cpu_possible_mask)) {
pr_err("sched_ext: Not compatible with \"isolcpus=\" domain isolation");
return -EINVAL;
}
- housekeeping_cpumask
- cpu_possible_mask
需要变为该调度器的cgroup对应的cpumask
sched_ext_ops添加一个cgroup字段
- 如何从cgroup的前缀转换为cgroup本身?
可以参考scx_layered
有一种更简单的方法:将编译好的调度器的.o文件直接放置在cgroup的cpu控制器的一个文件中
例如:
cpu.scheduler
全局变量
__scx_ops_enabled仍然应该只有一个(所有调度器都退出后才为disable)
__scx_switched_all仍只有一个,且多个调度器时swtiched_all仍然成立
根据调度器有多少个要动态增删的变量
- scx_ops_helper // kthread_worker, 不需要多个
- scx_exit_info
- scx_exit_kind
- scx_ops_enable_state_var
global_dsqs 不应该变为多份,因为虽然有多个调度器, 但是要尽量不修改core调度器的代码,则一个scx调度队列对接一个CPU
struct kobject *scx_root_kobj需要创建树形层级关系
- scx_exit_info
- scx_warned_zero_slice
- scx_ops
- scx_has_op
- scx_watchdog_timeout
- scx_watchdog_timestamp
- task_struct_type
- scx_tasks