schedutil governor情景分析

作者:OPPO内核团队 发布于:2022-4-26 6:29 分类:进程管理

这是一篇分析schedutil governor(后文称之sugov)代码逻辑的文章。通过详细的代码级别的分析,希望能够帮助读者理解sugov的代码精妙之处。本文主要分四个章节:第一章简单重复了sugov相关的软件结构和基本算法,让读者对整个sugov在系统所处的位置和基本的逻辑控制有所了解。第二章对sugov使用的数据结构给出了详细的解释。第三章对sugov和cpufreq core的基本数据流和控制流进行分析。第四章描述了sugov本身的调频逻辑。

本文出现的内核代码来自Linux5.10.61,为了减少篇幅,我们会引用缩减版本的代码(仅包含主要逻辑),如果有兴趣,读者可以配合原始代码阅读本文。

阅读全文>>

标签: governor schedutil

评论(2) 浏览(2760)

PELT算法浅析

作者:OPPO内核团队 发布于:2022-4-7 7:09 分类:进程管理

Linux是一个通用操作系统的内核,她的目标是星辰大海,上到网络服务器,下至嵌入式设备都能运行良好。做一款好的linux进程调度器是一项非常具有挑战性的任务,因为设计约束太多了:

---它必须是公平的

---快速响应

---系统的throughput要高

---功耗要小

3.8版本之前的内核CFS调度器在计算CPU load的时候采用的是跟踪每个运行队列上的负载(per-rq load tracking)。这种粗略的负载跟踪算法显然无法为调度算法提供足够的支撑。为了完美的满足上面的所有需求,Linux调度器在3.8版中引入了PELT(Per-entity load tracking)算法。本文将为您分析PELT的设计概念和具体的实现。

本文出现的内核代码来自Linux5.10.61,如果有兴趣,读者可以配合代码阅读本文。

阅读全文>>

标签: PELT

评论(8) 浏览(2822)

load_balance函数代码详解

作者:OPPO内核团队 发布于:2022-2-16 7:29 分类:进程管理

我们描述CFS任务负载均衡的系列文章一共三篇,第一篇是框架部分,第二篇描述了task placement和active upmigration两个典型的负载均衡场景,第三篇是负载均衡的情景分析,包括tick balance、nohz idle balance和new idle balance。在负载均衡情景分析文档最后,我们给出了结论:tick balancing、nohz idle balancing、new idle balancing都是万法归宗,汇聚到load_balance函数来完成具体的负载均衡工作。本文就是第三篇负载均衡情景分析的附加篇,重点给大家展示load_balance函数的精妙。

本文出现的内核代码来自Linux5.10.61,为了减少篇幅,我们对引用的代码进行了删减(例如去掉了NUMA的代码,毕竟手机平台上我们暂时不关注这个特性),如果有兴趣,读者可以配合完整的源代码代码阅读本文。

阅读全文>>

标签: load_balance

评论(1) 浏览(2782)

CFS任务放置代码详解

作者:OPPO内核团队 发布于:2021-12-31 7:00 分类:进程管理

我们描述CFS任务负载均衡的系列文章一共三篇,第一篇是框架部分,第二篇描述了task placement的逻辑过程,第三篇是负载均衡的情景分析,包括tick balance、nohz idle balance和new idle balance。之前已经有一篇关于task placement的文档发表在本站,为了更精细的讲解代码逻辑,我们这次增加了代码分析部分。本文作为第二篇任务放置的附篇,深入讲解task placement的代码流程。

本文出现的内核代码来自Linux5.10.61,为了减少篇幅,我们对引用的代码进行了删减(例如去掉了NUMA的代码,毕竟手机平台上我们暂时不关注这个特性),如果有兴趣,读者可以配合完整的源代码代码阅读本文。

阅读全文>>

标签: 任务放置 task placement

评论(0) 浏览(2952)

CFS任务的负载均衡(load balance)

作者:OPPO内核团队 发布于:2021-11-22 20:49 分类:进程管理

我们描述CFS任务负载均衡的系列文章一共三篇,第一篇是框架部分,第二篇描述了task placement和active upmigration两个典型的负载均衡场景。本文是第三篇,主要是分析各种负载均衡的触发和具体的均衡逻辑过程。

本文出现的内核代码来自Linux5.10.61,为了减少篇幅,我们尽量删除不相关代码,如果有兴趣,读者可以配合代码阅读本文。

阅读全文>>

标签: load balance

评论(1) 浏览(3869)

CFS任务的负载均衡(任务放置)

作者:OPPO内核团队 发布于:2021-11-12 6:55 分类:进程管理

负载均衡的系列文章共分为三篇,第一篇为框架篇,描述负载均衡的相关原理、场景和框架。本篇作为该系列文章第二篇,主要通过对任务放置场景(task placement)的均衡分布进行分析,加深对内核调度器实现任务均衡分布的理解。

本文基于linux-5.4.24分析,由于涉及较多代码的讲解,建议结合源码阅读。另外,浏览本文前,建议先阅读负载均衡系列文章第一篇:CFS任务的负载均衡(概述)。当然,部分已经提及的基本概念,在本文中也会进行简单回顾。

阅读全文>>

标签: 负载均衡 任务放置

评论(0) 浏览(3315)

CFS任务的负载均衡(概述)

作者:OPPO内核团队 发布于:2021-11-5 6:39 分类:进程管理

我们描述负载均衡的系列文章一共三篇,第一篇是框架部分,即本文,主要描述了负载均衡相关的原理、场景和框架。后面的两篇是对均衡代码的情景分析,通过对tick balance、new idle balance和task placement等几个典型的负载均衡来呈现其实现细节,稍后发布,敬请期待。

本文出现的内核代码来自Linux5.10.61,如果有兴趣,读者可以配合代码阅读本文。

阅读全文>>

标签: 进程管理

评论(7) 浏览(5423)

CFS调度器(6)-总结

作者:smcdef 发布于:2019-1-1 12:37 分类:进程管理

CFS调度器-总结

经过前面一系列的文章描述,我们已经对CFS调度器有了一定的认识。那么本篇文章就作为一篇总结和思考。我们就回忆一下CFS调度器的那些事。我们就以问题的形式重新回顾一遍CFS调度器设计的原理。现在开始,我们问题来了。


阅读全文>>

标签: CFS

评论(5) 浏览(12201)

CFS调度器(5)-带宽控制

作者:smcdef 发布于:2018-12-22 15:07 分类:进程管理

前言

什么是带宽控制?简而言之就是控制一个用户组在给定周期时间内可以消耗CPU的时间,如果在给定的周期内消耗CPU时间超额,就限制该用户组内任务调度,直到下一个周期。限制某个进程的最大CPU使用率是否真的有必要呢?如果一个系统中仅存在一个进程,限制该进程使用CPU使用率最大50%,当进程使用率达到50%的时候,就限制该进程运行,CPU进入idle状态。看起来好像没有任何意义。但是,有时候,这正是系统管理员可能想要做的事情。如果这些进程属于仅支付了一定CPU时间的客户或者需要提供严格资源的情况,则限制进程(或进程组)可能消耗的CPU时间的最大份额是很有必要的。毕竟付多少钱享受多少服务。本文章仅讨论SCHED_NORMAL进程的CPU带宽控制(CPU bandwidth control)。

注:代码分析基于Linux 4.18.0。

阅读全文>>

标签: CFS bandwidth

评论(12) 浏览(18092)

CFS调度器(4)-PELT(per entity load tracking)

作者:smcdef 发布于:2018-12-2 15:40 分类:进程管理

为什么需要PELT?

为了让调度器更加的聪明,我们总是希望系统满足最大吞吐量同时又最大限度的降低功耗。虽然可能有些矛盾,但是现实总是这样。PELT算法是Linux 3.8合入的,那么在此之前,我们存在什么问题才引入PELT算法呢?在Linux 3.8之前,CFS以每个运行队列(runqueue,简称rq)为基础跟踪负载。但是这种方法,我们无法确定当前负载的来源。同时,即使工作负载相对稳定的情况下,在rq级别跟踪负载,其值也会产生很大变化。为了解决以上的问题,PELT算法会跟踪每个调度实体(per-scheduling entity)的负载情况。

注:代码分析基于Linux 4.18.0。


阅读全文>>

标签: PELT

评论(15) 浏览(18430)

Copyright @ 2013-2015 蜗窝科技 All rights reserved. Powered by emlog