LWN:再次推动 sched_ext!

Linux可扩展调度器SCHED_EXT原理与实践 操作系统调度器是决定任务执行顺序的核心组件,其性能直接影响系统整体效率。传统调度器如CFS采用静态编译方式,难以适应云原生等动态场景需求。基于BPF技术的SCHED_EXT创新性地将调度策略移至用户空间,通过安全验证的BPF程序实现动态调度算法加载。这种架构既保留了内核的基础调度功能,又支持实时调整策略参数,特别适合容器调度、边缘计算等需要快速迭代的场景。测试表明优化后的SCHED_EXT可实现比CFS更低的尾延迟和更高的吞吐量,其中在4核ARM服务器上调度吞吐量提升达23%。开发者可以通过BPF映射实时监 阅读详情

关注了就能看到更多这么棒的文章哦~

Another push for sched_ext

By Jonathan Corbet
May 9, 2024
ChatGLM translation
https://lwn.net/Articles/972710/

可扩展调度器类(extensible scheduler class,或称 "sched_ext")是一个综合性的框架,它可以支持将 CPU 调度器实现为一组 BPF 程序,这些程序可以在运行时加载。尽管 sched_ext 引起了开发社区的相当大的兴趣,但它也遇到了相当大的阻力,并且似乎远未被 mainline(主线)接受。Tejun Heo 在 5 月初发布的 新版 sched_ext 系列补丁 重新开启了这场旷日持久的讨论,但最终结果尚不清楚。

简单回顾一下:sched_ext 允许创建 BPF 程序来处理调度问题的几乎所有方面;这些程序可以在运行时加载(和卸载)。sched_ext 的设计目标之一就是能在出现问题时(例如,如果进程未能在时间限制内运行)安全地回退到完全公平调度器(completely fair scheduler,CFS)。它已被用于创建许多专用调度器,这些调度器通常为预期工作负载带来了显著的性能提升。有关这项工作的更详细概述,请参阅 这篇 2023 年的文章。

Heo 列出了自 11 月 上一个版本 发布以来对 sched_ext 所做的一些更改。在大多数情况下,这些更改似乎是对 BPF API 的调整,目的是使调度器的编写更容易。还有一个新的关闭机制,该机制的功能之一就是可以在系统挂起(suspend)等电源管理事件期间禁用 BPF 调度器。现在支持 CPU 频率调节,并且添加了一些调试接口从而让调度器开发更加容易。不过,sched_ext 的核心设计似乎已经稳定下来。

关注度日益增长

不过,在谈到这些变化之前,Heo 首先提到了整个社区及其他领域对 sched_ext 的兴趣日益浓厚。Valve 计划在 Steam Deck 上使用 sched_ext 来更好地进行游戏调度。Ubuntu 正在 考虑在 24.10 版本中发布它。Meta 和 Google 正在其生产环境中越来越多地使用它。显然,ChromeOS 也对它很感兴趣,Occulus 也在关注它。Heo 在该部分的结尾写道:

鉴于已经有大量的采用并且还在继续增长,而且 sched_ext 不会以侵入性的方式影响内置调度器或内核的其他部分,我认为考虑将 sched_ext 纳入进来是合理的。

不过,它是否会被纳入仍然是一个悬而未决的问题。第四版 补丁集于 2023 年 7 月发布,引发了关于这项开发的优缺点的长期讨论。调度器维护者 Peter Zijlstra 断然拒绝了这些补丁,他说:

我毫不怀疑,如果我合并了这个补丁,那么将会出现一些企业软件,它们会强制要求使用自己的 BPF 调度程序,否则就无法工作。

他们不会关心,也不会贡献代码,他们甚至可能会像 RedHat 那样,只向客户分享代码。

他还说,他认为合并这些代码没有任何价值,并退出了讨论。Mel Gorman 也 表示反对 合并 sched_ext,他赞同 Zijlstra 的担忧,即企业软件将开始要求使用专用调度器。他后来 补充 说,在他看来(Zijlstra 也持相同观点),sched_ext 会不利于当前调度器的改进:

我通常担心,如果可以选择插件化,那么在已发布的调度器中可能就不会存在某些东西,包括 EAS、节流控制、schedutil 集成、big.Little、适应 chiplet 和为睿频加速选择首选的 SMT 同级线程。在每种情况下,集成支持都是一项耗时且痛苦的工作,而可插拔调度器本来是一个相对容易的选择,但如果它从未被正确集成,最终将会让我们付出代价。

当然,Heo 不同意 很多反对意见。他说,有些调度问题是无法通过调整当前调度器来解决的,尤其是在像 Meta 这样的 "超大规模" 环境中。他不同意 sched_ext 会带来维护负担的观点,他认为 BPF 对内核其他部分的侵入并没有造成这种结果。让用户能够做一些新的事情是有益的,即使不可避免地会出现一些 "愚蠢的案例",因为有些人会选择如何使用新功能。总之,他说,反对者只关注 sched_ext 的潜在成本(在他看来,这些成本被夸大了),而没有考虑到它带来的好处。

重新开启讨论

Heo 在 10 月份发的这条消息,就是当时讨论的终点。他显然希望这次能有一个更好的结果,但 Zijlstra 的 回复 并不乐观:

我从根本上认为这种方法不利于调度器生态系统。看看为它编写的大量调度器玩具就知道了,这些工作都没有用于改进现有代码。

他说,在 "cgroup 问题" 得到解决之前,他不会接受这个补丁系列的任何部分。这个 "问题" 是指在使用大量控制组时,某些工作负载的性能会受到影响。Rik van Riel 在 2019 年就提出了 一个补丁系列 来解决这个问题,但它从未被合并;Zijlstra 似乎坚持认为,在考虑 sched_ext 之前,这项工作必须完成,而且他几乎没有明确说过在那之后会更加认真地考虑合入 sched_ext。

Heo 表示愿意(尽管不情愿)着手解决控制组问题,如果这能为 sched_ext 扫清障碍的话。不过,他强烈反对 Zijlstra 将 sched_ext 调度器称为 "玩具调度器" 的说法,也反对开发 sched_ext 会分散 mainline 调度器的精力的说法。他说,任何一个 CPU 调度器都不可能是完美的,所以 mainline 调度器只能做到对所有用户来说都足够好。这使得尝试 "激进的想法" 变得几乎不可能,并严重限制了可以参与调度器工作的人才数量。他说,如果没有 sched_ext 调度器,那么现在投入到其中的大部分工作都根本不会出现,也就不利于调度器的开发演进。

他说,有些激进的想法是有价值的:

然而,即使是简单的调度器,其多种不同的方式有时也能为特定的工作负载带来显著的行为和性能优势,这表明该领域还有很多容易实现的目标。而这些容易实现的目标,我们很难从目前的局部最优状态中找到。一个必须始终满足所有用户的单一实现,不太可能成为描绘这种前景的有效工具。

Igalia 开发者 Changwoo Min 正在与 Valve 合作开发面向游戏的调度程序,他 支持 Heo 的论点,他说:"sched_ext 的成功实现为调度器社区带来了新鲜的见解、想法和代码"。截至本文撰写之时,这就是这场讨论的最新进展了。

接下来的发展?

sched_ext 已被列入 Linux 存储、文件系统、内存管理和 BPF 峰会 的 BPF 分论坛程,该峰会将于 5 月 13 日开始。届时将讨论 sched_ext 的未来发展,但很可能无法解决这项工作是否应该被合并的问题。 这个 讨论可能会在邮件列表和其他地方继续进行一段时间。

有时,当一项重要的内核开发陷入这种僵局时,那些认为它有价值的发行版会选择直接发布这些补丁,就像 Ubuntu、Valve 和 ChromeOS 正在考虑做的那样。虽然发布 out-of-tree(树外)代码通常不被鼓励,但它也可以用来证明人们对某项功能的兴趣,并及早发现将其纳入后出现的任何问题。如果一切顺利,这种做法可以加强将代码合并到 mainline 的理由,尽管随之而来的是可能对早期采用者带来的麻烦。

sched_ext 是否会走上这条道路还有待观察。可以肯定的是,这项工作已经引起了很多人的兴趣,并且不太可能在短期内消失。sched_ext 有潜力在调度器开发中带来新的创造力,即使它还没有进入 mainline 之内 — 但如果它最终被合并,这种潜力将会更大。即使没有任何争议,那些重要的调度器补丁也不会很快被合并;如果这个补丁最终被接受,那么它的速度将会比大多数补丁都要慢。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

d393c170b2fcc7dae5812557a08ce7b2.jpeg

2025年度Linux内核技术复盘:从LWN看开源演进与工程实践 在开源技术快速迭代的背景下,如何从海量信息中提炼真正影响工程决策的技术脉络,成为开发者与运维团队的核心诉求。Linux内核作为底层系统的基石,其演进方向始终牵引着云原生、可观测性、存储与安全等领域的实践路径。LWN(Linux Weekly News)以深度编年史式报道,将邮件列表中的技术讨论、补丁评审与取舍过程完整呈现,帮助读者理解特性背后的原理与代价。通过追踪Rust for Linux的内存安全渗透、sched_ext将调度策略程序化、BPF推动可观测性进入“内核即数据库”阶段等关键议题,工程师能提前 阅读详情

相关推荐

【信息科学与工程学】【产品体系】第三十三篇 DPU/smartinic芯片中的学科知识03

需求实现DMA 与流边界检测优化​分级超时状态机(短/中/长)+ 积压计数 + 批量触发DMA 控制器优化​描述符预取(深度 4)+ 中断合并(阈值 8)Fence 语义正确性验证​RTL 断言 + C 语言序列号检测 + 性能对比 + 硬件计数器所有代码均为可综合 Verilog,已在仿真器中通过基本功能测试。在 FPGA 原型上运行上述 RTL,配合 ChipScope 观察 fence 时序在 BlueField-3 上运行 DOCA DPA 测试程序,对比加/不加 fence 的结果。

weixin_49199313的博客 272

内核调度客制化利器:SCHED_EXT

一、前言今年年初,宋宝华老师发表了一篇对2023年内核技术总结的文章《熠熠生辉 | 2023 年 Linux 内核十大技术革新功能》。有兴趣的伙伴可以点击蓝色字体链接回顾。文章提及的10个技术中,与CPU任务调度器核心相关的内容,一共有两个,分别是可扩展调度类以及EEVDF调度算法。EEVDF调度算法的大名,相信大家并不陌生,它对统治内核任务调度多年的CFS调度策略发起了变革。CFS调度策略自Li...

内核工匠 6627

oracle rac 成本及架构,Oracle Extended RAC 架构实战

Extended-RAC,是RAC技术的一种扩展增强。Extended-RAC是通过专用光纤(或租用裸光纤)加DWDM(波分设备)设备将两个不同楼栋/同城甚至异地机房进行相连,将数据库主机、存储分别放置于不同机房,利用存储复制/ASM Mirror等技术进行数据复制进行搭建的一种远距离集群架构。Extended RAC需要将不同楼栋/同城甚至异地机房通过专用光纤(或租用裸光纤)加DWDM(光纤复用...

weixin_33812391的博客 2453

LWN:用SCHED_EXT和IOCost改进性能!

关注了就能看到更多这么棒的文章哦~Improving performance with SCHED_EXT and IOCostBy Daroc AldenApril 1, 2024SCALEChatGLM translationhttps://lwn.net/Articles/966618/在今年的SCALE大会上,来自 Meta 的 Dan Schatzberg 和 Tejun Heo 先后连...

Linux News搬运工 979

Keil 编译输出信息分析:Program size: Code, RO-data , RW-data, ZI-data

一般 MCU 包含的存储空间有:片内 Flash 与片内 RAM,RAM 相当于内存,Flash 相当于硬盘。编译器会将一个程序分类为好几个部分,分别存储在 MCU 不同的存储区。如图所示,在Keil中编译工程成功后,在下面的Bulid Ouput窗口中会输出下面这样一段信息。

qq_40305944的博客 4577

利用arpspoof + sslStrip尝试进行arp欺骗

利用arpspoof + sslStrip尝试进行arp欺骗

qq_63575829的博客 350

bpf调度器sched_ext理解及开源的bpf调度器

sched_ext是一个允许用户态通过libbpf接口将自定义调度逻辑注入内核的框架。

qq_37294304的博客 1669

信息安全-入侵检测技术原理与应用

入侵检测技术原理与应用、入侵检测概述、入侵检测技术、入侵检测系统组成与分类、入侵检测系统主要产品与技术指标、入侵检测系统应用

我的个人博客 1万+

LWN:OSPM 2023 报告,第三部分!

关注了就能看到更多这么棒的文章哦~Reports from OSPM 2023, part 3By Jonathan CorbetJune 23, 2023OSPMChatGPT assisted translationhttps://lwn.net/Articles/935180/第五届 Linux 内核中的电源管理和调度会议(简称"OSPM")于 4 月 17 日至 19 日在意大利 Anco...

Linux News搬运工 1888

提示词编程在自动化内容审核中的应用

文章标题 提示词编程在自动化内容审核中的应用 关键词:提示词编程,自动化内容审核,人工智能,算法原理,系统架构设计,项目实战 摘要 本文旨在探讨提示词

AI天才研究院 1252

jdbc从入门到精通(全)

前言 Java语言连接数据库(Java DataBase Connectivity) 面向接口/抽象编程(降低程序的耦合度,提高程序的扩展力)类似多态机制

码农研究僧的博客 1757

【亲测免费】 【探索未来调度新纪元】—— Sched_ext:解锁Linux内核调度的无限可能

Sched_ext,一项革新性的Linux内核特性,为开发者打开了一扇门,允许他们通过BPF(Berkeley Packet Filter)实现自定义的线程调度器,并动态加载这些调度策略。这个开源项目不仅包含了多种调度器的实现,还提供了支持工具,让实验和部署创新性调度策略成为可能,即便是对大规模且复杂的生产环境而言也不例外。 ## 技术深度剖析 Sched_ext通过在内核中引入扩展点,实现了...

gitblog_00041的博客 1067

Spark中Application、Job、Stage和Task区别详解

在Spark中,有一些关键的概念,如Application、Job、Stage和Task,它们描述了Spark作业的不同层次和组成部分。下面我将详细介绍每个概念,并通过示例说明它们之间的区别。

优快云 精品推荐 901

LWN:可扩展scheduler class!

关注了就能看到更多这么棒的文章哦~The extensible scheduler classBy Jonathan CorbetFebruary 10, 2023DeepL assisted translationhttps://lwn.net/Articles/922405/总是有人试图将 BPF 引入内核的 CPU 调度器领域,这只是一个时间问题。1月底,Tejun Heo 发布了一个由 3...

Linux News搬运工 964

CloudCompare 二次开发(17)——点云添加均匀分布的随机噪声

使用CloudCompare编程实现点云添加随机噪声。

点云侠的博客 839

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

sched_ext 的安装和配置教程

sched_ext 的安装和配置教程 1. 项目基础介绍和主要编程语言 sched_ext 是一个开源项目,它旨在扩展 Linux 调度器的功能。该项目允许开发者在 Linux 内核中实现自己的调度策略,以优化特定类型的工作负载。主要编程语言为 C,因为它需要在 Linux 内核级别进行开发。 2. 项目使用的关键技术和框架 该项目使用的关键技术是 Linux 内核模块开发,它涉及到对内核代码的直...

gitblog_01111的博客 1001

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

BPF 调度器 sched_ext 实现机制、调度流程及样例

本篇博文会重点介绍 sched_ext 的实现原理,sched_ext 是一个由 Meta 和 Google 共同联合推出的可扩展调度器类,称之为 ext_sched_class 或 sched_ext,这种机制允许用户通过定义的 BPF 程序来实现调度类实现针对特定工作负载或场景的调度器策略优化。

dwh0403的专栏 2433

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【Rust日报】使用 sched-ext、Rust 和 Ubuntu 制作新的 Linux 调度器

flawz 发布新版本flawz 是用于浏览安全漏洞 (CVE) 的终端 UI。默认情况下,它使用 NIST 的漏洞数据库 (NVD),并在终端中提供具有不同主题选项的搜索和列表功能。例如,要查看臭名昭著的 xz 漏洞的详细信息,请执行以下操作:flawz--feeds2024--queryxz这是图片更多信息查看 GitHub,https://github.com/orhun/flawz...

Rust语言学习交流 852

Geek新鲜事15: Linus Torvalds 发话了,新调度器sched_ext将合入Linux6.11

“ext”对应的英文单词为“extensible”,意为可扩展的。开发者Tejun Heo通过整整30 个的patchs,提供了一个支持eBPF程序修改调度策略的调度类。

rayylee 1573

Linux Ext 调度器的 sched_ext_ops:自定义调度接口

Linux内核6.12引入的sched_ext框架通过eBPF技术实现了调度器的动态扩展,允许开发者在不修改内核源码的情况下自定义调度策略。该框架的核心是struct sched_ext_ops结构体,提供任务入队、CPU选择、任务分发等关键回调接口,支持实现FIFO、优先级、EDF等多种调度算法。文章详细解析了sched_ext的工作原理,包括环境搭建、接口设计、开发实践和问题排查,并提供了可直接运行的FIFO调度器示例代码。这一创新使Linux调度器能够灵活适应金融交易、实时音视频、AI计算等对调度策略

望获实时Linux系统 708

可扩展调度类还在努力

翻译 https://lwn.net/Articles/972710/ By Jonathan Corbet May 9, 2024背景介绍,Tejun Heo 提出的 sched_ext 补丁在 V4 版本的时候,Peter Zijlstra 给了NAK,Tejun Heo 继续发出了 V5 和 V6 版本持续推动进入主线。可扩展的调度器类(或称为 “sched_ext”)是一个全面的框架,它允许以一组在运行时加载的 BPF 程序的形式实现CPU 调度器。

weixin_49382066的博客 1940

Sched_ext 回调深度解析(一):sched_ext 框架总览——前言

本文深入解析Linux内核的sched_ext eBPF调度框架(基于6.18.26内核版本),该系统允许通过用户态BPF程序自定义CPU调度策略而无需修改内核代码。文章首先介绍了sched_ext作为"调度器插件系统"的架构设计,包括其核心组件:内核空间的调度回调接口、DSQ队列和任务状态机,以及用户空间的BPF调度程序。随后详细梳理了12个关键调度回调函数,将其分为三类:一次性回调(init_task/enable)、状态通知回调(runnable/running等)和调度决策回调(select_cpu

geshifei的博客 526

sched_ext 项目亮点解析

sched_ext 项目亮点解析 1. 项目的基础介绍 sched_ext 是一个开源项目,旨在为 Linux 内核提供扩展的调度器功能。该项目通过修改 Linux 内核的调度器代码,引入了新的调度策略和机制,以优化系统性能和资源管理。sched_ext 的目标是提供更加灵活和高效的调度方案,适用于多种不同的应用场景和系统负载。 2. 项目代码目录及介绍 项目的代码目录结构清晰,以下是一些主要的目...

gitblog_00086的博客 836

LPC 2024 会议讨论 sched_ext

可扩展调度类(sched_ext)允许以一组从用户空间加载的 BPF 程序的形式实现 CPU 调度器;它首次出现在 2022 年底的邮件列表中。自那以来,sched_ext 引发了一些争议,但目前计划将成为 6.12 内核发布的一部分。在 2024 年的 Linux Plumbers Conference 上,日益壮大的 sched_ext 社区举行了其首次公开聚会;sched_ext 似乎在调度器设计中引发了新的创造力爆发。

weixin_49382066的博客 738

sched_ext调度器task stall分析

cpu 32因高负载导致local DSQ非空,一致无法执行dispatch函数,无法运行kworker/32:2线程线程。其他部分cpu空闲,虽然可执行dispatch函数,但因为kworker/32:2线程的cpu mask不允许运行在“非32核”上,也不能运行kworker/32:2线程。整个系统无任何cpu可运行kworker/32:2,导致kworker/32:2 task stall异常。

geshifei的博客 860

Linux:用 clang 编译带 sched_ext 功能内核

Linux,clang,sched_ext

JiMoKuangXiangQu的专栏 1063
上一篇: LWN:llamafile让LLM更易用!
下一篇: LWN:对内核进行GitLab CI!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值