From 6f71aff91cecb6f3c373ac09e4b84d6955dbbc7c Mon Sep 17 00:00:00 2001 From: Cheng Jian Date: Wed, 16 Jun 2021 19:40:19 +0800 Subject: [PATCH] description: scheduler and memory --- study/kernel/00-DESCRIPTION/BPF.md | 62 +++++++++++++- study/kernel/00-DESCRIPTION/RCU.md | 80 ++++++++++++++++++ study/kernel/00-DESCRIPTION/SCHEDULER.md | 73 ++++++++++++++-- study/kernel/01-process/00-code/COW/COW | Bin 0 -> 8464 bytes study/kernel/01-process/00-code/COW/COW.c | 37 ++++++++ study/kernel/01-process/00-code/COW/Makefile | 18 ++++ study/kernel/01-process/00-code/COW/fork | Bin 0 -> 11240 bytes study/kernel/01-process/00-code/COW/fork.c | 26 ++++++ .../issue/3-numa_dismeter/0001-README.md | 8 +- 9 files changed, 290 insertions(+), 14 deletions(-) create mode 100644 study/kernel/00-DESCRIPTION/RCU.md create mode 100755 study/kernel/01-process/00-code/COW/COW create mode 100644 study/kernel/01-process/00-code/COW/COW.c create mode 100644 study/kernel/01-process/00-code/COW/Makefile create mode 100755 study/kernel/01-process/00-code/COW/fork create mode 100644 study/kernel/01-process/00-code/COW/fork.c diff --git a/study/kernel/00-DESCRIPTION/BPF.md b/study/kernel/00-DESCRIPTION/BPF.md index b5f2ccf..5ee2963 100644 --- a/study/kernel/00-DESCRIPTION/BPF.md +++ b/study/kernel/00-DESCRIPTION/BPF.md @@ -56,7 +56,67 @@ blogexcerpt: 虚拟化 & KVM 子系统 ------- -[https://github.com/iovisor/bcc/blob/master/docs/kernel-versions.md](https://github.com/iovisor/bcc/blob/master/docs/kernel-versions.md) +[eBPF kernel-versions.md](https://github.com/iovisor/bcc/blob/master/docs/kernel-versions.md) + +[BPF的可移植性和CO-RE (Compile Once – Run Everywhere)](https://www.cnblogs.com/charlieroro/p/14206214.html) + +[BCC和libbpf的转换](https://www.cnblogs.com/charlieroro/p/14244276.html) + +[Libbpf-tools —— 让 Tracing 工具身轻如燕](https://blog.csdn.net/TiDB_PingCAP/article/details/107953554) + +[BCC & libbpf](https://zhuanlan.zhihu.com/p/111037013) + + + +# 2 kprobe +------- + +| 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | +|:----:|:----:|:---:|:----:|:---------:|:----:| +| 2015/03/25 | Alexei Starovoitov | [tracing: attach eBPF programs to kprobes](https://lore.kernel.org/patchwork/cover/555274) | NA | v11 ☑ 4.1-rc1 | [PatchWork v11 0/9](https://lore.kernel.org/patchwork/cover/555274) | + +# 2 tracepoint +------- + +## 2.1 tracepoint +------- + + +| 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | +|:----:|:----:|:---:|:----:|:---------:|:----:| +| 2016/04/07 | Alexei Starovoitov | [allow bpf attach to tracepoints](https://lore.kernel.org/patchwork/cover/665728) | BPF 支持 tracepoint 跟踪 | v2 ☑ 4.7-rc1 | [PatchWork v2 00/10](https://lore.kernel.org/patchwork/cover/665728) | + +## 2.2 raw tracepoint +------- + +raw_tracepoint 相比 tracepoint + +1. 效率更高, 跳过了参数的处理, 不必向 tracepoint 那样根据 format 解析了所有字段, 节约了不必要的开销. + +2. 自由度更大, 提供了对参数的原始访问, 可以直接操作传入 tracepoint 时的指针, 获取某个成员. + +3. 可以获得原始结构体指针. 用于做 key 比较方便, tracepoint 只能拿到里面的各个字段, 有些时候没法做 key. + + +| 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | +|:----:|:----:|:---:|:----:|:---------:|:----:| +| 2018/03/01 | Jan H. Schönherr | [bpf, tracing: introduce bpf raw tracepoints](https://lore.kernel.org/patchwork/cover/879278) | BPF 支持 raw tracepoint 跟踪, 提供了对 tracepoint 参数的访问. | v1 ☑ 4.17-rc1 | [PatchWork v1](https://lore.kernel.org/patchwork/cover/879278) | +| 2018/12/13 | Matt Mullins | [bpf: support raw tracepoints in modules](https://lore.kernel.org/patchwork/cover/1024475) | NA | v2 ☑ 5.0-rc1 | [PatchWork v2](https://lore.kernel.org/patchwork/cover/1024475) | +| 2019/04/26 | Matt Mullins | [writable contexts for bpf raw tracepoints](https://lore.kernel.org/patchwork/cover/1067299) | 引入 BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE, 允许 bpfs 程序修改 tracepoint 中的变量. | v5 ☑ 4.17-rc1 | [PatchWork v5](https://lore.kernel.org/patchwork/cover/1067299) | + + + +# libbpf-tools +------- + + +[[BPF CO-RE clarification] Use CO-RE on older kernel versions.](https://www.spinics.net/lists/bpf/msg32659.html) + +[Help using libbpf with kernel 4.14](https://www.spinics.net/lists/bpf/msg27267.html) + +[How to use libbpf-tools with ubuntu 18.04 4.15 kernel #3232](https://github.com/iovisor/bcc/issues/3232) + +[How to use libbpf-tools with ubuntu 18.04 4.15 kernel](https://www.gitmemory.com/issue/iovisor/bcc/3232/761744003)
diff --git a/study/kernel/00-DESCRIPTION/RCU.md b/study/kernel/00-DESCRIPTION/RCU.md new file mode 100644 index 0000000..9dad34c --- /dev/null +++ b/study/kernel/00-DESCRIPTION/RCU.md @@ -0,0 +1,80 @@ +--- + +title: 虚拟化 & KVM 子系统 +date: 2021-02-15 00:32 +author: gatieme +tags: + - linux + - tools +categories: + - 技术积累 +thumbnail: +blogexcerpt: 虚拟化 & KVM 子系统 + +--- + +
+ +本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作 + +知识共享许可协议 + +因本人技术水平和知识面有限, 内容如有纰漏或者需要修正的地方, 欢迎大家指正, 鄙人在此谢谢啦 + +**转载请务必注明出处, 谢谢, 不胜感激** + +
+ +| 日期 | 作者 | GitHub| CSDN | BLOG | +| ------- |:-------:|:-------:|:-------:|:-------:| +| 2021-02-15 | [成坚-gatieme](https://kernel.blog.csdn.net) | [`AderXCoding/system/tools/fzf`](https://github.com/gatieme/AderXCoding/tree/master/system/tools/fzf) | [使用模糊搜索神器 FZF 来提升办公体验](https://blog.csdn.net/gatieme/article/details/113828826) | [Using FZF to Improve Productivit](https://oskernellab.com/2021/02/15/2021/0215-0001-Using_FZF_to_Improve_Productivity)| + + +
+ +2 **虚拟化子系统** +===================== + + + + +**-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* 重要功能和时间点 -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*** + + + + + +下文将按此目录分析 Linux 内核中 MM 的重要功能和引入版本: + + + + +**-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* 正文 -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*** + +# 1 membarrier +------- + + + + +| 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | +|:----:|:----:|:---:|:----:|:---------:|:----:| +| 2017/10/19 | Raghavendra K T | [membarrier: Provide register expedited private command](https://lore.kernel.org/patchwork/cover/843003) | 引入 MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED. | v6 ☑ 4.14-rc6 | [PatchWork v5](https://lore.kernel.org/patchwork/cover/835747)
*-*-*-*-*-*-*-*
[PatchWork v6](https://lore.kernel.org/patchwork/cover/398912) | +| 2017/11/21 | Raghavendra K T | [membarrier: Provide core serializing command](https://lore.kernel.org/patchwork/cover/843003) | 引入 MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED. | v6 ☑ 4.16-rc1 | [PatchWork v5](https://lore.kernel.org/patchwork/cover/835747)
*-*-*-*-*-*-*-*
[PatchWork v6](https://lore.kernel.org/patchwork/cover/398912) | +| 2018/01/29 | Raghavendra K T | [membarrier: Provide core serializing command](https://lore.kernel.org/patchwork/cover/843003) | 引入 MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED. | v6 ☑ 4.16-rc1 | [PatchWork v5](https://lore.kernel.org/patchwork/cover/835747)
*-*-*-*-*-*-*-*
[PatchWork v6](https://lore.kernel.org/patchwork/cover/398912) | + + +相关的文章介绍: [47]. + + + +
+ +* 本作品/博文 ( [AderStep-紫夜阑珊-青伶巷草 Copyright ©2013-2017](http://blog.csdn.net/gatieme) ), 由 [成坚(gatieme)](http://blog.csdn.net/gatieme) 创作. + +* 采用知识共享许可协议知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可. 欢迎转载、使用、重新发布, 但务必保留文章署名[成坚gatieme](http://blog.csdn.net/gatieme) ( 包含链接: http://blog.csdn.net/gatieme ), 不得用于商业目的. + +* 基于本文修改后的作品务必以相同的许可发布. 如有任何疑问, 请与我联系. + +* **转载请务必注明出处, 谢谢, 不胜感激** +
diff --git a/study/kernel/00-DESCRIPTION/SCHEDULER.md b/study/kernel/00-DESCRIPTION/SCHEDULER.md index 508dabc..9200747 100644 --- a/study/kernel/00-DESCRIPTION/SCHEDULER.md +++ b/study/kernel/00-DESCRIPTION/SCHEDULER.md @@ -193,7 +193,7 @@ BFS 的最后版本是 2016 年 12 月发布的 v0.512, 基于 v4.8 内核. 注意上面的描述是有问题的, SCHED_IDLE 和 idle 进程是完全不同的东西 -SCHED_IDLE 跟 SCHED_BATCH 一样, 是 CFS 中的一个策略, SCHED\_IDLE 的进程也是 CFS 调度类的一员, CFS内部的家务事, 意味着 SCHED\_IDLE 进程也是需要按照权重来分配CPU时间的, 只是权重很低而已. +SCHED_IDLE 跟 SCHED_BATCH 一样, 是 CFS 中的一个策略, SCHED\_IDLE 的进程也是 CFS 调度类的一员, CFS内部的家务事, 意味着 SCHED\_IDLE 进程也是需要按照权重来分配CPU时间的, 只是权重很低而已, 权重默认被[设置为 WEIGHT_IDLEPRIO(3), 参见 [cce7ade80369 sched: SCHED_IDLE weight change](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cce7ade803699463ecc62a065ca522004f7ccb3d). 另一方面, SCHED_IDLE 是用户赋予的, 的确可以用 **sched\_setscheduler()** API 设置此策略 @@ -223,6 +223,7 @@ SCHED_IDLE 跟 SCHED_BATCH 一样, 是 CFS 中的一个策略, SCHED\_IDLE 的 | 2019/10/24 | [sched/fair: Make sched-idle cpu selection consistent throughout 1143783 diffmboxseries](https://lore.kernel.org/patchwork/patch/1143783) | 重构了 SCHED_IDLE 时的选核逻辑, 所有的选核流程都将 avaliable_idle_cpu 和 sched_idle_cpu 同等对待 | v1 ☑ 5.4-rc1 | [PatchWork](https://lore.kernel.org/patchwork/patch/1143783) | | 2020/12/23 | [sched/fair: Load balance aggressively for SCHED_IDLE CPUs](https://lkml.org/lkml/2020/1/8/112) | LOAD_BALANCE 感知 SCHED_IDLE 优化, SCHED_IDLE 的 CPU 虽然运行着进程但是在调度器看来其实也是空闲的, 应该积极地进行负载均衡 | v1 ☑ 5.6-rc1 | [LKML](https://lkml.org/lkml/2020/1/8/112) | | 2021/02/22 | [sched: pull tasks when CPU is about to run SCHED_IDLE tasks](https://lore.kernel.org/patchwork/patch/1382990) | 在 CPU 从 SCHED_NORMAL 进程切换到 SCHED_IDLE 任务之前, 尝试通过 load_balance 从其他核上 PULL SCHED_NORMAL 进程过来执行. | v2 | [2020/12/27 v1](https://lore.kernel.org/patchwork/patch/1356241), [2021/02/22 v2](https://lore.kernel.org/patchwork/patch/1143783) | +| 2021/06/08 | [cgroup SCHED_IDLE support](https://lore.kernel.org/patchwork/patch/1443542) | 将 SCHED_IDLE 策略扩展到进程组. | v1 | [2021/06/08 v1](https://lore.kernel.org/patchwork/patch/1443542) | ### 1.1.1.5 吭哧吭哧跑计算 SCHED\_BATCH @@ -380,6 +381,9 @@ linux 调度器定义了多个调度类, 不同调度类的调度优先级不同 | 2010/06/08 | Michael Neuling | [sched: asymmetrical packing for POWER7 SMT4](https://lore.kernel.org/patchwork/cover/202834) | 这个补丁集实现了非对称 SMT 封装(SD_ASYM_PCAKING), 在任务负载小的时候, 将进程都打包在 SMT 域内的某一个 CPU 上, 从而确保在 POWER7 上始终保持良好的性能. 如果没有这个系列, 在 POWER7 上, 任务的性能将有大约 +/-30% 的抖动. | v2 ☐ |[PatchWork RFC](https://lore.kernel.org/patchwork/cover/1408312)) | | 2016/11/01 | Ricardo Neri | [Support Intel® Turbo Boost Max Technology 3.0](https://lore.kernel.org/patchwork/cover/722406) | 支持 Intel 超频 | RFC ☑ 5.9-rc1 | [PatchWork](https://lore.kernel.org/patchwork/cover/722406) | | 2021/05/13 | Ricardo Neri | [sched/fair: Fix load balancing of SMT siblings with ASYM_PACKING](https://lore.kernel.org/patchwork/cover/1428441) | 修复 ASYM_PACKING 和 load_balance 的冲突. | v3 ☐ | [PatchWork v1](https://lore.kernel.org/patchwork/cover/1408312)
*-*-*-*-*-*-*-*
[PatchWork v2](https://lore.kernel.org/patchwork/cover/1413015)
*-*-*-*-*-*-*-*
[PatchWork v3 0/6](https://lore.kernel.org/patchwork/cover/1428441) | +| 2011/12/15 | Peter Zijlstra | [sched: Avoid SMT siblings in select_idle_sibling() if possible](https://lore.kernel.org/patchwork/cover/274702) | 如果有共享缓存的空闲核心, 避免 select_idle_sibling() 选择兄弟线程. | v1 ☐ | [PatchWork v1](https://lore.kernel.org/patchwork/cover/274702) | + + core_scheduling 与 coscheduling @@ -410,6 +414,7 @@ coscheduling 协同调度是为了解决云服务场景, 为不同用户提供 | 2019/12/19 | Peter & Kirill Tkhai 等 | [Core scheduling (v9)](https://lore.kernel.org/patchwork/cover/1340764) | 核调度器, 限制同一个 SMT 域内的两个 CPU 只能运行同一组进程 | v9 ☐ |[PatchWork v9](https://lore.kernel.org/patchwork/cover/1340764) | | 2021/03/25 | Joel Fernandes 等 | [Core scheduling remaining patches rebase](https://lore.kernel.org/patchwork/cover/1369931) | Core scheduling v9 的大部分补丁都已经在合入队列了, 部分未合入补丁的重构与适配. | v10 ☐ | [PatchWork v9](https://lore.kernel.org/patchwork/cover/1369931)
*-*-*-*-*-*-*-*
[PatchWork v9 resend](https://lore.kernel.org/patchwork/cover/1401863) | | 2021/04/01 | Peter Zijlstra | [sched: Core scheduling interfaces](https://lore.kernel.org/patchwork/cover/1406301) | Peter 重新设计了 Core scheduling 的接口. | v10 ☐ |[PatchWork v9](https://lore.kernel.org/patchwork/cover/1406301) | +| 2021/04/22 | Peter Zijlstra | [sched: Core Scheduling](https://lore.kernel.org/patchwork/cover/1417028) | Peter 重构的 Core scheduling, 已经合入 TIP 分支 | v10 ☐ |[PatchWork v10](https://lore.kernel.org/patchwork/cover/1417028) | @@ -583,11 +588,11 @@ TencentOS-kernel 回合了主线 wake_affine 中几个优化迁移的补丁, 可 | 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | |:----:|:----:|:----:|:---:|:----------:|:---:| | 2016/05/06 | Peter Zijlstra | [sched: Rewrite select_idle_siblings()](https://lore.kernel.org/patchwork/cover/677017) | 通过这个补丁, 将 select_idle_siblings 中对 sched_domain 上 CPU 的单次扫描替换为 3 个显式的扫描.
1. select_idle_core 在 LLC 域内搜索一个空闲的 CORE
2. select_idle_cpu 在 LLC 域内搜索一个空闲的 CPU.
3. select_idle_smt 在目标 CORE 中搜索一个空闲的 CPU. | RFC ☑ 4.9-rc1 | [PatchWork](https://lore.kernel.org/patchwork/cover/677017) | -| 2021/03/01 | Song Bao Hua (Barry Song) | [scheduler: expose the topology of clusters and add cluster scheduler](https://lore.kernel.org/patchwork/cover/1388140) | 增加了 cluster 层次的 CPU select. 多个架构都是有 CLUSTER 域的概念的, 比如 Kunpeng 920 一个 NODE(DIE) 24个 CPU 分为 8 个 CLUSTER, 整个 DIE 共享 L3 tag, 但是一个 CLUSTER 使用一个 L3 TAG. 这种情况下对于有数据共享的进程, 在一个 cluster 上运行, 通讯的时延更低. | RFC ☑ 4.9-rc1 | [PatchWork](https://lore.kernel.org/patchwork/cover/1388140) | +| 2021/04/20 | Song Bao Hua (Barry Song) | [scheduler: expose the topology of clusters and add cluster scheduler](https://lore.kernel.org/patchwork/cover/1415806) | 增加了 cluster 层次的 CPU select. 多个架构都是有 CLUSTER 域的概念的, 比如 Kunpeng 920 一个 NODE(DIE) 24个 CPU 分为 8 个 CLUSTER, 整个 DIE 共享 L3 tag, 但是一个 CLUSTER 使用一个 L3 TAG. 这种情况下对于有数据共享的进程, 在一个 cluster 上运行, 通讯的时延更低. | RFC v6 ☐ | [PatchWork](https://lore.kernel.org/patchwork/cover/1415806) | -## 1.4.2 提升 CPU 的查找效率 +## 1.4.4 提升 CPU 的查找效率 ------- 每次为进程选择一个合适的 CPU 的时候, 较好的情况可以通过 wake_affine 等走快速路径, 但是最坏的情况下, 却不得不遍历当前 SD 查找一个 IDLE CPU 或者负载较小的 CPU. @@ -595,9 +600,12 @@ TencentOS-kernel 回合了主线 wake_affine 中几个优化迁移的补丁, 可 2020 年 12 月 15 日, 调度的大 Maintainer Peter Zijlstra, 曾公开抨击选核的慢速流程里面[部分代码, "The thing is, the code as it exists today makes no sense what so ever. It's plain broken batshit."](https://lkml.org/lkml/2020/12/15/93). +### 1.4.4.1 select_idle_sibling rework +------- + | 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | |:----:|:----:|:----:|:---:|:----------:|:---:| -| 2018/05/30 | Peter Zijlstra | [select_idle_sibling rework](https://lore.kernel.org/patchwork/patch/911697) | 优化 select_idle_XXX 的性能 | RFC | [select_idle_sibling rework](https://lore.kernel.org/patchwork/patch/911697) | +| 2018/05/30 | Peter Zijlstra | [select_idle_sibling rework](https://lore.kernel.org/patchwork/patch/911697) | 优化 select_idle_XXX 的性能 | RFC | [PatchWork RFC](https://lore.kernel.org/patchwork/patch/911697) | | 2019/7/1 | Subhra Mazumdar | [Improve scheduler scalability for fast path](https://lore.kernel.org/patchwork/cover/1094549) | select_idle_cpu 每次遍历 LLC 域查找空闲 CPU 的代价非常高, 因此通过限制搜索边界来减少搜索时间, 进一步通过保留 PER_CPU 的 next_cpu 变量来跟踪上次搜索边界, 来缓解此次优化引入的线程局部化问题 | v3 ☐ | [LWN](https://lwn.net/Articles/757379/), [PatchWork](https://lore.kernel.org/patchwork/cover/1094549/), [lkml](https://lkml.org/lkml/2019/7/1/450), [Blog](https://blogs.oracle.com/linux/linux-scheduler-scalabilty-like-a-boss) | | 2018/01/30 | Mel Gorman | [Reduce migrations and unnecessary spreading of load to multiple CPUs](https://lore.kernel.org/patchwork/cover/878789) | 通过优化选核逻辑, 减少不必要的迁移 | | | | 2019/1/21 | Srikar Dronamraju | [sched/fair: Optimize select_idle_core](https://lore.kernel.org/patchwork/patch/1163807) | | | | @@ -609,6 +617,16 @@ TencentOS-kernel 回合了主线 wake_affine 中几个优化迁移的补丁, 可 | 2020/12/08 | Mel Gorman | [Scan for an idle sibling in a single pass](https://lore.kernel.org/patchwork/cover/1371921) | 基于上面 Peter 的补丁的思路进行了重构, 减少 select_idle_XXX 的开销
1. 优化了 IDLE_CPU 扫描深度的计算方法
2. 减少了 CPU 的遍历次数, 重构了 sched_idle_XXX 函数
3. 将空闲的核心扫描调节机制转换为SIS_PROP, 删除了 SIS_PROP_CPU
3. | v5 ☑ 5.12-rc1 | [PatchWork](https://lore.kernel.org/patchwork/cover/1371921) | | 2021/03/26 | Rik van Riel | [sched/fair: bring back select_idle_smt, but differently](https://lore.kernel.org/patchwork/patch/1402916) | Mel Gorman 上面的补丁在 9fe1f127b913("sched/fair: Merge select_idle_core/cpu()") 中做了一些出色的工作, 从而提高了内核查找空闲cpu的效率, 可以有效地降低任务等待运行的时间. 但是较多的均衡和迁移, 减少的局部性和相应的 L2 缓存丢失的增加会带来一些负面的效应. 这个补丁重新将 `select_idle_smt` 引入回来, 并做了优化, 修复了性能回归, 在搜索所有其他 CPU 之前, 检查 prev 的兄弟 CPU 是否空闲. | v2 ☐ | [PatchWork](https://lore.kernel.org/patchwork/patch/1402916) | +### 1.4.4.2 avg_idle bypass +------- + +avg_idle 可以反应目前 RQ 进入 idle 的时间长短. + +| 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | +|:----:|:----:|:----:|:---:|:----------:|:---:| +| 2020/03/30 | Valentin Schneider | [sched: Align rq->avg_idle and rq->avg_scan_cost](https://lore.kernel.org/patchwork/patch/1217584) | NA | RFC | [2021/06/15 v2](https://lore.kernel.org/patchwork/patch/1217584) | +| 2021/06/15 | Peter Zijlstra | [sched/fair: Age the average idle time](https://lore.kernel.org/patchwork/patch/1446838) | NA | RFC | [2021/06/15 v2](https://lore.kernel.org/patchwork/patch/1446838) | + # 1.5 基于调度域的负载均衡 ------- @@ -725,7 +743,7 @@ NUMA 机器一个重要特性就是不同 node 之间的内存访问速度有差 | 2020/03/11 | Valentin Schneider | [sched: Streamline select_task_rq() & select_task_rq_fair()](https://lore.kernel.org/patchwork/patch/1208449) | 选核流程上的重构和优化, 当然除此之外还做了其他操作, 比如清理了 sd->flags 信息, 甚至 sysfs 接口都变成只读了 | | | | 2020/03/11 | Valentin Schneider | [sched: Instrument sched domain flags](https://lore.kernel.org/patchwork/cover/1208463) | 基于上一组补丁, 重构了 SD_FLAGS 的定义 | v4 ☑ 5.10-rc1 | | -## 1.5.4 load_balance 的其他优化 +## 1.5.5 load_balance 的其他优化 ------- Mel Gorman 深耕与解决 load_balance 以及 wake_affine 流程中一些不合理的行为. @@ -762,17 +780,32 @@ Vincent Guittot 深耕与解决 load_balance 各种疑难杂症和不均衡状 | 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | |:----:|:----:|:---:|:---:|:----------:|:----:| -| 2017/04/24 | Tejun Heo | [sched/fair: Fix O(nr_cgroups) in load balance path](https://lore.kernel.org/patchwork/patch/783385) | 优化 update_blocked_averages 的负载 | | v1 ☑ 4.13-rc1 | [PatchWork](https://lore.kernel.org/patchwork/patch/783385) | +| 2017/04/24 | Tejun Heo | [sched/fair: Fix O(nr_cgroups) in load balance path](https://lore.kernel.org/patchwork/patch/783385) | 优化 update_blocked_averages 的负载 | v1 ☑ 4.13-rc1 | [PatchWork](https://lore.kernel.org/patchwork/patch/783385) | | 2019/02/06 | Vincent Guittot | [sched/fair: Fix O(nr_cgroups) in load balance path]()](https://lore.kernel.org/patchwork/cover/1039223) | 优化 update_blocked_averages 的负载 | v1 ☑ 5.1-rc1 | [PatchWork](https://lore.kernel.org/patchwork/patch/1039223) | | 2017/12/18 | Vincent Guittot | [move update blocked load outside newidle_balance](https://lore.kernel.org/patchwork/cover/1383963) | Joel报告了 newidle_balance 中的抢占和irq关闭序列很长, 因为大量的 CPU cgroup 正在使用, 并且需要更新. 这个补丁集将更新 update_blocked_average 移动到 newidle_imblance 之外. | v2 ☐ | [PatchWork](https://lore.kernel.org/patchwork/cover/1383963) | -## 1.5.5 idle balance + +## 1.5.6 idle balance ------- | 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | |:----:|:----:|:---:|:---:|:----------:|:----:| -| 2013/08/29 | Jason Low | [sched: Limiting idle balance](https://lore.kernel.org/patchwork/patch/403138) | 限制 idle balance | | v1 ☑ 4.13-rc1 | [PatchWork](https://lore.kernel.org/patchwork/patch/403138) | +| 2013/08/29 | Jason Low | [sched: Limiting idle balance](https://lore.kernel.org/patchwork/patch/403138) | 限制 idle balance | v1 ☑ 4.13-rc1 | [PatchWork](https://lore.kernel.org/patchwork/patch/403138) | + + +## 1.5.7 active load_balance +------- + + +最早的时候, Valentin Schneider 阅读代码发现, active load_balance 和 sched_switch 之间存在一个 race, 因为当前 CPU/RQ 永远无法感知到远程的 RQ 上正在运行着什么样的进程, 因此可能会发生, cpu_stopper 触发 migration/N 抢占高优先级进程(比如 RT) 的情况. 并提出了自己的优化方案 [sched/fair: Active balancer RT/DL preemption fix](https://lore.kernel.org/patchwork/patch/1115663). + +后来 Yafang Shao 上报了一个现象, 经过分析, 就是 Valentin Schneider 之前走读代码发现的那种情况, [migration 进程抢占了一个 RT 进程](https://lkml.org/lkml/2021/6/14/204). 它尝试直接规避这种方式, [阻止抢占非 CFS 的高优先级进程](https://lore.kernel.org/patchwork/patch/1446860) + +| 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | +|:----:|:----:|:---:|:---:|:----------:|:----:| +| 2021/06/02 | Valentin Schneider | [sched/fair: Active balancer RT/DL preemption fix](https://lore.kernel.org/patchwork/patch/1115663) | | v2 ☐ | [PatchWork v1](https://lore.kernel.org/patchwork/patch/1115663) | +| 2021/06/02 | Yafang Shao | [sched, fair: try to prevent migration thread from preempting non-cfs task](https://lore.kernel.org/patchwork/patch/1440172) | 规避问题 [a race between active_load_balance and sched_switch](https://lkml.org/lkml/2021/6/14/204), []() | v1 ☐ | [PatchWork v1 old](https://lore.kernel.org/patchwork/patch/1440172), [PatchWork v1](https://lore.kernel.org/patchwork/patch/1446860) | # 1.6 pick_next_task @@ -910,6 +943,14 @@ CPUFreq 驱动是处理和平台相关的逻辑, Governor 中实现了具体的 | 2016/02/23 | Steve Muckle 等 | [sched: scheduler-driven CPU frequency selection](https://lore.kernel.org/patchwork/cover/649930) | 调度器驱动的调频 cpufreq_sched | RFC v7 | [PatchWork](https://lore.kernel.org/patchwork/cover/649930), [lkml](https://lkml.org/lkml/2016/2/22/1037) | | 2016/03/22 | Rafael J. Wysocki | [cpufreq: schedutil governor](https://lore.kernel.org/patchwork/cover/660587) | 基于 utilization update callback callback 的 schedutil 的调频 governor | v6 ☑ 4.7-rc1 | [PatchWork](https://lore.kernel.org/patchwork/cover/660587), (https://lkml.org/lkml/2016/3/29/1041) | +## 1.7.6 freezer 冻结 +------- + +| 时间 | 特性 | 描述 | 是否合入主线 | 链接 | +|:----:|:----:|:---:|:------:|:---:| +| 2016/02/23 | Steve Muckle 等 | [freezer,sched: Rewrite core freezer logic](https://lore.kernel.org/patchwork/cover/1444882) | 重写冻结的核心逻辑, 从而使得 WRT 解冻的表现更加合理. 通过将 PF_FROZEN 替换为 TASK_FROZEN (一种特殊的块状态), 可以确保冻结的任务保持冻结状态, 直到明确解冻, 并且不会像目前可能的那样过早随机唤醒. | v2 | [2021/06/01 RFC](https://lore.kernel.org/patchwork/cover/1439538)
*-*-*-*-*-*-*-*
[2021/06/01 RFC](https://lore.kernel.org/patchwork/cover/1444882) | + + # 1.8 实时性 linux PREEMPT_RT ------- @@ -1064,7 +1105,10 @@ Linux 内核会将大量(并且在不断增加中)工作放置在内核线程中 后来主线上 Dexuan Cui 报 Migrate Disable 合入后引入了问题, [5.10: sched_cpu_dying() hits BUG_ON during hibernation: kernel BUG at kernel/sched/core.c:7596!](https://lkml.org/lkml/2020/12/22/141). Valentin Schneider 怀疑是有些 kworker 线程在 CPU 下线后又选到了下线核上运行, 因此建议去测试这组补丁 [workqueue: break affinity initiatively](https://lkml.org/lkml/2020/12/18/406). Dexuan Cui 测试以后可以解决这个问题, 但是会有其他 WARN. Peter Zijlstra 的 解决方案如下 [sched: Fix hot-unplug regression](https://lore.kernel.org/patchwork/cover/1368710). -# 1.9 CPU HOTPLUG 中的调度处理 +# 1.9 其他 +------- + +## 1.9.1 CPU HOTPLUG 中的调度处理 ------- @@ -1076,6 +1120,17 @@ Linux 内核会将大量(并且在不断增加中)工作放置在内核线程中 | 2020/10/23 | Peter Zijlstra | [sched: Migrate disable support](https://lore.kernel.org/patchwork/cover/1323936) | 在启用 PREEMPT_RT 的内核上, 包括spin/rw锁持有部分在内的大部分代码都是可抢占的, 也使得任务可以迁移. 这违反了每个CPU的约束. 因此, PREEMPT_RT 需要一种独立于抢占的机制来控制迁移. 此特性移除了 sched_cpu_dying(), 改为 balance_push 来完成这个操作 | v4 ☑ 5.11-rc1 | [2020/09/11 preparations](https://lore.kernel.org/patchwork/cover/1304210)
*-*-*-*-*-*-*-*
[2020/09/21 v1 PatchWork](https://lore.kernel.org/patchwork/cover/1309702)
*-*-*-*-*-*-*-*
[2020/10/23 v4 PatchWork](https://lore.kernel.org/patchwork/cover/1323936) | + +## 1.9.2 Google Fibers 用户空间调度框架 +------- + +"Google Fibers" 是一个用户空间调度框架, 在谷歌广泛使用并成功地用于改善进程内工作负载隔离和响应延迟. 我们正在开发这个框架, UMCG(用户管理并发组)内核补丁是这个框架的基础. + + +| 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | +|:----:|:----:|:---:|:----:|:---------:|:----:| +| 2021/05/20 | Peter Oskolkov | [UMCG early preview/RFC patchset](https://lore.kernel.org/patchwork/cover/1433967) | per-cgroup 的 NUMASTAT 功能 | [PatchWork v8](https://lore.kernel.org/patchwork/cover/1433967) | + # 1.10 调试信息 ------- diff --git a/study/kernel/01-process/00-code/COW/COW b/study/kernel/01-process/00-code/COW/COW new file mode 100755 index 0000000000000000000000000000000000000000..e8251a0becf7fe126a1b798cd5bdb1f871f4c68c GIT binary patch literal 8464 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 literal 0 HcmV?d00001 diff --git a/study/kernel/01-process/00-code/COW/COW.c b/study/kernel/01-process/00-code/COW/COW.c new file mode 100644 index 0000000..6e47562 --- /dev/null +++ b/study/kernel/01-process/00-code/COW/COW.c @@ -0,0 +1,37 @@ +#include +#include + +#include +#include +#include + +#define MAP_SIZE 1024*1024 + +int main(int argc, char **argv) +{ + unsigned char *m; + int i; + pid_t pid; + + m = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0); + + for (i = 0; i < MAP_SIZE; i++) + m[i] = 10; + + pid = fork(); + if (pid == -1) { + exit(1); + } else if (pid == 0) { + sleep(10); + } else { + sleep (5); + + /* Cow */ + for (i = 0; i < MAP_SIZE; i++) + m[i] = 20; + printf("cow is done in parent pscess\n"); + sleep(10); + } + + return EXIT_SUCCESS; +} diff --git a/study/kernel/01-process/00-code/COW/Makefile b/study/kernel/01-process/00-code/COW/Makefile new file mode 100644 index 0000000..4d7accf --- /dev/null +++ b/study/kernel/01-process/00-code/COW/Makefile @@ -0,0 +1,18 @@ +target=fork COW + + + +all:$(target) + +fork : fork.o + $(CC) $^ -o $@ $(LDFLAGS) + +COW : COW.o + $(CC) $^ -o $@ $(LDFLAGS) + +%.o : %.c + $(CC) -g -c $^ -o $@ $(CFLAGS) $(DEFINES) + +clean : + rm -rf *.o + rm -rf $(target) diff --git a/study/kernel/01-process/00-code/COW/fork b/study/kernel/01-process/00-code/COW/fork new file mode 100755 index 0000000000000000000000000000000000000000..7692e780beb0785a04b1df0c5c790c28c666013a GIT binary patch literal 11240 zcmeHNeQ;FQb-!;{E3H=2YC!@7#AP86V>{ZFK!6-9(CPzL8SxPiu`>xg_Ty=_Wwon$ z`xZ;o)J#PjD?|yNrXK1^V;WCgCDU~1H0_XfrjZ9il9{H1(>C=u>D2bbF1U70>%h4F zK>eNj?vdU;R!L{tzdF9K@0|0y=bZcf-nsYc(f+|*9!(RRykdtSDO7DE-6~_`qly9P z7M-FN&vjz0Ahjxq+41IM1ELnqfCVe zOMvXCuIC%12pX0QQ%lujTv4_ok?bxgy9>&W=?zserrbVi8~uiqKR4||9wnxvOKJbB zR+{)nlp{BNKxzrWls`@ik%@xsHHo3JUnoGClviZ_@ z>v-qZ)~y|pVj;3gwwwHu?(V&ZWJxsM+_hBaX8Z`F{QS*F_nmz2?11m2Ec> z{FRye$(Da$|HtW5&;@tK27Z;wT@QR+1^v23 z^ac7mMcunq3>VB}B4b!%*|Zolvw3S+6my0#CUiYDp3sN0`9v;z!hlFNdeKUlmOh%u z=Ed&8fu3G{Q)E+Qi_iy#_ULKDG&0$uWtc;IdUJ)mF_cK=$TBlp$SX_TR;{Q=4e-c+ zyOtV~G`~6h(1EL_%B-snT)ny^9-n-} zA3x*k4}?Yh^Rt#`?rMDUvj38p+wz~aVKKMimv}a==>|vg2-#eJX%1<_>m*ZGT)!&i zS4gHRUZ0inizHLku3wNc*$J(z5s0F(+$51m+|SY z*Pu1G>{;0SvT;qHgr0|RC_e4`5orAWcj8m8S}RfY6C|SQ4TtAm8jdusIW7GkzC^WN zkm2$PQk>rMMd{|A+pv#6ciS7Ex)Fcw+RnIkCI0+vs|5~Y%3(b@T+H98t}dvFQZzo< zwSu@qRG<3znXXlkt~H>^*W!3w@hyX_QFTsH#ooRImuL^EAHF^e4dM=B7&cCw{CRw; zboJVEx98@j`rnv5`GzPBp1JEMe)u~{*o#wF(2QH~a*|K{SP3uzu|HuNd8=}s&{li5ccOi?-a1edjL^#C^ov^=;6jZ9LFT{G}lm5*6b94JiHyGL# zZ24qk-NXJA``AJVDvi}@@KS6ot35x|ok9m3+V!ij~?DnBQ zC4|?iZ0|$LA3iry=Kj8+y=6IUM zZ+CC+C&C*KB};j$6y6ru5@~DQT#{1zZ?|_w+B)vBQSoso+XH5I=PETC=NBpMkI+kY zzxlN`7}kFm-MRzHl?*-G$omTvAb9;Xd!gyo{9B25YW|%_Rn0*OR(DF!*9y(5DjzmP zFz`{J>e+}wykE)^+eqv*u|9vb|I46Wt$HUcYl!y;@pz%?<|=5_J_Ek$RuWH9`x=0% z_Z|o9ul+IM?-L)Yogw@K;#+D@!%Nj|;={GSM>=!FZwzRpBQz4)0@EaDQs@lKkcCGI z-GT2@PL&kmfrm-(Nnt-?e+bo5cqnk01iy9w3P%HLNiCo~1Tqp>NkYArgu+iE|61!za+I4+7N`_37jCc7VQYI$-rBr_7N=);qgF(ayDqc z1?+6#3JI;+V-U^-eoR6{3g-j=KtfasGl8Fx&?bcofmcY_q|w-1419wM-7M=i8=wtE z)fSBoUM`EecPZ;Be*s`i)p=@U?JOz$A+e%%J@Mb5=K5=&A^zDU;E<^HQ%_X;pMq3R z14-3xpgBV*jiy9TGukAAOJLr3lzi;e2ygrrbgQ~;o=(E5Vv?`+(^%Gg8!DkM;NklM z6(4$=*vBRNBJzDxlBL&D^{OPE^?we9xA0pcYJLF{`g=U8R}+F+`7$&xn+K>4e+9l~ zoo6K$MYW$MiG0`l*Gm?n@NY^I`ZXx~w@LP2;Kje4*rnHjYPH1HdP8b+-1Hp+>j-qO zDD7*_ee;=~CkC6>NQnyfJkh<3&Jwf+GW0xwa8_HQZ3s5id4sFbT}x|1Xr5=e@CH9o zx4mwl2~Aip>gskNAHAhmKl-8(C>leAv}!&ki1?c{Z?LY8Y&D3r4fBpVp&d}7Z=i|9 zIxYr1sc8dEWYMq|exk?>Ho^1(e9{^_Y#%V%xsrg80#L3EELlsP9<=;qM*&4M_k2I)7}d<;3>~csSl&2qDiM=(M&28 z#W9$^wL_hWW%8xywrDn=%9YZFka|kEQ!kmdie)N7p7TUfC{h%yblMn>jL=u#niw;R zU_FA4gt7&jg@$A?oW+TvZkT2c$2xXiDGxRc9+@~cDvVirs$d#+CdR|VbH!Vy-JHz$ zUwzuMuK8*IzkbG3gLXnan@McH`3wMNWvtgl%t&aOj+Q9`)uC! zZr2uGsW+u(=-ACoCW<(oE9FZ?BfW_RMGnDO!EPFKWy|DY9~~27`sjIM9L>_l66toE zY_iE_n{?P@i=aKb8o)a$XctZ+tWyiOc3^06(3msw1@zSjoh`}?z&Owi_qMm&5kk0i z)GFnTu8e`Xl1)KOn5mI2`>;6NnhCcK<9IT4j0V{4jMB#No`*XD}=fb{}-%jKG_pUVl*4js9&AD zSeKnxkM88fBIR>`XPy@;kv@CwIPc=zIPc!v_+90IlDzVEqC5*<7|g=|m@7x|F$Unlcy+tRk>X~;Pq}dV z{1VRlR`y3hy@uT&_XCwjX%~JPPW9aVKMI`u@IIJyDNW#~i95&f9Pmo@U#wkEOFv7+ zW!@-4=2Xegw`FG29rgSh;2L(f?s@V9rO*3s_D!)P#fa{C`zBDW!o2dL0ZY*jZE8OA z>!1mEm|VHiqY}S!9!8}fmomg&;33Rg9v9YVkotG7$4@Te=g1=XN#)_QH{ZLrxILZ6cj}x(Z+P1E{6Bcx5uoR~&eD1?4 z_d&nXeWOU379y+RVT1$=w|=@cs;B7Q5AlPZF6fzDA(_bOX?%!_dZIKgQiaj6oM9R1 z$hNKbcUD%S8^^4kFwMjSq7TcQ5W{9-)X>wV(a{N*I3yjKR=KK*QuJL1Vte}a{=I!V zMQ&w!h&uW{vp2S9ptn3n-fRLw$f5Vgm4|rW0io|6+}9Hu)c5V$b+CU(ABy!1_LEn6 zADSwbWR3BCU;GBtzFzI_F1s-`WQb&6xw^94SFP@Bvb670QH}D;RXtrS=p%`Inl4@` zPN7IgrvT4cW9ksd$zoBtkujdGbQC0xD3; zwCME)>C^aO|2uEbaWhjsuO?ke z?*2OhjLw3&{v2O3<#TGTKkG3)275YNW|`w~reWk$a@XHRg*X9*`jqWCUS~S16uEqN z`%f$T9;L_U=S+_}?3aUg+tb+^^$CZ0{M})SNTV#d$A1dBPJ7-bFqL<&4i6#4GyST| ze!e2ALR?>V!7|f7aM|)!rhmY>|e^c3WF&w`z-OdFm>bCzg zmp#XgOdt3)_TO{a^S+2_$Ti`)-`MSsz)-ADYlsrZv;22sZhe-S{v&J}@nd_A^JlO% zq{Mo*v>-G7GBRkW*`DKU{<}Q>`#YYWY{&D5_65{Lwm;t(hJSnZAxJ zr~P~!s|w)t&mP#0B@+VFEGw!g;-f@gcCw;h;MwM&)n z_RDsxOZxyfMtP&k{+rw|W#HCbxrqI8)p2wx?@TUH+`WkX-OFsNcb&%I-S(T6y}O-j z>1BuHTcrN%hbXUIX`mh()z*DhO}sF0Duc(Lzd!VTa1{XrfA+IR64B*y&gI& +#include + +#include +#include + + + +int data = 10; + +int main(int argc, char* argv[]) +{ + int pid; + + pid = fork(); + if (pid == 0) { + printf("Child process %d, data %d\n", getpid(), data); + data = 20; + printf("Child process %d, data %d\n", getpid(), data); + } else { + sleep(1); + printf("Parent process %d, data %d\n", getpid(), data); + } + + return EXIT_SUCCESS; +} diff --git a/study/problem/issue/3-numa_dismeter/0001-README.md b/study/problem/issue/3-numa_dismeter/0001-README.md index 25347bb..0016bb5 100755 --- a/study/problem/issue/3-numa_dismeter/0001-README.md +++ b/study/problem/issue/3-numa_dismeter/0001-README.md @@ -49,8 +49,8 @@ blogexcerpt: 这篇文章旨在帮助希望更好地分析其应用程序中性 | 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | |:----:|:----:|:--:|:----:|:---------:|:----:| -| 2021/01/15 | Song Bao Hua (Barry Song) | [sched/fair: first try to fix the scheduling impact of NUMA diameter > 2 1366256 diffmboxseries](https://lore.kernel.org/patchwork/patch/1366256) | 尝试修复 3 跳问题导致的性能蜕化 | RFC | [PatchWork](https://lore.kernel.org/patchwork/cover/1366256) | -| 2021/01/27 | Song Bao Hua (Barry Song) | [sched/topology: fix the issue groups don't span domain->span for NUMA diameter > 2](https://lore.kernel.org/patchwork/patch/1371875)| 修复 | v2 | [PatchWork](https://lore.kernel.org/patchwork/cover/1371875), [LKML]() | +| 2021/01/15 | Song Bao Hua (Barry Song) | [sched/fair: first try to fix the scheduling impact of NUMA diameter > 2](https://lore.kernel.org/patchwork/patch/1366256) | 尝试修复 3 跳问题导致的性能蜕化 | RFC | [PatchWork](https://lore.kernel.org/patchwork/cover/1366256) | +| 2021/01/27 | Song Bao Hua (Barry Song) | [sched/topology: fix the issue groups don't span domain->span for NUMA diameter > 2](https://lore.kernel.org/patchwork/patch/1371875)| 修复 | v2 5.13-rc1 ☑ | [PatchWork](https://lore.kernel.org/patchwork/cover/1371875) | @@ -1249,8 +1249,8 @@ load_balance | 时间 | 作者 | 特性 | 描述 | 是否合入主线 | 链接 | |:----:|:----:|:--:|:----:|:---------:|:----:| | 2021/01/22 | Valentin Schneider | [sched/topology: NUMA distance deduplication](https://lore.kernel.org/patchwork/cover/1369363) | 修复 | v1 | [PatchWork](https://lore.kernel.org/patchwork/cover/1369363), [LKML](https://lkml.org/lkml/2021/1/22/460) | -| 2021/01/15 | Song Bao Hua (Barry Song) | [sched/fair: first try to fix the scheduling impact of NUMA diameter > 2 1366256 diffmboxseries](https://lore.kernel.org/patchwork/patch/1366256) | 尝试修复 3 跳问题导致的性能蜕化 | RFC | [PatchWork](https://lore.kernel.org/patchwork/cover/1366256) | -| 2021/01/27 | Song Bao Hua (Barry Song) | [sched/topology: fix the issue groups don't span domain->span for NUMA diameter > 2](https://lore.kernel.org/patchwork/patch/1371875)| 修复 3 跳问题的拓扑构建 | v2 | [PatchWork](https://lore.kernel.org/patchwork/cover/1371875), [LKML]() | +| 2021/01/15 | Song Bao Hua (Barry Song) | [sched/fair: first try to fix the scheduling impact of NUMA diameter > 2](https://lore.kernel.org/patchwork/patch/1366256) | 尝试修复 3 跳问题导致的性能蜕化 | RFC | [PatchWork](https://lore.kernel.org/patchwork/cover/1366256) | +| 2021/01/27 | Song Bao Hua (Barry Song) | [sched/topology: fix the issue groups don't span domain->span for NUMA diameter > 2](https://lore.kernel.org/patchwork/patch/1371875)| 修复 | v2 5.13-rc1 ☑ | [PatchWork](https://lore.kernel.org/patchwork/cover/1371875) |