1.  root_domain 的路径的赋值路径

                                    kernel_init_freeable //内核初始化路径调用 【2】
sched_init_smp //core.c 传参 cpu_active_mask
sched_init_domains //topology.c 传参为cpu_map 和 NULL
cpuset_cpu_inactive //core.c
cpuset_cpu_active //core.c 调用路径见下面
partition_sched_domains //topology.c
/proc/sys/kernel/sched_energy_aware 文件的回调 【3】
sched_energy_aware_handler //topology.c
/dev/cpuset的cpus和mems文件 【4】
cpuset_write_resmask //cpuset.c
core_ctl_force_pause_cpu //core_ctl.c isolate cpu后的resume路径中 【6】
try_to_resume //core_ctl.c isolate cpu后的resume路径中
sched_resume_cpu //core_pause.c
resume_cpus //cpu.c
sched_cpus_activate //core.c
cpuhp_hp_states[CPUHP_AP_ACTIVE].startup.single 回调。CPU热插拔处理【5】
sched_cpu_activate //core.c
cpuset_cpu_active //core.c
cpuset_cpu_inactive //core.c 应该是active相反的操作
cpuset_update_active_cpus //cpuset.c
resume_cpus //cpu.c 调用路径同上
cpuset_update_active_cpus_affine //cpuset.c
cpu_up //cpu.c down/up 即 online/offline 一个cpu时调用【8】
thaw_secondary_cpus //cpu.c
_cpu_up //cpu.c
_cpu_down //cpu.c
cpu_up_down_serialize_trainwrecks //cpu.c
thaw_processes //process.c 系统唤醒后解冻进程 【7】
cpuset_wait_for_hotplug //cpuset.c
register_hotmemory_notifier(&cpuset_track_online_nodes_nb); //cpuset.c 内存相关 【9】
cpuset_track_online_nodes //cpuset.c
cpuset_hotplug_workfn //cpuset.c
rebuild_sched_domains //cpuset.c
cpuset_write_resmask //cpuset.c 同上,写cpus文件
update_cpumask //cpuset.c
"cpus.partition" 文件响应函数,cgroup-v2的接口 【10】
sched_partition_write //cpuset.c
cpuset_cgrp_subsys.css_offline //cpuset 回调
cpuset_css_offline //cpuset.c
update_prstate //cpuset.c 更新 partititon_root_state
update_sibling_cpumasks //cpuset.c
update_cpumask //cpuset.c 调用路径同上
update_cpumasks_hier //cpuset.c
/dev/cpuset/sched_relax_domain_level 文件的写响应 【11】
cpuset_write_s64 //cpuset.c
update_relax_domain_level //cpuset.c
/dev/cpuset下"cpu_exclusive"、"sched_load_balance"、和一些memory相关文件的写回调函数 【12】
cpuset_write_u64 //cpuset.c
update_prstate //cpuset.c
update_flag //cpuset.c
update_prstate //cpuset.c 路径同上
rebuild_sched_domains_locked //cpuset.c
partition_and_rebuild_sched_domains //cpuset.c
partition_sched_domains_locked //topology.c
build_sched_domains //topology.c 给cpu赋值 __visit_domain_allocation_hell() 中通过 alloc_rootdomain() 获得的rd
partition_sched_domains_locked //topology.c 调用路径同上
detach_destroy_domains //topology.c 将给定的cpu的rq->rd重新指向 def_root_domain
cpu_attach_domain //topology.c
start_kernel //main.c 内核初始化时调用,对每个cpu的rq都设置为 def_root_domain 【1】
sched_init //core.c
rq_attach_root //topology.c
rq->rd = rd;

可以看出,虽然root_domain全局唯一,是有诸多事件影响 rq->rd 值的,包括CPU的online/offline、isolate、cpu hotplug、cpuset的cpus和mems文件,以及cpuset的其它文件、系统suspend/resume。

2. 实验

通过不停打印 rq->rd 的值来进行实验,即使系统空闲,rq->rd 的指向也是时刻在变化的,设置路径是:

[23008.485401] dump_backtrace.cfi_jt+0x0/0x8
[23008.485404] dump_stack_lvl+0xc4/0x140
[23008.485408] rq_attach_root+0x1e8/0x4f0
[23008.485411] cpu_attach_domain+0x280/0x928
[23008.485415] build_sched_domains+0xef0/0x1170
[23008.485419] partition_sched_domains_locked+0x3b0/0x6e8
[23008.485422] rebuild_sched_domains_locked+0x83c/0x8f0
[23008.485426] cpuset_hotplug_workfn+0x3e8/0x614
[23008.485430] process_one_work+0x248/0x780
[23008.485433] worker_thread+0x3e4/0x97c
[23008.485437] kthread+0x150/0x200
[23008.485439] ret_from_fork+0x10/0x30
[23008.485442] Hello: rq_attach_root: rq->rd = rd, rd=000000006bd11285

3. 从实验上看,同一时刻,不同CPU看到的 rq->rd 的指向可能是不同的。

调度器44—root_domain—更新路径的更多相关文章

  1. TKE 用户故事 | 作业帮 Kubernetes 原生调度器优化实践

    作者 吕亚霖,2019年加入作业帮,作业帮架构研发负责人,在作业帮期间主导了云原生架构演进.推动实施容器化改造.服务治理.GO微服务框架.DevOps的落地实践. 简介 调度系统的本质是为计算服务/任 ...

  2. Kubernetes集群调度器原理剖析及思考

    简述 云环境或者计算仓库级别(将整个数据中心当做单个计算池)的集群管理系统通常会定义出工作负载的规范,并使用调度器将工作负载放置到集群恰当的位置.好的调度器可以让集群的工作处理更高效,同时提高资源利用 ...

  3. [UE4]事件驱动的UI更新:事件调度器

    事件调度器就是一个“事件中介”,可以被调用和被关注.

  4. Linux进程管理 (2)CFS调度器

    关键词: 目录: Linux进程管理 (1)进程的诞生 Linux进程管理 (2)CFS调度器 Linux进程管理 (3)SMP负载均衡 Linux进程管理 (4)HMP调度器 Linux进程管理 ( ...

  5. yarn的调度器

    三种调度器 1.FIFO Scheduler 把应用按提交的顺序排成一个队列,这是一个先进先出队列,在进行资源分配的时候,先给队列中最头上的应用进行分配资源,等最前面的应用需求满足后再给下一个分配,以 ...

  6. 搭建Airflow数据流调度器

    服务器使用的是centos系统,需要安装好pip和setuptools,同时注意更新安装的版本 接下来参考安装好Airflow Airflow 1.8 工作流平台搭建 http://blog.csdn ...

  7. linux调度器源码分析 - 概述(一)

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 引言 调度器作为操作系统的核心部件,具有非常重要的意义,其随着linux内核的更新也不断进行着更新.本系列文章通 ...

  8. linux调度器源码分析 - 初始化(二)

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 引言 上期文章linux调度器源码分析 - 概述(一)已经把调度器相关的数据结构介绍了一遍,本篇着重通过代码说明 ...

  9. 第一次作业:基于Linux 4.5的进程模型与调度器分析

    1.操作系统是怎么组织进程的? 1.1什么是线程,什么是进程: 刚接触时可能经常会将这两个东西搞混.简单一点的说,进程是一个大工程,线程则是这个大工程中每个小地方需要做的东西(在linux下看作&qu ...

  10. CFS调度器

    一.前言 随着内核版本的演进,其源代码的膨胀速度也在递增,这让Linux的学习曲线变得越来越陡峭了.这对初识内核的同学而言当然不是什么好事情,满腔热情很容易被当头浇灭.我有一个循序渐进的方法,那就是先 ...

随机推荐

  1. Element ui &多选框、输入框、下拉框、开关、上传文件

    ElementUI多选框 Checkbox 使用 <el-checkbox v-model="checked">备选项</el-checkbox> < ...

  2. P4525 【模板】自适应辛普森法 1

    \(\text{Solution}\) 题目 \(\text{Simpson}\) 公式: \[\int_l^r f(x) {\mathrm d}x = \frac{(r-l)(f(l)+f(r)+4 ...

  3. JZOJ 5353. 【NOIP2017提高A组模拟9.9】村通网

    题目 为了加快社会主义现代化,建设新农村,农夫约(Farmer Jo)决定给农庄里每座建筑都连上互联网,方便未来随时随地网购农药. 他的农庄很大,有N 座建筑,但地理位置偏僻,网络信号很差. 一座建筑 ...

  4. Leaflet 调用腾讯瓦片地图服务demo

    <link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" ...

  5. ubuntu 启动脚本变化

    ubuntu-16.10 开始不再使用initd管理系统,改用systemd- 快速看了 systemd 的使用方法,发现改动有点大, 包括用 systemctl 命令来替换了 service 和 c ...

  6. Linux学习之文件目录指令(部分)

    包括了 ls  pwd  cd  mkdir  rmdir  touch  cp  rm  mv  cat  echo  more  less  head  tail  >  >>指 ...

  7. getUserInfo和getUserProfile被废弃

    之前得知获取用户头像和昵称的两个接口getUserInfo和getUserProfile被废弃了,于是我就想深入探究一下. 一直抱有一个疑问,为啥有getUserInfo和getUserProfile ...

  8. 优秀PHP程序员技术成长之路

    按照了解的很多PHP/LNMP程序员的发展轨迹,结合个人经验体会,抽象出很多程序员对未来的迷漫,特别对技术学习的盲目和慌乱,简单梳理了这个每个阶段PHP程序员的技术要求,来帮助很多PHP程序做对照设定 ...

  9. 【python学习】PyQt基础学习以及一个信息论与编码课设实例

    这学期的信息论与编码的课设需要用编程语言实现霍夫曼.费诺以及香农编码,要具备在windows下的可视化操作界面,因此就选用PyQt作为开发工具,本篇博客记录一下PyQt的基础以及课设的实例 参考: & ...

  10. 使用iperf测试网卡性能

    1.目标 测试网卡通信性能,同时可以通过改变连接方式(从两台PC网线直连,切换到通过交换机连接)测试交换机最高速率性能. 2.使用工具 硬件:两台PC机(本例用win10 64位).数根网线.交换机 ...