调度器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的学习曲线变得越来越陡峭了.这对初识内核的同学而言当然不是什么好事情,满腔热情很容易被当头浇灭.我有一个循序渐进的方法,那就是先 ...
随机推荐
- GIN--HOW POWERFUL GNN
HOW POWERFUL ARE GRAPH NEURAL NETWORKS? 本文是 Jure Leskovec 又一力作,首先对图神经网络的原理做了深入检出.提纲挈领的叙述,然后从原理方面介绍了如 ...
- Python自动合并Word文件同时添加分页符的方法
本文介绍基于Python,实现对多个Word文档加以自动合并,并在每次合并时按要求增添一个分页符的方法. 现有多个Word文档文件,需将其按名称顺序合并为一个新的Word文件,且需保证每一次合 ...
- redis(4)String字符串
前言 Redis中有5大数据类型,分别是字符串String.列表List.集合Set.哈希Hash.有序集合Zset,本篇介绍Redis的字符串String Redis字符串 String是Redis ...
- 题解 [SCOI2008] 奖励关
为了这道题我学了期望 dp(? 为什么会有人期望 dp 入门是这道题啊歪(#`O′) wtx 一眼秒杀了这题,我们一起来膜拜他! 其实这题很水但是我之前没学过期望 dp 我是什么 nt. 显然我们以每 ...
- CSS3移动动画
transition: .3s all ease; .tmall .tmall-tabbodys { width: 100%; position: absolute; left: 0px; trans ...
- PACS系统各个功能介绍--九五小庞
PACS系统是HIS系统的重要组成部分,医生可在电脑上查看患者的医学影像报告. ■ 支持心电DICOM,心电图浏览和处理(显示格式.纸速.增益.滤波.测量等). ■ 支持MPR.CPR.MIP.SSD ...
- Spring的注入方式
Spring的注入方式 目录 Spring的注入方式 一.前言 二.常见的三种注入方式 2.1.Field注入 2.2 构造器注入 2.3 setter注入 三.构造器注入的好处 四.答疑 一.前言 ...
- linux上安装python3(yum方式)
可联通外网的linux系统终端上安装python3 1,建立yum仓库: https://mirrors.163.com/centos/7.9.2009/os/x86_64/ 2,使用yum下载安装对 ...
- 3. 贪心思想(todo)
目录 1. 分配饼干 2. 不重叠区间个数 3. 投飞镖刺破气球 5. 买卖股票最大的收益 6. 买卖股票的最大收益 II 9. 修改一个数成为非递减数组 10. 子数组的最大和 11. 分隔字符串使 ...
- EMQ X 系统调优和性能压测
前言 如果使用 EMQ 来承载百万级别的用户连接可以吗?毕竟在 MQTT 官方介绍上说 EMQ X 可以处理千万并发客户端,而 EMQ X 自己官方称 4.x 版本 MQTT 连接压力测试一台 8 核 ...