unsigned int sysctl_sched_rt_period = 1000000;
int sysctl_sched_rt_runtime = 950000;
// 参考:
// SMP负载均衡
// http://soft.chinabyte.com/os/22/12359522.shtml
// linux组调度浅析
// http://hi.baidu.com/_kouu/item/0fe32610e493314be75e06d1
// 进程调度和组调度
// http://blog.chinaunix.net/uid-27052262-id-3239263.html
// CF调度器
// http://blog.csdn.net/wudongxu/article/details/8574749
// FIFO调度器
// http://lwn.net/Articles/296419/
// 调度初始化
// 函数任务:
// 1.初始化rootdomain
// rootdomain指示rq可运行的cpu集合
// 2.初始化real-time task对cpu的占有率
// sysctl_sched_rt_period代表rt进程的调度周期
// sysctl_sched_rt_runtime代表rt进程在调度周期中可运行的时间
// 3.初始化per-cpu rq
// 3.1 初始化公平调度队列,实时调度队列
// 3.2 初始化cpu负载记录数组
// 3.3 初始化cpu使用的tick hrtimer
// 4.初始化current(init_task)为idle task
// 4.1 设置current由公平调度管理
1.1 void __init sched_init(void)
{
int i, j;
#ifdef CONFIG_SMP
//初始化默认的调度域
init_defrootdomain();
#endif
//rt_bandwidth表示实时进程对cpu的占有率
init_rt_bandwidth(&def_rt_bandwidth,
global_rt_period(), global_rt_runtime());
//初始化per-cpu rq
for_each_possible_cpu(i) {
struct rq *rq;
//per-cpu 运行队列
rq = cpu_rq(i);
raw_spin_lock_init(&rq->lock);
rq->nr_running = 0;
rq->calc_load_active = 0;
rq->calc_load_update = jiffies + LOAD_FREQ;
//初始化公平调度策略、实时调度策略队列
init_cfs_rq(&rq->cfs, rq);
init_rt_rq(&rq->rt, rq);
//调度队列中,实时进程对cpu的占有率
rq->rt.rt_runtime = def_rt_bandwidth.rt_runtime;
//分5个等级记录cpu的负载情况
for (j = 0; j < CPU_LOAD_IDX_MAX; j++)
rq->cpu_load[j] = 0;
#ifdef CONFIG_SMP
rq->sd = NULL;
rq->rd = NULL;
rq->post_schedule = 0;
rq->active_balance = 0;
rq->nex
调度子系统1_调度子系统初始化
最新推荐文章于 2023-11-15 15:21:19 发布
本文详细介绍了Linux内核调度子系统的初始化过程,包括初始化rootdomain、实时任务CPU占有率设置、per-cpu运行队列(公平调度队列、实时调度队列)、CPU负载记录数组、tick hrtimer等。同时,讲解了调度初始化的关键步骤,如设置实时进程对CPU的占有率参数、初始化per-cpu运行队列和idle task。文章还提供了多个调度器的参考资料,如CF调度器和FIFO调度器。
摘要由CSDN通过智能技术生成