开发者学堂课程【第八届大学生创新创业大赛阿里命题龙蜥社区赛题解析:互联网+大赛-龙蜥社区赛题解析(基于 Pluasched 优化内核调度器)】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/1019/detail/15088
互联网+大赛-龙蜥社区赛题解析(基于 Pluasched 优化内核调度器)
内容介绍:
一、赛题背景
二、赛题介绍
一、赛题背景
1、什么是调度器
CPU 资源的抽象
给线程分配 CPU
给 CPU 指派线程
(1)教科书 vs 业界
理论模型:FCFS、SJF、PS、RR、多级反馈队列。
实用模型:CFS、硬实时调度。
CFS应用广泛:服务器/云计算/超算/桌面/移动…
(2)变化的场景
不同的行业有不同的定制需求:
数据分析平台、交易平台、云服务器、终端设备 …
(3)不变的问题
公平性 延迟 吞吐 局部性 利用率 QoS 能耗
调度器是操作系统中最古老、最核心的子系统,把 cpu 资源抽象出来,分配给线程使用或者说给 cpu 指派一些线程去运行,常见的调期模型有先来先服务等等。这些算法都是课文中常见的,但是工业界一般使用的最多的是 nicks 调器,是最实用也最常用的调器,全身是完全公平调度器,支持单核、多核以及众核架构,应用场景也非常多,包括数据中心、云计算、桌面端、移动端等等。不同的行业和场景对调度器做一些不同的定制需求,但是调度器的公平性、延迟、吞吐利用率、能耗 QoS 等等呈现出来问题和关注点都一样的,所以变化的场景有些不变的问题。
2、Linux 调度器现状
Plugsched 能将调度器子系统从内核中提取出来,以模块的形式对内核调度器进行热升级,能够针对不同业务定制化调度器。
新的应用场景越来越多,操作系统面临的机遇和挑战也随之而来。Linux 调度器前进却很慢。Linux 对 CFS 调度器的设计理念是要求适用于各种场景,无论是移动端、桌面端是云端,然而不同的场景对调有不同的需求。调度器的开发更新迭代会遇到以下几点问题:
(1)调度器迭代慢
Linux 内核经过很多年的更新迭代,代码变得越来越繁重。调度器是内核最核心的子系统之一,它的结构复杂,与其它子系统紧密耦合,这使得开发和调试变得越发困难。此外,Linux 很增加新的调度类,尤其是不太可能接受非调用或场景针对型的调度器,上游社区在调度领域发展缓慢。
(2)升级内核困难
调度器内嵌(built-in)在内核中,上线调度器的优化或新特性需要升级内核版本。内核发布周期通常是数月之久这将导致新的调度器无法及时应用在生产系统中。再者要在集群范围升级新内核,涉及业务迁移和停机升级,对业务方来说代价昂贵。
(3)无法升级子系统
kpatch 和 livepatch 是函数粒度的热升级方案,可修改能力较弱,不能实现复杂的逻辑改动或者整个子系统的升级;eBPF 技术在内核网络中广泛应用。但现在调度器还不支持 ebpfhook,将来即使支持,也只是实现局部策略的灵活修改,可修改能力同样较弱。
(3)应用场景不同,最佳调度策略不同
应用种类极大丰富,特征也是千变万化,尤其在云场景下调度策略的优化比较复杂,不存在“一劳永逸”的策略。因此,允许用户定制调度器满足不同的场景是必要的。(各公司都意识到了这个问题,并提出自己的解决方案,比如说 mate 的 sketch edpf,谷歌的 ghost,以及阿里的 plus,希望更多人参加到领域中。
3、Plugsched 简介
Plugsched 是 Linux 内核调度器子系统热升级的 SDK,它可以实现在不重启系统、应用的情况下动态替换调度器子系统,毫秒级 downtime。Plugsched 可以对生产环境中的内核调度特性动态的进行增、删、改,以满足不同场景或应用的需求,且支持回滚。
https://gitee.com/anolis/plugsched
Plugsched 已经在龙溪社区开源,Plugsched 能将调度器系统从内核中提取出来,以模块的形式对内核调度器进行升级。通过对调度器模块的修改,能够针对不同业务定制化调度器,并且使用模块能够更敏捷的开发新特性,优化点,在不中断业务的情况下上线。
4、Plugsched 优势与价值
调度器与内核解耦,以模块的形式对内核调度器进行热升级,可针对不同的业务定制化调度器,而且可以在不中断业务的情况下上线。
(1)与内核发布解耦:调度器版本与内核版本解耦,不同业务可以使用不同调度策略建立持续运维能力,加速调度问题修复、策略优化落地;加快调度器技术演进和迭代;
(2)可修改能力强:可以实现复杂的调度特性和优化策略;
(3)维护简单:不修改内核代码,或少量修改内核代码,保持内核主线干净整洁;在内核代码 Tree 外独立维护非通用调度策略,采用RPM 的形式发布和上线;
(4)简单易用:容器化的 SDK 开发环境,一键生成 RPM,开发测试简洁高效;
(5)向下兼容:支持老内核版本,使得存量业务也能及时享受新技术红利;
(6)高效的性能:毫秒级 downtime,可忽略的 overhead。
Plugsched 在工业生产中的一些优势。
5、Plugsched 教学价值
我是学生、教师,plugsched 对我有什么用?
Plugsched为工业生产设计,但也非常适合学习教学。
(1)环境简单:容器化,且依托成熟的龙蜥 OS,一键搭建。
(2)敏捷开发测试:无需编译内核,无需重启,安装测试。
(3)开发聚焦:只需关注调度器,代码量少,干扰小。
(4)接触实际应用:接触到业界真正使用的 OS 技术。
task 的 PCB、task 状态转移、上下文切换、CPU 队列管理、CPU负载均衡、抢占机制、组调度、核间通信、核间同步、优先级、限流……
除了优势之外对于学生、教师也非常合适,开发环境很简单,plugsched 提供容器化的开发环境,并且依托成熟龙溪 OS 一键搭建开发环境。开发测试也变得敏捷,不需要编译内核,不需要重启系统,安装到系统中就可以测试验证,plugsched 将调度器从内核中提取出来,只需要关注调度器,不需要关注其他子系统。开发变得比较简单,最后可以接触到一些真正使用的 OS 技术。
二、赛题介绍
1、基于 Plugsched 优化内核调度器
(1)如何参与?
阅读 README 的 Quick Start,半小时学习就能使用
Plugsched 实现最简单的内核调度器。选择下面内容:
开发调度器,优化常见应用程序性能,例如 web
server、database、深度学习等等。
开发调度器,优化常见benchmark性能,例如 schbench、unixbench、hackbench等等。
参与 plugsched 技术的研发,解决项目的 issue。(可选)
(2)赛题我能学到什么?
由于 plugsched 大幅简化调度器研发测试,缩短周期。
大学生也能轻易上手实验内核开发,学习和开发业界真实场景的调度器
plugsched 利用技术解决了现在调气领域的几大难题。plugsched 的工作原理,图为架构图,首先是初始化开发环境,目的是生成调度器模块代码以供进行开发,以及打包生成二片包,安装到系统中就可以测试和验证。
可以根据 plugsched 开元仓库中的 red meat quick start 章节很快可以学会如何使用,也能实现最简单调度器。本赛题主要是想帮助参赛者学习 Linux 内核调度器相关知识和调试方法,掌握调度器子系统热升级的基本原理,针对实际的场景提升应用性能。评判标准如下,可以开发调度器,优化成绩的应用性能,比如web service等,或者可以优化常见的 benchmark 性能,比如scale bench,最后也可以参与plugsched 技术的研发,解决项目技术是个加分项。
通过赛题因为 plugsched 大幅简化了调度器的开发测试,能够轻易的上手学习和实验内核开发,并且可以学习到业界真实场景的调度器。