zoukankan      html  css  js  c++  java
  • Linux内核中root_domain的建立与初始化

    基于Linux-5.4

    一、rq默认root_domain初始化

    sched_init()
        for_each_possible_cpu(i) {
            rq = cpu_rq(i);
    
            rq->rd = NULL;
            rq_attach_root(rq, &def_root_domain);
        }

    上面的sched_init()中会将每个可能cpu的就绪队列attach到系统中默认的def_root_domain;执行完毕后def_root_domain->span就等于cpu_possible_mask。

    二、调度域初始化

    sched_init_smp
    sched_init_domains(cpu_active_mask)
    	cpumask_and(doms_cur[0], cpu_map, housekeeping_cpumask(HK_FLAG_DOMAIN));	//cpu_map == cpu_active_mask
    	build_sched_domains(doms_cur[0], NULL);	//doms_cur是cpu_active_mask与housekeeping_cpumask(HK_FLAG_DOMAIN)的交集
    		struct s_data d;
    
    		__visit_domain_allocation_hell(&d, cpu_map)	//包含d->rd = alloc_rootdomain();
    		for_each_cpu(cpu, cpu_map) {
    			cpu_attach_domain(sd, d.rd, cpu)
    				struct rq *rq = cpu_rq(cpu);
    				rq_attach_root(rq, d.rd);
    	}
    

    这里会根据实际的housekeeping_cpumask(HK_FLAG_DOMAIN)来确定这里建立的root_domain。

    举个例子:

    在sched_init()中为各个cpu的rq建立了def_root_domain,而且这个def_root_domain->span是系统中的所有cpu;

    在后续的sched_init_domains()中会重新分配一个new_root_domain,然后遍历housekeeping_cpumask与cpu_active_mask的交集cpu_map中的各个cpu,先将其旧的root_domain  rq[cpu]->rd(即def_root_domain)中去掉该cpu,同时设置rq[cpu]->rd = new_root_domain。

    最终,就有两个root_domain:一个是没有在housekeeping_cpumask中的cpu,使用的是新分配的new_root_domain;另外就是没有在housekeeping_cpumask中的cpu,使用的是旧的def_root_domain

    三、重分调度域

    上面是系统初始化过程中各个cpu的root_domain的初始化。随着系统初始化完毕各个cpu的root_domain也初始化完毕。初始化完成后root_domain一般有两种可能:(1)所有cpu共享一个root_domain,这种是没有设置isolated cpu的情况; (2)第二种情况是内核有使用"isolcpus= "内核参数指定isolated CPU,则会为非 isolated cpu重新建立一个root_domain,而isolated CPUs则使用def_root_domain。

    除了上面初始化初期建立的root_domain,还可以通过cgroup来重新建立、分配root_domain,这是通过cpuset来进行的,具体细节这里就不展开,以后具体介绍cpuset控制组时再详细讲解。

  • 相关阅读:
    while循环&CPU占用率高问题深入分析与解决方案
    Jmeter 发送json
    HTTP请求各参数详解
    Fast Stone截图工具使用教程
    程序员必备神器(FastStoneCapture)
    千古第一败家子杨广(打击异己、毫无承担、无识人之明)
    在路上看和今天要解决的问题可能相关的书,顺便工作上实践一下,立码就记住了
    与Qt的联系方式:邮件,论坛,销售,Bug报告
    Qt for Automation
    Qt for WebAssembly
  • 原文地址:https://www.cnblogs.com/liuhailong0112/p/14865872.html
Copyright © 2011-2022 走看看