root domain

struct root_domain

root domain이 사용되는 곳

cfs task

  • update_sd_lb_stats
    • 스케쥴링그룹에 속한 cpu중 하나라도 nr_running이 1이상일 때 dst_rq가 속한 root domain의 overload를 갱신함
      • 최상위 sched domain일 경우에만 설정함
  • idle_balance
    • this_rq가 속한 root domain의 overload가 0이 아닐 경우에만 idle balance를 진행함

      rt, dl task

      cpu와의 연결시점

      sched_init()

      부팅도중에 호출되는 sched_init()에서 모든 possible cpu는 def_root_domain과 연결된다.
void __init sched_init(void)
{
        ...
        for_each_possible_cpu(i) {
                ...
                rq_attach_root(rq, &def_root_domain);
}

build_sched_domains()

이 함수에서는 인자로 넘어온 @cpu_map을 사용해서 스케쥴링 도메인 토폴로지를 완성하고 난 후에 아래와 같이 새롭게 할당한 root domain과 연결한다.

static int build_sched_domains(const struct cpumask *cpu_map,
                               struct sched_domain_attr *attr)
{
        ...
        for_each_cpu(i, cpu_map) {
                sd = *per_cpu_ptr(d.sd, i);
                cpu_attach_domain(sd, d.rd, i);
        }
        ...
}

build_sched_domains()는

  • 부팅중에 호출되는 sched_init_smp() -> init_sched_domains()에서 호출됨.
    • cpu_active_map에 설정된 cpu를 새 root_domain과 연결함
  • cpu hotplug 이벤트가 발생하면 호출됨
    • cpuset과 관련이 있을것임. cpuset마다 root_domain이 매칭될듯..

def_root_domain - 모든 cpu를 가지고 있는 최초의 root_domain

results matching ""

    No results matching ""