调度器44—root_domain—更新路径
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—更新路径的更多相关文章
- TKE 用户故事 | 作业帮 Kubernetes 原生调度器优化实践
作者 吕亚霖,2019年加入作业帮,作业帮架构研发负责人,在作业帮期间主导了云原生架构演进.推动实施容器化改造.服务治理.GO微服务框架.DevOps的落地实践. 简介 调度系统的本质是为计算服务/任 ...
- Kubernetes集群调度器原理剖析及思考
简述 云环境或者计算仓库级别(将整个数据中心当做单个计算池)的集群管理系统通常会定义出工作负载的规范,并使用调度器将工作负载放置到集群恰当的位置.好的调度器可以让集群的工作处理更高效,同时提高资源利用 ...
- [UE4]事件驱动的UI更新:事件调度器
事件调度器就是一个“事件中介”,可以被调用和被关注.
- Linux进程管理 (2)CFS调度器
关键词: 目录: Linux进程管理 (1)进程的诞生 Linux进程管理 (2)CFS调度器 Linux进程管理 (3)SMP负载均衡 Linux进程管理 (4)HMP调度器 Linux进程管理 ( ...
- yarn的调度器
三种调度器 1.FIFO Scheduler 把应用按提交的顺序排成一个队列,这是一个先进先出队列,在进行资源分配的时候,先给队列中最头上的应用进行分配资源,等最前面的应用需求满足后再给下一个分配,以 ...
- 搭建Airflow数据流调度器
服务器使用的是centos系统,需要安装好pip和setuptools,同时注意更新安装的版本 接下来参考安装好Airflow Airflow 1.8 工作流平台搭建 http://blog.csdn ...
- linux调度器源码分析 - 概述(一)
本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 引言 调度器作为操作系统的核心部件,具有非常重要的意义,其随着linux内核的更新也不断进行着更新.本系列文章通 ...
- linux调度器源码分析 - 初始化(二)
本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 引言 上期文章linux调度器源码分析 - 概述(一)已经把调度器相关的数据结构介绍了一遍,本篇着重通过代码说明 ...
- 第一次作业:基于Linux 4.5的进程模型与调度器分析
1.操作系统是怎么组织进程的? 1.1什么是线程,什么是进程: 刚接触时可能经常会将这两个东西搞混.简单一点的说,进程是一个大工程,线程则是这个大工程中每个小地方需要做的东西(在linux下看作&qu ...
- CFS调度器
一.前言 随着内核版本的演进,其源代码的膨胀速度也在递增,这让Linux的学习曲线变得越来越陡峭了.这对初识内核的同学而言当然不是什么好事情,满腔热情很容易被当头浇灭.我有一个循序渐进的方法,那就是先 ...
随机推荐
- pdf转MD、HTML、word网址收集
PDF 转 Word,Excel,PPT,JPG 的网址:https://smallpdf.com/cn/pdf-to-word PDF 转 Markdown 的网址:https://pdf2md.m ...
- Solon2 之基础:一、常用应用配置说明
约定参考: //资源路径约定(不用配置:也不能配置) resources/app.yml( 或 app.properties ) #为应用配置文件 resources/WEB-INF/static/ ...
- JZOJ 2022.07.18【提高组A】模拟
\(\text{T1}\) 很容易想到用 \(f_1 f_2 ... f_k\) 来表示第 \(n\) 项 发现重点关注指数即可,即我们要递推 \(f_1 ... f_k\) 对应的指数 递推涉及 \ ...
- JZOJ 3570. 【GDKOI2014】壕壕的寒假作业
解析 这道题比较水. 求最快什么时候做完作业? 如果要最快完成第i份作业,那么是i的前继那些作业都要完成之后才能够完成i,所以,为了尽快完成i,我们要把i的前继的作业全部先做完. 最慢什么时候做完作业 ...
- Centos 7.x系统下忘记用户登录密码,重置密码的方法
转载csdn: Centos 7.x系统下忘记用户登录密码,重置密码的方法_ATree的博客-CSDN博客_centos7密码忘记 重置密码的方法 Centos7修改root密码_shanvlang的 ...
- JUC学习笔记
1 进程与线程:进程指正在运行的程序,进程拥有一个完整的.私有的基本运行资源集合.它有自己的内存空间.为了便于进程之间的通信,大多数操作系统都都支持进程间通信(IPC). IPC通信包括管道.消息队列 ...
- Js 实现登录框可拖动
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 安装ElasticSearch7.6.2使用自带JDK
平时用jdk8,但运行es7无法启动.在elasticsearch7以上的版本中会自带jdk.需要修改elasticsearch-env配置文件,就可以使用自带jdk版本,不影响其他java项目. w ...
- pytho获取C函数返回值
python调用C语言接口 注:本文所有示例介绍基于linux平台 在底层开发中,一般是使用C或者C++,但是有时候为了开发效率或者在写测试脚本的时候,会经常使用到python,所以这就涉及到一个问题 ...
- E-MU1212m(E-MU1616m)在Win10(Win11)中的驱动安装
创新(Creative)公司早期生产的专业PCI声卡E-MU1212m及E-MU1616m当前二手市场上的性价比非常高,但由于生产年代久远,其驱动程序最高只支持到Windows vista版本,经过实 ...