《1.基于eBPF构建可编程调度框架.pptx》由会员分享,可在线阅读,更多相关《1.基于eBPF构建可编程调度框架.pptx(22页珍藏版)》请在三个皮匠报告上搜索。
1、首届中国首届中国eBPFeBPF研讨会研讨会可编程调度框架交流研讨主讲人:陈辉2022-11-12首届中国首届中国eBPFeBPF研讨会研讨会目录录01背景介绍02业界调研03技术方案04未来展望首届中国首届中国eBPFeBPF研讨会研讨会背景介绍01首届中国首届中国eBPFeBPF研讨会研讨会背景终端场景云场景在线业务调度器游戏场景调度器视频场景阅读场景业务诉求:性能最优,功耗达标 调度策略:场景感知,按需选核,快速调频等业务诉求:提升CPU利用率,干扰隔离调度策略:分层调度,干扰感知&隔离离线业务业界调度策略(不同性能需求,不同调度策略):功耗感知:EAS;降低响应时延:Muqss;资源隔
2、离与共享:Caladan;提升吞吐:shinjuku;首届中国首届中国eBPFeBPF研讨会研讨会技术问题“千人千面”,定制策略多,架构臃肿肿腐化,维护维护成本高XX场景 低时延XX场景 流畅体验XX场景 高资源利用率XX场景极致小型化xx策略xx策略xx策略xx策略UserKernelIO调度内存文件系统l抽象化,模块化导致信息丢失、协同困难,性能不佳XX场景 低时延XX场景 流畅体验XX场景 高资源利用率XX场景极致小型化IOUserKernel调度内存文件系统syscall模块化、协同困难首届中国首届中国eBPFeBPF研讨会研讨会问题与目标维护困难验证&部署困难产品人员策略共享困难定制
3、化需求多,分支多,无法upstreaming,维护成本高;搭建环境成本高,验证&部署周期长,TTM长;缺乏策略共享机制开发人员重复开发架构用户态与内核态调度语义丢失调度采用通用机制,无法精准匹配业务模型首届中国首届中国eBPFeBPF研讨会研讨会业界调研02首届中国首届中国eBPFeBPF研讨会研讨会2024-5-9发展历程2004年Con Kolivas 提交“Pluggable cpu scheduler framework”patch2009年IEEE Student Conference on Research and Development 发表 Runtime CPU Schedu
4、ler Customization Framework for a flexible mobile operating system 论文 2019年Aleix Roca Nonell 发表 A Linux Kernel Scheduler Extension For Multi-Core Systems 论文 2021年SOSP 论文ghOst:Fast&Flexible User-Space Delegation of Linux Scheduling2021年Peter Oskolkov提交User-managed concurrency groupspatch2021年Roman Gu
5、shchin提交Controlling the CPU scheduler with BPFpatch首届中国首届中国eBPFeBPF研讨会研讨会2024-5-9Google ghOst scheduler Framework1)进程级可编程调度策略,不同进程间的调度策略之间互不影响;2)内核态ghost调度类感知任务状态变化,并通知给用户态线程Agent,由用户态线程Agent负责策略执行;3)内核态感知任务状态变化后,将任务状态信息封装成自定义消息,通过自定义通信机制,通知给用户态线程Agent,并将CPU释放给Agent线程,Agent线程获取自定义消息,并执行对应的调度策略;APPli
6、bagent.so/libbase.so/libghost.so(StatusWord)(Channel)ghost Agent(friend Enclave)ghost Scheduler(CpuState)LocalEnclave(CpuRep(RunRequest/agent)(ghost_cpu_data*data_region)ghost(gbl_ctl_fd_)(StatusWordTable*gbl_sw_table_)struct ghost_enclavestruct ghost_status_wordstruct ghost_queuestruct ghost_txnsys
7、callCreate mmapmmapGHOST-CREATE_QUEUE_RING首届中国首届中国eBPFeBPF研讨会研讨会2024-5-9Google UMCG scheduler toolkitApplicationUser Scheduler FrameworkKernel Scheduler FrameworkCPUCPUCPUCPUW1W2W3W4W5W6S1S2S3S4S1S2S3S4W1W2W3W4Groupsyscall状态同步UserSpaceKernelSpace同步线程切换同步线程切换Bypass 调度调度scheduler1、主要解决协程upcall的问题,可以实现
8、进程级可编程能力;2、Server线程负责Worker线程的调度,具体的调度方法在用户态编程实现;大体思路:1、Server线程负责Worker线程的调度;2、Server线程可感知到Worker线程的阻塞行为,当Worker线程发生阻塞,则由Server线程拉起其他Worker线程进行运行,提升最大吞吐;3、主要应用在解决协程upcall问题,也可以用在安全沙箱上(利用进程级隔离能力);首届中国首届中国eBPFeBPF研讨会研讨会Facebook ebpf scheduler FrameworkLLVM/bcc tools(BPF bytecode)Linux CFS scheduling
9、classFacebook schedulerMixed request workloads1%X throughttick_preemptwakeup preemptBPFselect task rqebpf maptgid&idcgroup id1)基于ebpf的可编程调度的基本框架;2)基于ebpf 提供简单的抢占策略;首届中国首届中国eBPFeBPF研讨会研讨会2024-5-9Syrup scheduler Framework业务需求:不同场景不同调度策略:“任务排布稳定”场景适合FCFS调度策略;“任务排布高度变化”场景适合抢占和资源分割的调度策略(如CFS);“内存敏感性”。低底噪
10、负载:1us or less!调度策略安全隔离:Syrup设计如何满足业务需求:不同场景不同调度策略:基于eBPF和ghOSt,将调度装换成策略匹配问题 低底噪负载:1us or less!调度策略安全隔离:引入全局仲裁器,为不同应用使能不同调度策略。首届中国首届中国eBPFeBPF研讨会研讨会技术方案03首届中国首届中国eBPFeBPF研讨会研讨会可编程调度框架Kernel programmable scheduler frameworkUser programmable scheduler policy调度选核选任务负载均衡topo_helperload_helpertag_helper基
11、础调度策略库(.lib)XX调度策略XX调度策略XX调度策略syscall/mapevent/map可编程基础库(tools)标签管理(任务/进程/组/用户)内存网络文件系统 hook export1、可编程调度底座,提供基础系统调用,事件通知,数据共享机制与一致性保护,打通用户态与内核态,内核态组件之间信息通信。2、提供标签化管理机制,支持任务/进程/组/用户等对象的自定义标签扩展,支持用户态+内核态,内核态组件之间协同调度;3、剥离调度中的策略与机制,将策略层做为可扩展点暴露给用户态编程,提供丰富的辅助方法和数据支持,支持现有调度策略扩展,新增调度类,调度器移植等多种调度扩展能力;4、提供
12、基础的库函数,支持用户快速编排&扩展,用户编程友好。UserKernel首届中国首届中国eBPFeBPF研讨会研讨会技术点技术点:形式化验证验证+安全加载载保障prog安全性 通过形式化验证,字节码签名校验,运行时上下文一致性保护,原子加载等机制保障可编程策略的安全性,做到安全动态加载。管理组组件+可编编程lib库库方便用户户开发验证发验证 提供可编程lib库,支持多种高级语言和库函数,方便用户快速二次开发;提供管理组件,支持代码扫描,自动化测试,策略推广等。标签标签化管理 基于标签机制提供身份管理功能。各系统统提供机制/策略 各内核模块提供编程扩展接口和数据接口,提供可编程能力;整理版本兼容
13、KABI和差异化接口,保障移植性和扩展性。CO-RE+版本兼容KABI 提供版本兼容KABI,屏蔽结构体等变更差异,实现各内核版本二进制兼容。首届中国首届中国eBPFeBPF研讨会研讨会标签机制Add field s64 tag in struct task and struct task_groupUser interfaces$your cpu subsystem cgroup directory/$customized cgroup/tag/proc/$pid/task/$pid/tagHelpersread and write tagbpf_sched_tg_tag_of()/bpf_
14、sched_task_tag_of()/bpf_sched_set_tg_tag()/bpf_sched_set_task_tag()convert sched entity to task or task_groupbpf_sched_entity_to_task()/bpf_sched_entity_to_tg()Benefits/Use casesuseful to classify the task or task_group such as foreground and background tasks,online and offline tasks,etcrealize coor
15、dinated scheduling between user-mode and kernel-mode,kernel subsystemsSamplesamples:bpf:Add bpf sched preempt sample program首届中国首届中国eBPFeBPF研讨会研讨会选核机制Hookssched:programmable:Add hook for select_task_rq_faircfs_wake_affinecfs_select_rqcfs_select_rq_exithelpersbpf:programmable:Add four helper function
16、s to get cpu statsched:programmable:Add helper function for cpu topologybpf:programmable:Add helper func to set cpus_ptr in taskBenefits/Use cases Useful to implement the most preferred core-selecting policy based on the actual scenario Implement dynamic CPU affinity,such as adjust CPU affinity base
17、 on load or utilSamplesamples:bpf:Add samples for cfs select core首届中国首届中国eBPFeBPF研讨会研讨会选任务机制Hookssched:programmable:Add hook for pick next taskcfs_tag_pick_next_entitybypass the logic of entity_before()Benefits/Use casesused to controls higher-priority tasks to be placed on the left side of the red-
18、black tree to ensure that they are executed first.Samplesamples:bpf:Add bpf sched pick task sample首届中国首届中国eBPFeBPF研讨会研讨会未来展望04首届中国首届中国eBPFeBPF研讨会研讨会后续计划Kernel programmable scheduler framework基础调度策略库XX场景 高吞吐&低负载可编程调度框架NUMAAMPSMPSMTXX场景 性能&功耗XX场景 资源隔离其他场景try_to_wake_upselect_taskenqueue_taskupdate_loa
19、d_avgcpufreq_updat_utilschedulecheck_preemptpick_next_taskidle_balanceload_balanceschedule_tickexit_to_usercgroup_tagprocess_tagtask_tagsched_forkinit_util_avg第三方中间件cpu_tagsched_initSyscallisolationhotplugsignalpowerthemal计划:1)支持新增调度类;2)与内核其他模块联动,如网络,内存,锁,中断,信号,能基于一个场景编写完整的解决方案;3)与用户态调度框架协同,基于外界信息动态调整策略,实现动态策略;4)丰富用户态的策略库,支持编程友好;futex首届中国首届中国eBPFeBPF研讨会研讨会生态建设开发简单高效开发l支持高级语言l丰富的基础库快速部署,缩短验证周期l支持热升级部署 prog发布部署安全可靠l数字签名lprog商店pulll支持安全验证l在线无缝部署发布prog推广验证交流&反馈社区首届中国首届中国eBPFeBPF研讨会研讨会Thanks!2024-5-