cfs

What is the relationship between cpu.shares and cpu.cfs_quota_us in context of cgroup?

你。 提交于 2021-02-07 09:57:39
问题 I'm using centos6/7 and using cgroup to manage cpu resources. I have read through the RHEL document but have no answer to my question below: If I set both cfs_quota_us and shares among cgroups, then what will happen? (e.g. will cfs_quota_us take precedence over shares?) Thank you in anticipation! 回答1: My understanding is that for the same level of two cgroups (only), e.g.: foo | +- bar | +- baz Then bar and baz will firstly share the cpu occupied on foo according to cpu.share . Let's say the

SchedTune

岁酱吖の 提交于 2020-03-27 13:23:28
本文仅是对kernel中的document进行翻译,便于理解。后续再添加代码分析。 1. 为何引入schedtune? schedutil是一个基于利用率驱动的cpu频率governor。它允许调度器为了cpu上运行的task选出最优的工作频率点(DVFS operating point: OPP)。 但是,有时候我们需要故意进行boost,来满足特定场景下的性能要求,尽管这样会产生更大的功耗。比如,为了缩短task的响应时间,我们希望task运行在一个比实际cpu带宽要求更高的OPP。 还有一个重要原因是我们想用schedutil governor来替代当前所有的CPUFreq pollicy。schedutil是基于event的,而当前governor是基于采样的,所以schedutil对task选择最优OPP的更加迅速。但是仅仅跟踪实际的task使用率可能不足以表达当前的性能。比如,它不能做到类似“performance”、“interactive” CPUFreq governor的相关行为。 于是,就引入了schedtune。它是一套处于governor架构上层的、可调节的工具,扩展了对task performance boosting的支持。 performance boosting的意思:缩短task启动的时间。例如,一个task从唤醒到其再次休眠或者退出的时间

【原创】(五)Linux进程调度-CFS调度器

安稳与你 提交于 2020-03-15 02:10:15
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本:4.14 ARM64处理器,Contex-A53,双核 使用工具:Source Insight 3.5, Visio 1. 概述 Completely Fair Scheduler ,完全公平调度器,用于Linux系统中普通进程的调度。 CFS 采用了红黑树算法来管理所有的调度实体 sched_entity ,算法效率为 O(log(n)) 。 CFS 跟踪调度实体 sched_entity 的虚拟运行时间 vruntime ,平等对待运行队列中的调度实体 sched_entity ,将执行时间少的调度实体 sched_entity 排列到红黑树的左边。 调度实体 sched_entity 通过 enqueue_entity() 和 dequeue_entity() 来进行红黑树的出队入队。 老规矩,先上张图片来直观了解一下原理: 每个 sched_latency 周期内,根据各个任务的权重值,可以计算出运行时间 runtime ; 运行时间 runtime 可以转换成虚拟运行时间 vruntime ; 根据虚拟运行时间的大小,插入到CFS红黑树中,虚拟运行时间少的调度实体放置到左边;

【原创】(四)Linux进程调度-组调度及带宽控制

馋奶兔 提交于 2020-03-10 23:36:21
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本:4.14 ARM64处理器,Contex-A53,双核 使用工具:Source Insight 3.5, Visio 1. 概述 组调度( task_group )是使用Linux cgroup(control group) 的cpu子系统来实现的,可以将进程进行分组,按组来分配CPU资源等。 比如,看一个实际的例子: A和B两个用户使用同一台机器,A用户16个进程,B用户2个进程,如果按照进程的个数来分配CPU资源,显然A用户会占据大量的CPU时间,这对于B用户是不公平的。组调度就可以解决这个问题,分别将A、B用户进程划分成组,并将两组的权重设置成占比50%即可。 带宽( bandwidth )控制,是用于控制用户组( task_group )的CPU带宽,通过设置每个用户组的限额值,可以调整CPU的调度分配。在给定周期内,当用户组消耗CPU的时间超过了限额值,该用户组内的任务将会受到限制。 由于组调度和带宽控制紧密联系,因此本文将探讨这两个主题,本文的讨论都基于CFS调度器,开始吧。 2. task_group 组调度,在内核中是通过 struct task_group 来组织的,

调度系统设计精要

百般思念 提交于 2020-02-26 22:26:34
作者 | Draveness 导读 :本文作者写这篇文章前前后后大概 2 个月的时间,全文大概 2w 字,建议收藏后阅读或者通过电脑阅读。 调度是一个非常广泛的概念,很多领域都会使用调度这个术语,在计算机科学中, 调度 就是一种将任务(Work)分配给资源的方法。任务可能是虚拟的计算任务,例如线程、进程或者数据流,这些任务会被调度到硬件资源上执行,例如:处理器 CPU 等设备。 图 1 - 调度系统设计精要 本文会介绍调度系统的常见场景以及设计过程中的一些关键问题,调度器的设计最终都会归结到一个问题上 — 如何对资源高效的分配和调度以达到我们的目的,可能包括对资源的合理利用、最小化成本、快速匹配供给和需求。 图 2 - 文章脉络和内容 除了介绍调度系统设计时会遇到的常见问题之外,本文还会深入分析几种常见的调度器的设计、演进与实现原理,包括操作系统的进程调度器,Go 语言的运行时调度器以及 Kubernetes 的工作负载调度器,帮助我们理解调度器设计的核心原理。 设计原理 调度系统其实就是调度器(Scheduler),我们在很多系统中都能见到调度器的身影,就像我们在上面说的,不止操作系统中存在调度器,编程语言、容器编排以及很多业务系统中都会存在调度系统或者调度模块。 这些调度模块的核心作用就是对有限的资源进行分配,以实现最大化资源的利用率或者降低系统的尾延迟

linux 进程调度1

余生颓废 提交于 2020-02-21 19:13:02
调度策略与调度类 进程分为实时进程和普通进程,分别对应实时调度策略和普通调度策略 在 task_struct 中,有一个成员变量,我们叫调度策略 unsigned int policy; 它有以下几个定义: #define SCHED_NORMAL 0 #define SCHED_FIFO 1 #define SCHED_RR 2 #define SCHED_BATCH 3 #define SCHED_IDLE 5 #define SCHED_DEADLINE 6 配合调度策略的,还有我们刚才说的优先级,也在 task_struct 中 int prio, static_prio, normal_prio; unsigned int rt_priority; 实时进程,优先级的范围是 0~99;对于普通进程,优先级的范围是 100~139。数值越小,优先级越高 实时进程的调度策略: SCHED_FIFO、SCHED_RR、SCHED_DEADLINE 普通进程的调度策略:SCHED_NORMAL、SCHED_BATCH、SCHED_IDLE 代码实现: 在 task_struct 里面,还有这样的成员变量: const struct sched_class *sched_class; 调度策略的执行逻辑,就封装在这里面 stop_sched_class

Linux2.6内核--进程调度理论

为君一笑 提交于 2020-01-10 22:25:23
从1991年Linux的第1版到后来的2.4内核系列,Linux的调度程序都相当简陋,设计近乎原始,见 0.11版内核进程调度 。当然它很容易理解,但是它在众多可运行进程或者多处理器的环境下都难以胜任。 正因为如此,在Linux2.5开发系列的内核中,调度程序做了大手术。开始采用了一种叫做O(1)调度程序的新调度程序——它是因为其算法的行为而得名的。它解决了先前版本Linux调度程序的许多不足,引入了许多强大的新特性和性能特征。O(1)调度程序虽然对于大服务器的工作负载很理想,但是在有很多交互程序要运行的桌面系统上则表现不佳,因为其缺少交互进程。 自2.6内核系统开发初期,开发人员为了提高对交互程序的调度性能引入了新的进程调度算法。其中最为著名的是“反转楼梯最后期限调度算法”(RSDL),该算法吸取了队列理论,将公平调度的概念引入了Linux调度程序。并且最终在2.6.23内核版本中替代了O(1)调度算法,它此刻被称为“完全公平调度算法”,或者简称CFS。 1.策略 策略决定调度程序在何时让什么进程运行。调度器的策略往往就决定系统的整体印象,并且,还要负责优化使用处理器时间。无论从哪个方面来看,它都是至关重要的。 进程可以被分为I/O消耗型和处理器消耗型。 1.1.进程优先级 调度算法中最基本的一类就是基于优先级的调度。Linux采用了2种不同的优先级范围。第一种是用nice值

Nachos-Lab2-线程调度模块实现

纵然是瞬间 提交于 2020-01-08 21:12:39
源码获取 https://github.com/icoty/nachos-3.4-Lab 内容一:总体概述 本实习希望通过修改Nachos系统平台的底层源代码,达到“扩展调度算法”的目标。本次实验主要是要理解Timer、Scheduler和Interrupt之间的关系,从而理解线程之间是如何进行调度的。 内容二:任务完成情况 任务完成列表(Y/N) Exercise1 Exercise2 Exercise3 Challenge1 第一部分 Y Y Y Y 具体Exercise的完成情况 Exercise1 调研 调研Linux或Windows中采用的进程/线程调度算法。具体内容见课堂要求。 linux-4.19.23进程调度策略 : SCHED_OTHER 分时调度策略, SCHED_FIFO 实时调度策略(先到先服务), SCHED_RR 实时调度策略(时间片轮转)。 RR调度和FIFO调度的进程属于实时进程,以分时调度的进程是非实时进程。 当实时进程准备就绪后,如果当前cpu正在运行非实时进程,则实时进程立即抢占非实时进程。 RR进程和FIFO进程都采用实时优先级做为调度的权值标准,RR是FIFO的一个延伸。FIFO时,如果两个进程的优先级一样,则这两个优先级一样的进程具体执行哪一个是由其在队列中的位置决定的,这样导致一些不公正性(优先级是一样的,为什么要让你一直运行?)

Linux SCHED_OTHER, SCHED_FIFO and SCHED_RR - differences

怎甘沉沦 提交于 2019-12-17 21:58:01
问题 Can someone explain the differences between SCHED_OTHER, SCHED_FIFO and SCHED_RR? Thanks 回答1: SCHED_FIFO and SCHED_RR are so called "real-time" policies. They implement the fixed-priority real-time scheduling specified by the POSIX standard. Tasks with these policies preempt every other task, which can thus easily go into starvation (if they don't release the CPU). The difference between SCHED_FIFO and SCHED_RR is that among tasks with the same priority, SCHED_RR performs a round-robin with a

Linux SCHED_OTHER, SCHED_FIFO and SCHED_RR - differences

烈酒焚心 提交于 2019-11-28 17:52:49
Can someone explain the differences between SCHED_OTHER, SCHED_FIFO and SCHED_RR? Thanks SCHED_FIFO and SCHED_RR are so called "real-time" policies. They implement the fixed-priority real-time scheduling specified by the POSIX standard. Tasks with these policies preempt every other task, which can thus easily go into starvation (if they don't release the CPU). The difference between SCHED_FIFO and SCHED_RR is that among tasks with the same priority, SCHED_RR performs a round-robin with a certain timeslice; SCHED_FIFO, instead, needs the task to explicitly yield the processor. SCHED_OTHER is