Plugsched 实战解读:如何在不中断业务时对 Linux 内核调度器热升级? | 龙蜥技术

简介: plugsched 如何使用?每一步的操作如何进行以及背后的工作是什么?

编者按:随着 Linux 内核的不断更新迭代,代码变得越来越繁重。调度器是内核最核心的子系统之一,它的结构复杂,与其它子系统紧密耦合,这使得开发和调试变得越发困难。Plugsched 是 Linux 内核调度器子系统热升级的 SDK,它可以实现在不重启系统、应用的情况下动态替换调度器子系统,毫秒级 downtime。本文整理自龙蜥大讲堂第 18 期精彩分享视频回放已上传至龙蜥官网,欢迎查看!


以下是龙蜥社区 Kernel SIG 核心成员分享《关于 Plugsched 调度器热升级》部分精彩内容(完整视频回放和技术 PPT 获取方式见文末)

640 (5).png

Plugsched 是 Linux 内核调度器子系统热升级的 SDK,它可以实现在不重启系统、应用的情况下动态替换调度器子系统,毫秒级 downtime。Plugsched 可以对生产环境中的内核调度特性动态地进行增、删、改,以满足不同场景或应用的需求,且支持回滚。目前已经在龙蜥社区开源了。


开源地址:

https://gitee.com/anolis/plugsched


随着 Linux 内核的不断更新迭代,代码变得越来越繁重。调度器是内核最核心的子系统之一,它的结构复杂,与其它子系统紧密耦合,这使得开发和调试变得越发困难。而且,调度器内嵌在内核中,应用新的调度器需要更换内核,这在集群中代价比较昂贵。再者,目前不存在子系统范围的热升级方案,kpatch、livepatch 是函数粒度的热升级方案,eBPF 目前还不支持调度器。对于调度器而言,由于应用场景及其特征的多样性,使得调度策略的优化比较复杂,尤其在云场景下,不存在“一劳永逸”的策略,因此,允许用户定制调度器满足不同的场景是必要的。


基于以上背景,Plugsched 诞生了,它能将调度器子系统从内核中提取出来,以模块的形式对内核调度器进行热升级。通过对调度器模块的修改,能够针对不同业务定制化调度器,而且使用模块能够更敏捷的开发新特性和优化点,并且可以在不中断业务的情况下上线。


本文从 plugsched 的 背景、优势、应用场景和原理四个方面展开分享,通过一个实际案例体现出 plugsched 的价值所在,最后给大家进行了实际操作的演示,演示过程中,详细介绍了 plugsched 如何使用、每一步的操作如何进行以及背后的工作是什么。

640.png

640 (1).png

640 (2).png

640 (3).png

640 (4).png

接下来是演示过程,可以参考开源仓库的 Readme 中的 Quick Start 章节,Plugsched SDK 提供了 容器化的开发环境,通过实际操作,可以很快学会如何使用它(演示视频已上传至龙蜥官网,欢迎查看)


最后,讲师与线上听众进行了 Q&A 互动,本文主要摘录以下 5 个问题:


Q:回滚之后,内核原来的调度器如何重新生效?

A:安装调度器包后,相当于系统中存在两个调度器,一个是内核原有的调度器,另一个是新安装的调度器。安装新的调度器安装后,内核原有的调度器相当于被旁路掉了。当新的调度器包被卸载(回滚)后,内核原有的调度器相当于被重新 enable,会自动生效。


Q:Plugsched 与 sched eBPF 有什么区别?

A:目前,上游社区还不支持调度器 eBPF 的 hook 点,即便是支持了,也只能支持局部策略的修改,可修改能力有限。而且 eBPF 不能实现很复杂的修改,它的检查机制很严格,不能实现复杂的逻辑,修改能力进一步受限。


Q:Google 的 ghOSt,似乎是和 plugsched 做类似的工作?两者有什么区别?

A:ghOSt 与 plugsched 面向的场景不同,性能也不同。ghOSt 有两种工作模式,local 模式开销较大,每次调度要多经历一次上下文切换,即切入切出用户态调度器软件,所以只能在一些延迟要求不高的场景用。而 global 模式过度依赖 IPI,IPI 的开销会导致调度不及时,增加延时。再者,ghOSt 针对无内核开发经验的用户态软件开发者,容错性比较高,但是性能相对较差,只能用于部分场景。plugsched 依旧针对内核开发者,要求开发者有与传统内核同样的开发经验,但是为内核开发者降低开发、测试、上线、回滚的难度,性能好,能用于绝大部分场景。


Q:Plugsched 在做模块化的过程中开销如何?

A:对于模块化的开销,可以不需要太关注,因为这个过程是 offline 的,而且生成调度器模块后,可以持续修改和生成 RPM 包。对于它的开销,演示过程使用的环境是 64 核 CPU,生成调度器模块的时间大约是 2-3 分钟,应为它需要编译一次内核,开销并不是很高。


Q:系统重启或者更换内核是否有影响?

A:plugsched 支持安装多内核版本的调度器包,就像可以同时安装多个版本的内核一样。当系统重启后,plugsched 会自动识别并安装当前内核版本的调度器模块,即便是不存在对应内核版本的调度器,也不会安装其它内核版本的调度器模块。因此,系统重启或更换内核并没有什么影响。


关于回放和课件获取

【视频回放】:视频回访已上传至龙蜥官网:https://openanolis.cn/video查看。

【PPT课件获取】:获取链接:https://www.yuque.com/anolis-docs/courses有任何疑问请随时咨询龙蜥助手—小龙(微信:openanolis_assis)


Plugsched 相关阅读:

龙蜥开源Plugsched:首次实现 Linux kernel 调度器热升级

欢迎更多开发者加入Kernel SIG:

网址:https://openanolis.cn/sig/Cloud-Kernel

邮件:cloud-kernel@lists.openanolis.cn

—— 完 ——

加入龙蜥社群

加入微信群:添加社区助理-龙蜥社区小龙(微信:openanolis_assis),备注【龙蜥】与你同在;加入钉钉群:扫描下方钉钉群二维码。欢迎开发者/用户加入龙蜥社区(OpenAnolis)交流,共同推进龙蜥社区的发展,一起打造一个活跃的、健康的开源操作系统生态!

公众号&小龙交流群.png

关于龙蜥社区

龙蜥社区(OpenAnolis)由企事业单位、高等院校、科研单位、非营利性组织、个人等在自愿、平等、开源、协作的基础上组成的非盈利性开源社区。龙蜥社区成立于 2020 年 9 月,旨在构建一个开源、中立、开放的 Linux 上游发行版社区及创新平台。


龙蜥社区成立的短期目标是开发龙蜥操作系统(Anolis OS)作为 CentOS 停服后的应对方案,构建一个兼容国际 Linux 主流厂商的社区发行版。中长期目标是探索打造一个面向未来的操作系统,建立统一的开源操作系统生态,孵化创新开源项目,繁荣开源生态。


目前,Anolis OS 8.4已发布,支持 X86_64 、Arm64、LoongArch 架构,完善适配 Intel、兆芯、鲲鹏、龙芯等芯片,并提供全栈国密支持。


欢迎下载:

https://openanolis.cn/download

加入我们,一起打造面向未来的开源操作系统!

https://openanolis.cn

相关文章
|
14天前
|
安全 Linux 编译器
BigCloud Enterprise Linux 8和Rocky Linux 8升级OpenSSH步骤
本文介绍了在BigCloud Enterprise Linux 8.2/8.6和Rocky Linux 8.10上升级OpenSSH的详细步骤。首先配置Telnet服务和GCC编译器以确保远程登录安全,接着备份旧版OpenSSH并下载、编译、安装最新版本(如9.9p1)。然后创建新的sshd系统服务配置文件,调整配置并启动服务。最后验证升级效果,关闭不必要的Telnet服务,并处理可能的防火墙和SELinux问题。通过这些步骤可有效修复低版本OpenSSH带来的高危漏洞。
61 13
|
1月前
|
应用服务中间件 Linux nginx
【Azure App Service】基于Linux创建的App Service是否可以主动升级内置的Nginx版本呢?
基于Linux创建的App Service是否可以主动升级内置的Nginx版本呢?Web App Linux 默认使用的 Nginx 版本是由平台预定义的,无法更改这个版本。
139 77
|
4月前
|
算法 Linux 调度
深入理解Linux内核调度器:从基础到优化####
本文旨在通过剖析Linux操作系统的心脏——内核调度器,为读者揭开其高效管理CPU资源的神秘面纱。不同于传统的摘要概述,本文将直接以一段精简代码片段作为引子,展示一个简化版的任务调度逻辑,随后逐步深入,详细探讨Linux内核调度器的工作原理、关键数据结构、调度算法演变以及性能调优策略,旨在为开发者与系统管理员提供一份实用的技术指南。 ####
138 4
|
2月前
|
安全 大数据 Linux
云上体验最佳的服务器操作系统 - Alibaba Cloud Linux | 飞天技术沙龙-CentOS 迁移替换专场
本次方案的主题是云上体验最佳的服务器操作系统 - Alibaba Cloud Linux ,从 Alibaba Cloud Linux 的产生背景、产品优势以及云上用户使用它享受的技术红利等方面详细进行了介绍。同时,通过国内某社交平台、某快递企业、某手机客户大数据业务 3 大案例,成功助力客户实现弹性扩容能力提升、性能提升、降本增效。 1. 背景介绍 2. 产品介绍 3. 案例分享
|
3月前
|
安全 Linux KVM
Linux虚拟化技术:从Xen到KVM
Xen和KVM是Linux平台上两种主要的虚拟化技术,各有优缺点和适用场景。通过对比两者的架构、性能、安全性、管理复杂性和硬件依赖性,可以更好地理解它们的适用场景和选择依据。无论是高性能计算、企业虚拟化还是云计算平台,合理选择和配置虚拟化技术是实现高效、稳定和安全IT环境的关键。
155 8
|
4月前
|
负载均衡 算法 Linux
深入探索Linux内核调度器:公平与效率的平衡####
本文通过剖析Linux内核调度器的工作机制,揭示了其在多任务处理环境中如何实现时间片轮转、优先级调整及完全公平调度算法(CFS),以达到既公平又高效地分配CPU资源的目标。通过对比FIFO和RR等传统调度策略,本文展示了Linux调度器如何在复杂的计算场景下优化性能,为系统设计师和开发者提供了宝贵的设计思路。 ####
93 26
|
4月前
|
缓存 算法 Linux
Linux内核的心脏:深入理解进程调度器
本文探讨了Linux操作系统中至关重要的组成部分——进程调度器。通过分析其工作原理、调度算法以及在不同场景下的表现,揭示它是如何高效管理CPU资源,确保系统响应性和公平性的。本文旨在为读者提供一个清晰的视图,了解在多任务环境下,Linux是如何智能地分配处理器时间给各个进程的。
|
4月前
|
缓存 负载均衡 Linux
深入理解Linux内核调度器
本文探讨了Linux操作系统核心组件之一——内核调度器的工作原理和设计哲学。不同于常规的技术文章,本摘要旨在提供一种全新的视角来审视Linux内核的调度机制,通过分析其对系统性能的影响以及在多核处理器环境下的表现,揭示调度器如何平衡公平性和效率。文章进一步讨论了完全公平调度器(CFS)的设计细节,包括它如何处理不同优先级的任务、如何进行负载均衡以及它是如何适应现代多核架构的挑战。此外,本文还简要概述了Linux调度器的未来发展方向,包括对实时任务支持的改进和对异构计算环境的适应性。
77 6
|
4月前
|
算法 Unix Linux
深入理解Linux内核调度器:原理与优化
本文探讨了Linux操作系统的心脏——内核调度器(Scheduler)的工作原理,以及如何通过参数调整和代码优化来提高系统性能。不同于常规摘要仅概述内容,本摘要旨在激发读者对Linux内核调度机制深层次运作的兴趣,并简要介绍文章将覆盖的关键话题,如调度算法、实时性增强及节能策略等。
|
4月前
|
算法 前端开发 Linux
深入理解Linux内核调度器:CFS与实时性的平衡####
本文旨在探讨Linux操作系统的核心组件之一——完全公平调度器(CFS)的工作原理,分析其在多任务处理环境中如何实现进程间的公平调度,并进一步讨论Linux对于实时性需求的支持策略。不同于传统摘要仅概述内容要点,本部分将简要预览CFS的设计哲学、核心算法以及它是如何通过红黑树数据结构来维护进程执行顺序,同时触及Linux内核为满足不同应用场景下的实时性要求而做出的权衡与优化。 ####