互联网+大赛-龙蜥社区赛题解析(基于 Pluasched 优化内核调度器)|学习笔记

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: 快速学习互联网+大赛-龙蜥社区赛题解析(基于 Pluasched 优化内核调度器)

开发者学堂课程【第八届大学生创新创业大赛阿里命题龙蜥社区赛题解析:互联网+大赛-龙蜥社区赛题解析(基于 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性能,例如 schbenchunixbench、hackbench等等。

参与 plugsched 技术的研发,解决项目的 issue。(可选)

(2)赛题我能学到什么?

由于 plugsched 大幅简化调度器研发测试,缩短周期。

大学生也能轻易上手实验内核开发,学习和开发业界真实场景的调度器

image.png

plugsched 利用技术解决了现在调气领域的几大难题。plugsched 的工作原理,图架构图,首先是初始化开发环境目的是生成调器模块代码以供进行开发,以及打包生成二片包,安装到系统中就可以测试验证。

可以根据 plugsched 开元仓库中的 red meat quick start 章节很快可以学会如何使用,也能实现最简单调度器。本赛题主要是想帮助参赛者学习 Linux 内核调度器相关知识和调试方法,掌握调度器子系统热升级的基本原理,针对实际的场景提升应用性能。评判标准如下,可以开发调度器,优化成绩的应用性能,比如web service等,或者可以优化常见的 benchmark 性能,比如scale bench,最后也可以参与plugsched 技术的研发,解决项目技术是个加分项。

通过赛题因为 plugsched 大幅简化了调度器的开发测试,能够轻易的上手学习和实验内核开发,并且可以学习到业界真实场景的调度器。

相关文章
|
22天前
|
存储 物联网 调度
操作系统的心脏:内核深度解析
在数字世界的构建中,操作系统扮演着基石的角色,而其核心—内核,则是这一复杂系统的灵魂。本文将深入探讨操作系统内核的工作原理,揭示它是如何管理硬件资源、运行程序以及提供系统服务的。通过理解内核的结构和功能,我们可以更好地把握计算机系统的运作机制,进而优化和创新我们的技术实践。
|
1月前
|
安全 编译器 程序员
【C++篇】C++类与对象深度解析(六):全面剖析拷贝省略、RVO、NRVO优化策略
【C++篇】C++类与对象深度解析(六):全面剖析拷贝省略、RVO、NRVO优化策略
47 2
|
1月前
|
编译器 程序员 C语言
精简函数栈帧:优化创建和销毁过程的完全解析(建议收藏,提升内功)
精简函数栈帧:优化创建和销毁过程的完全解析(建议收藏,提升内功)
|
16天前
|
存储 人工智能 安全
操作系统的心脏——内核深度解析
【10月更文挑战第29天】 本文深入探讨了操作系统的核心组件——内核,包括其定义、功能、架构以及在现代计算中的重要性。通过对比不同操作系统内核的设计哲学和技术实现,揭示了内核如何影响系统性能、稳定性和安全性。此外,文章还讨论了未来内核技术的潜在发展方向,为读者提供了一个全面了解内核工作原理的平台。
|
13天前
|
存储 消息中间件 算法
深入探索操作系统的心脏——内核机制解析
本文旨在揭示操作系统核心——内核的工作原理,通过剖析其关键组件与机制,为读者提供一个清晰的内核结构图景。不同于常规摘要的概述性内容,本文摘要将直接聚焦于内核的核心概念、主要功能以及其在系统管理中扮演的角色,旨在激发读者对操作系统深层次运作原理的兴趣与理解。
|
20天前
|
算法 Linux 定位技术
Linux内核中的进程调度算法解析####
【10月更文挑战第29天】 本文深入剖析了Linux操作系统的心脏——内核中至关重要的组成部分之一,即进程调度机制。不同于传统的摘要概述,我们将通过一段引人入胜的故事线来揭开进程调度算法的神秘面纱,展现其背后的精妙设计与复杂逻辑,让读者仿佛跟随一位虚拟的“进程侦探”,一步步探索Linux如何高效、公平地管理众多进程,确保系统资源的最优分配与利用。 ####
58 4
|
21天前
|
缓存 负载均衡 算法
Linux内核中的进程调度算法解析####
本文深入探讨了Linux操作系统核心组件之一——进程调度器,着重分析了其采用的CFS(完全公平调度器)算法。不同于传统摘要对研究背景、方法、结果和结论的概述,本文摘要将直接揭示CFS算法的核心优势及其在现代多核处理器环境下如何实现高效、公平的资源分配,同时简要提及该算法如何优化系统响应时间和吞吐量,为读者快速构建对Linux进程调度机制的认知框架。 ####
|
1月前
|
人工智能 Cloud Native Java
云原生技术深度解析:从IO优化到AI处理
【10月更文挑战第24天】在当今数字化时代,云计算已经成为企业IT架构的核心。云原生作为云计算的最新演进形态,旨在通过一系列先进的技术和实践,帮助企业构建高效、弹性、可观测的应用系统。本文将从IO优化、key问题解决、多线程意义以及AI处理等多个维度,深入探讨云原生技术的内涵与外延,并结合Java和AI技术给出相应的示例。
101 1
|
1月前
|
存储 算法 UED
深度解析RAG优化之道:从检索到生成全面升级大模型应用性能,探索提升企业服务质量与用户体验的终极秘密
【10月更文挑战第3天】随着大模型技术的进步,人们愈发关注如何针对特定任务优化模型表现,尤其是在需要深厚背景知识的领域。RAG(Retrieval-Augmented Generation)技术因其能检索相关文档以辅助生成内容而备受青睐。本文将通过问答形式深入探讨RAG优化的关键点,并提供具体实现思路及示例代码。
49 2
|
24天前
|
机器学习/深度学习 Android开发 UED
移动应用与系统:从开发到优化的全面解析
【10月更文挑战第25天】 在数字化时代,移动应用已成为我们生活的重要组成部分。本文将深入探讨移动应用的开发过程、移动操作系统的角色,以及如何对移动应用进行优化以提高用户体验和性能。我们将通过分析具体案例,揭示移动应用成功的关键因素,并提供实用的开发和优化策略。
下一篇
无影云桌面