CFS
  • 2024-11-04调度时间片“过长”的原因及调度时间片的观测
    一、背景之前的博客讲解了调度时延的观测调度时延的观测-CSDN博客,当前这篇博客会讲解调度里的另外一个常用可观测点,调度时间片。调度时间片相比调度时延更加好理解,表示的是某个任务被系统切换进来执行到被系统切换出去这个时间。从切换出去的目的来说分为两种情况,一种是任务
  • 2024-10-07深入理解Linux进程调度(下)
    一、SMP管理在继续讲解之前,我们先来说一下多CPU管理(这里的CPU是指逻辑CPU,在很多语境中CPU都是默认指的逻辑CPU,物理CPU要特别强调是物理CPU)。最开始的时候计算机都是单CPU的,叫做UP(Uni-Processor),操作系统也只支持UP。后来计算机慢慢发展成了多CPU(包括多物理CPU和多核技术),于是
  • 2024-09-08cgroup中限制CPU的方式有哪些
    在Linux中,ControlGroups(cgroups)是一种用于限制、监控和隔离进程组资源使用的机制。对于CPU资源的管理,cgroups提供了多种方式来限制和控制进程的CPU使用情况。以下是几种主要的限制方式:1.cpu.shares描述:cpu.shares参数允许设置相对权重值,以决定不同进程在CPU资源争用时的分
  • 2024-08-29EAS之WALT算法介绍
    EAS调度器缘起Linux内核的一直都使用完全公平调度器CFS(CompletelyFairScheduler)作为默认调度器,但是在使用中发现CFS如下几个问题。CFS主要是为了服务器性能优先场景而设计的,主要目标是最大限度地提高系统的吞吐量,CFS调度的目标是所有任务都平均分配到系统所有可用的CPU上
  • 2024-08-21深入理解Linux内核进程的管理与调度
    一,前戏1.1进程调度内存中保存了对每个进程的唯一描述,并通过若干结构与其他进程连接起来.调度器面对的情形就是这样,其任务是在程序之间共享CPU时间,创造并行执行的错觉,该任务分为两个不同的部分,其中一个涉及调度策略,另外一个涉及上下文切换.1.2进程的分类linux把
  • 2024-08-11[AHK2] 截图工具之配置文件
    开始紧接着的是配置文件,先前使用的是CustomFs.ahk的前身,实在简陋。现在我们已经实现的完善的配置文件语法,那么使用它吧!先看看之前的配置文件吧:#**除末尾外不要有空行**groupPath:A_ScriptDir\groupgroup:-default-history-test-temphisPath:A_ScriptDir\group\history
  • 2024-06-18调度器68—EEVDF调度器
    一、EEVDF调度器简介EEVDF(EarliestEligibleVirtualDeadlineFirst)最早符合条件的虚拟截止日期优先。由PeterZijlstra提交,最早合入到Linux6.6,在Linux6.10上完成功能,计划用于改进现有的CFS调度器。EEVDF是一种基于虚拟截止时间的调度算法,它可以让进程根据它们的优先级和已
  • 2024-02-03Linux调度pick_next_task_fair整体框架解读
    pick_next_task_fair是CFS调度类中选择next任务的主要路径,其主要功能是从当前CPU的就绪队列cfs_rq中选出一个可运行的任务作为"next任务",并将前一个任务prev重新放到就绪队列。 下面是这段代码框架流程解读。1判断rq->cfs.nr_running>0?如果不满足说明没有可运行任务则gotoidl
  • 2024-01-09cfs文件系统只读监控
    一、需求有重要文件存放在cfs文件系统(CloudFileStorage),该文件丢失对业务有严重影响,为确保文件系统可用性,防止出现只读、挂载失败等异常,现对改文件系统进行监控。二、监控原理每分钟往cfs文件系统写入文件,文件名依据当前分钟动态生成,文件格式为"2023-12-08_16:35"。监控对象为该文
  • 2023-12-11CFS调度器 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/sched-design-CFS.htmlCFS调度器1.概述CFS代表“完全公平调度器”,是由IngoMolnar实现并合并到Linux2.6.23中的新“桌面”进程调度器。它是替代先前普通调度器SCHED_OTHER交互代码的调度器。CFS设计的80%可以用一句话概括
  • 2023-12-11xx 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/scheduler/sched-bwc.htmlCFS带宽控制注意本文仅讨论SCHED_NORMAL的CPU带宽控制。SCHED_RT情况在实时组调度中有所涉及。CFS带宽控制是CONFIG_FAIR_GROUP_SCHED的扩展,它允许指定组或层次结构可用的最大CPU带宽。为组允许的带宽使用
  • 2023-11-23CFS(七)带宽控制
    前言CFS带宽控制顾名思义是控制CPU的使用量,作为CFS一个可配置特性需要开启CONFIG_CGROUP_SCHEDCONFIG_FAIR_GROUP_SCHED和CONFIG_CFS_BANDWIDTH三个配置选项,实现的效果就是对任务组实施CPU带宽限流,让任务组在单位周期内只能使用定量的CPU时间。这里有两个关键点,一个是实施的对
  • 2023-11-20CFS(五)组调度
    前言以进程为CPU资源的分配单位在某些场景下是有缺陷的,比如容器场景需要支持按照组做资源的分配,然后组内再按照进程做细化的资源分配。组调度技术是cgroup实现的一个重要组成部分。CFS组调度需要开启CONFIG_CGROUP_SCHED和CONFIG_FAIR_GROUP_SCHED选项。组调度相关数据结构的组
  • 2023-11-20CFS(六)PELT负载统计
    前言PELT全称per-entityloadtracking,用于实现调度实体级别的负载信息统计,能够为调度决策提供更细粒度的信息。上文中的组调度的任务组权重分配就依赖于负载信息,除此之外负载均衡场景也需要精准的对每个核的负载情况进行分析,PELT相比于rq级的负载统计,除了能知道负载的情况还能够
  • 2023-11-19使用cgroup控制CPU使用率
    关键文件cpu子系统中的关键文件。cpu.cfs_period_uscpu.cfs_quota_ustaskscgroup.procs常用命令查看当前系统内的CPU。lscpu查看当前系统内的CPU。cat/proc/cpuinfo查看当前的子系统。lssubsys-a将进程加入到控制组内。echoPID>tasks或者echoPID>cgrou
  • 2023-11-09CFS(四)新任务的创建流程
    前言新任务产生接口有clone、fork等系统调用,这些系统调用的都是通过do_fork函数实现。本文主要对do_fork中CFS新任务的调度初始化过程进行了探究,看看一个CFS新任务如何完成调度信息的初始化以及进入就绪队列的。CFS的调度信息初始化long_do_fork(...){ /*任务信息初始化*/
  • 2023-10-16Linux内核进程管理与调度:策略优化与实践分析
    Linux内核进程管理与调度:策略优化与实践分析原创 李斌 嵌入式悦翔园 2023-05-0611:40 发表于上海关注★星标公众号,第一时间获取信息嵌入式悦翔园本公众号专注于嵌入式技术,包括但不限于STM32、Arduino、51单片机、物联网、Linux等编程学习笔记,同时,公众号内包含大量
  • 2023-10-16CFS(三)调度周期与最小抢占粒度
    前言CFS的调度逻辑是将一个调度周期的物理时间按照任务的权重分配给每一个任务,确保在一个调度周期内,队列中的每一个任务都能够得到执行,尽管执行的时长会有差异。本文对调度周期的设定规则以及配置参数进行探究。调度周期调度周期的计算函数__sched_period如下,计算结果与以下参
  • 2023-10-14Linux内核进程管理与调度:策略优化与实践分析
    Linux内核进程管理与调度:策略优化与实践分析原创 李斌 嵌入式悦翔园 2023-05-0611:40 发表于上海关注★星标公众号,第一时间获取信息嵌入式悦翔园本公众号专注于嵌入式技术,包括但不限于STM32、Arduino、51单片机、物联网、Linux等编程学习笔记,同时,公众号内包含大量
  • 2023-10-12CFS(二)load_weight与vruntime
    前言在理清楚了CFS的基本实现以后,调度类fair_sched_class中规定了调度器的基本操作集合,cfs_rq实现了被操作的就绪队列。剩下的就是研究操作集合中的具体实现,看看CFS是如何管理这些队列中的进程的。本文主要解释了两个问题:什么样的任务归CFS管?CFS如何实现队列内部的优先级划分?
  • 2023-10-11CFS(一)设计理念与实现架构
    前言本文对CFS的基础的设计理念以及在内核实现上的基本代码架构进行了分析,从宏观上梳理调度和CFS的脉络。本文所有的代码基于Linux4.19。CFS的设计理念和目标CFS(CompletelyFairScheduler)完全公平调度器,从字面上看定义的很清晰,首先CFS的本质是一个调度器,所谓调度就是决定CPU
  • 2023-06-15cgroup cpu 子系统参数深入理解
    shares这个容易理解,无论cpuset.cpus中有多少个cpu,它都是按照比例用。cpu.cfs_quota_us这个就有点坑了,用起来会有些费劲。8核机器,aptasks里有20个线程并行执行,设置cpu.cfs_quota_us为30000(period为100000),预期是cpu能用到30%*8=240%,而实际上只用到了30%。也就是
  • 2023-05-19Linux进程调度-组调度及带宽控制
    1.概述组调度(task_group)是使用Linuxcgroup(controlgroup)的cpu子系统来实现的,可以将进程进行分组,按组来分配CPU资源等。比如,看一个实际的例子:A和B两个用户使用同一台机器,A用户16个进程,B用户2个进程,如果按照进程的个数来分配CPU资源,显然A用户会占据大量的CPU时间,这对于B用户
  • 2023-04-15频繁设置CGroup触发linux内核bug导致CGroup running task不调度
    1.说明1>本篇是实际工作中linux上碰到的一个问题,一个使用了CGroup的进程处于R状态但不执行,也不退出,还不能kill,经过深入挖掘才发现是Cgroup的内核bug2>发现该bug后,去年给RedHat提交过漏洞,但可惜并未通过,不知道为什么,这里就发我博客公开了3>前面的2个帖子《极简cfs公平调度算
  • 2023-04-15极简组调度-CGroup如何限制cpu
    1.说明1>linux内核关于task调度这块是比较复杂的,流程也比较长,要从源码一一讲清楚很容易看晕,因此需要简化,抓住主要的一个点,抛开无关的部分才能讲清楚核心思想2>本篇文章主要是讲清楚在cfs公平调度算法中,CGroup如何限制cpu使用的主要过程,所以与此无关的代码一律略过3>本篇源