Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >关于操作系统调度器的三篇论文

关于操作系统调度器的三篇论文

作者头像
半吊子全栈工匠
发布于 2023-09-02 05:59:07
发布于 2023-09-02 05:59:07
3770
举报
文章被收录于专栏:喔家ArchiSelf喔家ArchiSelf

【引子】没有忘记,目前从事的是DingOS 操作系统相关工作,没有因为LLM 而迷失。LLM 会成为基础设施,LLM 会为操作系统赋能,但是操作系统的价值是客观存在的,除非,计算机体系结构发生了翻天覆地的变化。

在任何多路复用资源的系统中,计算在哪里运行以及何时运行的调度问题都可能是最基本的问题。然而,就像计算机中许多其他重要问题一样(例如数据库中的查询优化),调度器的研究像钟摆一样,时而活跃,时而处于休眠状态,因为它被认为是一个“已解决”的问题。

调度一直是系统和网络中最基本的操作之一。它涉及将任务分配给CPU并在它们之间进行切换,这些决策对应用程序性能和系统效率都至关重要。长期以来,操作系统(OS)调度专注于公平性。

然而,近年来的两个发展导致了OS调度研究的复兴。首先,云计算的出现赋予了不同的,难以优化的指标。例如,微延迟和微秒(µs)尺度,这些指标在传统的调度器中没有被考虑。其次,摩尔定律的结束使得操作系统堆栈(包括调度)的专业化成为了继续提高性能的必要条件。

近年来有三篇论文或许实现了性能、可扩展性和策略选择相关的突破。第一篇论文挑战了低延迟(通常通过配置专用核心实现)和高利用率(需要核心重新分配)之间的假定权衡,通过在单微秒粒度上实现分配决策来解决这个问题。第二篇论文通过将策略的创建和操作进行分解,使得用户空间代理完全可以处理策略的创建和操作,而固定的内核机制则负责向代理通信事件和应用实施调度决策。第二篇论文根据微秒级灵活策略进行负载均衡和分配决策的能力,最终选择了根据应用程序选择策略的问题。

1. 微秒级核心重新分配

第一篇论文由Ousterhout等人回答了一个基本问题,即操作系统中核心分配可以多快进行以及这种重新分配是否有益于应用程序的性能。该论文介绍的系统名为Shenango,挑战了广泛存在的观念,即在微秒级别上跨应用程序分配核心是不可行的,因为存在高开销和潜在的缓存污染。

在这篇论文中,作者们详细阐述了Shenango系统的设计和实现,包括如何实现快速核心重新分配,以及如何避免因重新分配而导致的性能下降。此外,作者们还通过大量的实验验证了Shenango系统的有效性,快速核心重新分配确实是可能的,并展示了其在性能方面的显著优势。

在Shenango操作系统中,我们实现了微秒级别的核心重新分配,其关键在于使用了专用调度核心。该核心每5微秒可以做出一次CPU核心的分配决策,以确保系统的高效性。为了确定何时从应用程序中分配或回收核心,Shenango监视每个应用程序的线程运行队列和网络数据包队列的长度,并使用其导数作为拥塞信号。这种方法可以有效避免系统拥塞,保障了系统的稳定性和可靠性。同时,该算法完全在专用核心上运行,该核心还管理将传入的网络数据包引导到其相应的目标应用程序的CPU核心。这使得整个系统的运行更加高效,同时也提高了系统的可靠性和安全性。

作者们展示了这种方法的有效性,通过展示如何通过细粒度的CPU核心重新分配,来改善在同一系统上共存的延迟敏感和批处理应用程序的性能。通过基于瞬时输入的数据包速率分配CPU核心,Shenango操作系统在使用5微秒核心重新分配间隔与100微秒间隔相比,前者的延迟降低了,后者的吞吐量提高了6倍以上。随后的研究表明,Shenango的微秒级调度程序还可以帮助缓解其他系统资源(例如缓存和内存带宽)的干扰,并向网络提供细粒度反馈以防止过载。

2. 部署操作系统调度到Linux的框架

构建像Shenango这样高效的调度器是一个有趣的实验室练习,但是在生产环境中需要考虑更多的因素。比如,如何兼容现有的应用程序和操作系统(如Linux),如何满足不同的需求以及如何实现更高的可扩展性和可靠性等等。为了解决这些问题,一些Google的工程师构建了一个名为ghOSt的框架,该框架可以实现不同的调度策略,并将它们部署到Linux内核中,以方便用户更容易地使用。

ghOSt设计背后的关键理由是为了提高操作系统的灵活性。ghOSt从微内核中汲取灵感,将OS调度委托给用户空间代理,可以是全局的或每个CPU。这种方法的优点显而易见:用户空间代理可以根据不同的需求和场景制定不同的调度策略,而不仅仅是受限于内核代码的固有规则。因此,开发人员可以享受用户空间开发的灵活性,而不受内核代码的限制和长时间部署周期的困扰。

为了在用户空间代理和内核之间实现无缝的通信,ghOSt使用了共享内存来传递提示信息,使代理能够做出更明智的调度决策。这种方法不仅提高了操作系统的性能,而且还为应用程序提供了更广泛的功能和更高的效率。而最简化内核调度类,是ghOSt设计中最为重要的组成部分之一。内核调度类负责将代理传递的调度事件转换为内核可以理解的格式,并将处理结果返回给代理。

总的来说,ghOSt的设计使得操作系统变得更加灵活和高效,从而能够更好地满足不同用户的需求。它为开发人员提供了更多的自由度和创造空间,使得他们可以更好地实现自己的想法和创意。同时,ghOSt的设计也为用户提供了更好的体验和更快的响应速度,使得他们能够更加高效地完成工作。

ghOSt面临的最大挑战是内核组件与用户空间代理之间的通信延迟,可能需要达到5微秒。这可能会导致

(1)竞争条件,例如,用户空间代理向已从线程的CPU掩码中删除的CPU来调度线程);

(2)低利用率,因为CPU保持空闲等待代理的调度决策。

ghOSt通过在共享内存上实现事务API来避免竞争条件,该API允许代理以原子方式提交调度决策。为了减轻第二个问题,作者们建议使用自定义的eBPF程序,在每个核心上本地运行并临时调度任务,直到收到代理的决策。当将其他操作系统功能卸载到用户空间(例如内存管理)时,相同的技术也适用。

3.选择最佳调度策略选项

在引入ghOSt之后,可以轻松开发和部署自定义调度策略,但问题在于每个应用程序应该使用哪种策略。为了回答这个问题,McClure等人进行了全面的分析。

在引入ghOSt之后,可以轻松开发和部署自定义调度策略。然而,虽然这是一个不错的进展,但是使用哪种策略对于每个应用程序来说都是一个重要的问题。为了解决这个问题,McClure等人进行了全面的分析,并提出了以下建议:

首先,应该考虑应用程序的需求以及其性质。例如,一些应用程序需要保持高可用性,需要在任何时候都能够提供服务,因此需要使用具有高容忍度的策略。另一些应用程序可能会经常需要进行扩展,因此需要使用具有良好扩展性的策略。了解应用程序的性质是选择调度策略的关键。

其次,应该考虑数据中心的资源利用率。在数据中心中运行的应用程序通常会共享物理资源,例如CPU,内存和网络带宽。因此,应该选择那些可以最大程度利用这些资源的策略。例如,可以使用负载均衡策略来确保每个节点都能够平均分配负载,从而使整个数据中心的资源利用率最大化。

最后,应该考虑操作和管理的成本。一些策略可能会增加管理和操作的成本,因此需要权衡这些成本和性能。应该选择那些既能够满足应用程序的需求,又可以最小化操作和管理成本的策略。

作者们将调度过程分为两个不同的策略:在应用程序之间分配核心和在每个应用程序内的CPU之间平衡负载任务。令人惊讶的是,他们发现第二个策略相对简单;无论任务服务时间分布,核心数量,核心分配策略和负载均衡的开销如何,无论是延迟还是效率,都是最好的负载均衡策略。

相比之下,核心分配策略要复杂得多。例如,与过去的工作相反,作者们发现根据平均延迟或利用率主动回收应用程序的核心对于小任务的性能表现更好,而不是等待CPU变为空闲状态。他们还发现,在处理小任务时,最好为每个应用程序分配一定数量的CPU,而不是动态分配。

这项分析开辟了新的研究领域,例如开发实现可扩展为全局队列的新硬件,在模拟中表现甚至优于任务获取。此外,该研究没有考虑抢占的存在,因此需要进一步研究抢占策略如何影响调度决策。

4.小结

这三篇论文,探讨了在操作系统调度器中如何引入现代化的方法。第一篇论文专注于构建尽可能快速的调度器,第二篇旨在简化实现并与现有应用程序和操作系统兼容的新策略。第三篇论文则探讨不同类型应用程序的最佳调度策略。最终,这三篇论文为致力于开发现代计算系统更好的调度策略作出了有益的贡献。这些论文强调了需要更好、更有效率、更灵活的操作系统调度程序,开辟了新的研究领域,并展示了操作系统调度策略持续发展和创新的重要性。

【参考文献与关联阅读】

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 喔家ArchiSelf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
常考计算机操作系统面试习题(二)(中)
理由:显式链接方式允许在内存中快速查找记录,显著提高检索速度。与隐式链接方式不同,显式链接适用于随机访问,能有效减少磁盘访问次数,提高文件的访问效率。
猫咪-9527
2025/03/24
570
网络系统设计会议NSDI 2022热点论文解读
第19届USENIX网络系统设计与实现专题讨论会NSDI 2022(Symposium on Network System Design and Implementation)于4月4日-6日举行。NSDI 是计算机网络顶级会议、CCF A类会议,由USENIX组织,侧重于网络和分布式系统的设计原则、实施和应用评估,目标是聚集网络、系统社区的研究人员,以跨学科、合作等方式应对重叠的研究挑战。 会议概览 本届大会的主题丰富,主要涵盖: 高度可用和可靠的网络系统 网络系统的安全和隐私 分布式存储、缓存和查询处
SDNLAB
2022/05/07
2.1K0
网络系统设计会议NSDI 2022热点论文解读
论文学习笔记:增强学习应用于OS调度
【引子】周末,读了一篇同事推荐的论文《STUN: Reinforcement-Learning-Based Optimization of Kernel Scheduler Parameters for Static Workload Performance》,很有启发,遂加入个人思考编译成文。
半吊子全栈工匠
2023/09/02
5450
论文学习笔记:增强学习应用于OS调度
操作系统性能提升之内核锁优化
性能为王,系统的性能提升是每一个工程师的追求。目前,性能优化主要集中在消除系统软件堆栈中的低效率上或绕过高开销的系统操作。例如,内核旁路通过在用户空间中移动多个操作来实现这个目标,还有就是为某些类别的应用程序重构底层操作系统.
半吊子全栈工匠
2023/09/02
3050
操作系统性能提升之内核锁优化
是时候替换数据中心的 TCP 协议了吗?
作为最根深蒂固的标准之一,TCP协议有着悠久而成功的历史。但斯坦福大学教授John Ousterhout表示:“对于现代数据中心来说,TCP是一种糟糕的传输协议。”
通往ICT之路
2024/04/09
1730
是时候替换数据中心的 TCP 协议了吗?
《现代操作系统》—— 调度
现代计算机都是多道程序设计系统。在多道程序设计系统中,通常会有多个进程或线程同时竞争同一个CPU。只要有2个或更多的进程处于就绪状态,那么这种情形就发生了:CPU必须要在多个就绪的进程中选择下一个要运行的程序。在操作系统中,完成这个选择工作的程序叫做调度程序(scheduler)。该程序使用的算法叫做调度算法。 许多适用于进程调度的方法同样也适用于线程调度。内核管理线程的时候,调度是按照线程级别进行的,与线程所属的进程没有关联。本文主要讨论同样适用于进程和线程调度的问题。然后介绍线程调度所独有的问题。本文讨论的问题假设机器是单CPU单核。
VV木公子
2021/10/05
1.2K0
操作系统精髓与设计原理--多处理器和实时调度
    对于多处理器调度,此处概述了多个处理器可能带来的问题和设计上的一些问题;对于实时调度,概述了两种调度方法:限时调度和速率单调调度。
学徒漠筱歌
2022/07/17
7370
网络和操作系统 面试题
进程(Process)和线程(Thread)是操作系统中的基本概念,它们在程序执行的过程中扮演重要角色。以下是它们主要的区别:
Lemon黄
2023/12/14
2890
网络和操作系统 面试题
Linux 性能调优之配置CPU调度策略和可调参数
人生不是书上的故事,喜怒哀乐,悲欢离合,都在书页间,可书页翻篇何其易,人心修补何其难。——烽火戏诸侯《剑来》
山河已无恙
2024/03/18
1.3K0
Linux 性能调优之配置CPU调度策略和可调参数
【操作系统】操作系统运行环境——处理器的运行模式
在上一篇内容中我们介绍了操作系统的发展史,操作系统从诞生到发展主要经历了手工操作阶段、批处理阶段、分时操作系统阶段、实时操作系统阶段、网络操作系统和分布式计算机系统阶段以及个人计算机操作系统这6个阶段。我们可以将其归纳为以下4个阶段:
蒙奇D索隆
2024/09/07
3310
【操作系统】操作系统运行环境——处理器的运行模式
BPF for storage:一种受外核启发的反式
译自:BPF for storage: an exokernel-inspired approach
charlieroro
2021/04/23
9470
Golang - 调度剖析【第一部分】
首先,Golang 调度器的设计和实现让我们的 Go 程序在多线程执行时效率更高,性能更好。这要归功于 Go 调度器与操作系统(OS)调度器的协同合作。不过在本篇文章中,多线程 Go 程序在设计和实现上是否与调度器的工作原理完全契合不是重点。重要的是对系统调度器和 Go 调度器,它们是如何正确地设计多线程程序,有一个全面且深入的理解。
李海彬
2018/10/08
5380
Golang - 调度剖析【第一部分】
【操作系统】00——当你学习OS之前需要了解的
为了使得操作系统达到这些目标,就需要我们从本质原理来理解:WHAT IS OPERATING SYSTEM?以及HOW IT WORKS?
Skrrapper
2025/02/27
900
【操作系统】00——当你学习OS之前需要了解的
操作系统(1)——学习导论(Ⅲ)
本操作系统专栏,是小程在学操作系统的过程中的第一步,是在学习操作系统的笔记的前提下,加上自己的心得,以及资料的搜集,共同整合而成。小程在学习过程中,难免疏漏,希望各位前辈批评指正。
学编程的小程
2024/05/26
530
操作系统(1)——学习导论(Ⅲ)
【论文解读】OLTP 数据库引擎性能优化
● 论文一的研究对象是纯内存计算的 OLTP 引擎,作者通过引入 C++ 20 的 coroutine 特性将 thread-to-transaction 的执行模型修改为两级 coroutine-to-transaction,在不需要内部接口改动的条件下实现了事务间的 batch 机制和基于协程的 prefetch,减少了后续计算的 cache miss,提升了事务的整体执行性能。
腾讯云数据库 TencentDB
2024/05/11
4250
【论文解读】OLTP 数据库引擎性能优化
操作系统的演变及在云计算的应用
随着现代信息越来越丰富,更多的信息需要被处理及计算,仅仅的单台计算机已经满足不了计算,需要将更多的计算机进行同时计算,对操作系统的要求则越来越高,各种各样云计算的的操作系统也应运而生。
jackwlchen
2020/08/10
1.4K0
操作系统的演变及在云计算的应用
linux 操作系统的进程调度(上) -- 进程调度的基本概念
操作系统中,每时每刻都有着许许多多的进程在执行着,即便是现在最为强大的多核心 CPU,同时能够执行的任务数量也是相当有限的,那么,在这样资源有限的场景下,这么多进程如何来调度,哪些进程更重要哪些进程的执行可以稍微暂缓呢?这就是操作系统调度器的工作。本文我们就来详细介绍一下。
用户3147702
2022/06/27
1.1K0
linux 操作系统的进程调度(上) -- 进程调度的基本概念
操作系统面试总结
进程是资源分配的基本单位,线程是 CPU 调度的基本单位。进程拥有独立的地址空间,线程是共享内存地址的。进程切换的开销比线程要大。
lincoln
2022/03/09
5490
[操作系统] 进程的调度
在分时操作系统中有时间片的概念,每一个进程会占据CPU资源固定时间,如果在固定时间结束后进程尚未完成,则重新进入队列等待被调度。
DevKevin
2025/01/21
1430
[操作系统] 进程的调度
操作系统基础-CPU虚拟化
原文发布于微信公众号 - 云服务与SRE架构师社区(ai-cloud-ops),作者李勇。
王录华
2020/07/10
1.6K0
相关推荐
常考计算机操作系统面试习题(二)(中)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档