乐趣区

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

编者按:随着 Linux 内核的不断更新迭代,代码变得越来越沉重。调度器是内核最外围的子系统之一,它的结构复杂,与其它子系统严密耦合,这使得开发和调试变得越发艰难。Plugsched 是 Linux 内核调度器子系统热降级的 SDK,它能够实现在不重启零碎、利用的状况下动静替换调度器子系统,毫秒级 downtime。本文整顿 自龙蜥大讲堂第 18 期, 精彩分享视频回放已上传至龙蜥官网(首页 - 动静 - 视频),欢送查看!

以下是 龙蜥社区 Kernel SIG 核心成员 分享《对于 Plugsched 调度器热降级》局部精彩内容(残缺视频回放和技术 PPT 获取形式见文末)。

Plugsched 是 Linux 内核调度器子系统热降级的 SDK,它能够实现在不重启零碎、利用的状况下动静替换调度器子系统,毫秒级 downtime。Plugsched 能够对生产环境中的内核调度个性动静地进行增、删、改,以满足不同场景或利用的需要,且反对回滚。目前曾经在龙蜥社区开源了。

开源地址:

https://gitee.com/anolis/plug…

随着 Linux 内核的不断更新迭代,代码变得越来越沉重。调度器是内核最外围的子系统之一,它的结构复杂,与其它子系统严密耦合,这使得开发和调试变得越发艰难。而且,调度器内嵌在内核中,利用新的调度器须要更换内核,这在集群中代价比拟低廉。再者,目前不存在子系统范畴的热降级计划,kpatch、livepatch 是函数粒度的热降级计划,eBPF 目前还不反对调度器。对于调度器而言,因为利用场景及其特色的多样性,使得调度策略的优化比较复杂,尤其在云场景下,不存在“一劳永逸”的策略,因而,容许用户定制调度器满足不同的场景是必要的。

基于以上背景,Plugsched 诞生了,它能将调度器子系统从内核中提取进去,以模块的模式对内核调度器进行热降级。通过对调度器模块的批改,可能针对不同业务定制化调度器,而且应用模块可能更麻利的开发新个性和优化点,并且能够在不中断业务的状况下上线。

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

接下来是演示过程,能够参考开源仓库的 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 课件获取】:关注微信公众号(OpenAnolis),回复 “龙蜥课件” 即可获取。有任何疑问请随时征询龙蜥助手—小龙(微信:openanolis_assis)。

Plugsched 相干浏览:

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

欢送更多开发者退出 Kernel SIG:

网址:https://openanolis.cn/sig/Clo…

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

—— 完 ——

退出移动版