运行sched_ext调度器

发布时间:2026/11/5 1:17:31

运行sched_ext调度器 系统版本信息该版本较低不支持sched_ext本文基于bclinux / RHEL / CentOS如果用的是ubuntu替换成对应的apt命令即可。[roothadoop02 ~]# uname -a Linux hadoop02 5.10.0-200.0.0.131.30.oe2203sp3.bclinux.x86_64 #1 SMP Tue Sep 24 08:43:22 CST 2024 x86_64 x86_64 x86_64 GNU/LinuxLinux内核从6.12版本开始正式支持sched_ext调度程序所以需升级内核至6.12或其他高版本。本文将内核升级至6.15.7版本sched_ext调度器基于6.15.7实现。一、pahole 版本 ≥ 1.16打开SCHED_CLASS_EXT配置项时依赖关系要求pahole的版本 ≥ 1.16。下载pahole源码[roothadoop02 ~]# git clone git://git.kernel.org/pub/scm/devel/pahole/pahole.git [roothadoop02 ~]# cd pahole/ [roothadoop02 ~]# git checkout v1.30在编译pahole的过程中pahole/.gitmodules文件配置了git libbpf的地址如果不能访问外网git hub可通过下面命令将地址换成国内镜像。pahole根目录执行 sed -i s|https://github.com/libbpf/libbpf|https://gitee.com/mirrors/libbpf.git| .gitmodules git submodule sync git submodule update --init安装cmake等工具[roothadoop02 ~]# yum install cmake gcc make elfutils-libelf-devel -y编译及安装[roothadoop02 pahole]# mkdir build cd build [roothadoop02 build]# cmake -D__LIBlib .. [roothadoop02 build]# make -j$(nproc) [ 1%] Building C object CMakeFiles/bpf.dir/lib/bpf/src/bpf.c.o [ 3%] Building C object CMakeFiles/bpf.dir/lib/bpf/src/bpf_prog_linfo.c.o [ 5%] Building C object CMakeFiles/bpf.dir/lib/bpf/src/btf.c.o [ 6%] Building C object CMakeFiles/bpf.dir/lib/bpf/src/btf_dump.c.o [ 8%] Building C object CMakeFiles/bpf.dir/lib/bpf/src/btf_iter.c.o [roothadoop02 build]# make install Consolidate compiler generated dependencies of target bpf [ 37%] Built target bpf Consolidate compiler generated dependencies of target dwarves [ 57%] Built target dwarves Consolidate compiler generated dependencies of target dwarves_emit安装[roothadoop02 build]# make install -- Installing: /usr/local/include/dwarves/elfcreator.h -- Installing: /usr/local/include/dwarves/elf_symtab.h -- Installing: /usr/local/include/dwarves/hash.h -- Installing: /usr/local/include/dwarves/libctf.h -- Installing: /usr/local/share/man/man1/pahole.1 -- Installing: /usr/local/bin/ostra-cg -- Installing: /usr/local/share/dwarves/runtime/python/ostra.py -- Installing: /usr/local/bin/btfdiff -- Installing: /usr/local/bin/fullcircle -- Installing: /usr/local/share/dwarves/runtime/Makefile -- Installing: /usr/local/share/dwarves/runtime/ctracer_relay.c -- Installing: /usr/local/share/dwarves/runtime/ctracer_relay.h -- Installing: /usr/local/share/dwarves/runtime/linux.blacklist.cu修改环境变量echo /usr/local/lib64 | sudo tee /etc/ld.so.conf.d/dwarves.conf sudo ldconfig安装完成[roothadoop02 linux-6.15.7]# pahole --version v1.30二、6.15.7内核编译选项sche_ext相关在开始设置config选项前一定要按第一节内容安装pahole否则部分config将不会显示。make menuconfig设置以下配置项务必注意需要按顺序设置CONFIG_LOCALVERSION填入自己设置的内核版本名称General setup - Local version - append to kernel releaseCONFIG_BPF_SYSCALLy允许用户态通过bpf()系统调用加载 eBPF 程序到内核General setup - BPF subsystem - Enable bpf() system callCONFIG_BPF_JITy启用BPF即时编译加速General setup - BPF subsystem - Enable BPF Just In Time compiler勾选后CONFIG_HAVE_EBPF_JIT 将自动激活依赖架构支持,x86_64/ARM64 通常支持CONFIG_DEBUG_INFOy生成完整的调试符号信息“Kernel hacking” - “Compile-time checks and compiler options” - “Debug information选择Generate DWARF Version 4 debuginfoCONFIG_DEBUG_INFO_SPLITn禁用调试信息拆分“Kernel hacking” - “Compile-time checks and compiler options” - Produce split debuginfo in .dwo filesCONFIG_DEBUG_INFO_REDUCEDn禁用缩减版调试信息Kernel hacking” - “Compile-time checks and compiler options” - Reduce debugging informationCONFIG_DEBUG_INFO_BTFy生成BPF类型格式(BTF)调试信息提供内核数据结构元数据“Kernel hacking” - “Compile-time checks and compiler options” - “Generate BTF type information ”CONFIG_SCHED_CLASS_EXTy启用可扩展的 BPF 调度类sched_extGeneral setup - Extensible Scheduling Class (NEW)”CONFIG_FUNCTION_ERROR_INJECTIONy开启故障注入测试“Kernel hacking” - Kernel Testing and Coverage - Fault-injections of functionsCONFIG_BPF_KPROBE_OVERRIDEy控制 eBPF 程序是否能够修改内核函数的返回值‌“Kernel hacking” - Tracers - enable BPF programs to override a kprobed function可通过检测脚本检查配置是否正确放在linux内核源码的根目录[roothadoop02 linux-6.15.7]# cat check_config.sh #!/bin/bash # check_config.sh # 功能验证内核配置是否满足 sched_ext 要求并检查 pahole 版本兼容性 CONFIG${1:-.config} # 支持自定义配置文件路径 # 检查配置项函数支持必须启用或禁用的选项 check_config() { local opt$1 local expected_val${2:-y} # 默认检查是否y if [ $expected_val n ]; then # 对于需要n的选项不存在或n都算通过 if ! grep -q ^$opt $CONFIG || grep -q ^$optn $CONFIG; then echo -e \033[32m[OK]\033[0m $opt not set or n else echo -e \033[31m[FAIL]\033[0m $opt is enabled (should be n) fi else # 对于需要y的选项必须明确存在且y if grep -q ^$opty $CONFIG; then echo -e \033[32m[OK]\033[0m $opt enabled else echo -e \033[31m[FAIL]\033[0m $opt not set fi fi } version_compare() { local need_ver$1 local current_ver$2 [ $(printf %s\n $need_ver $current_ver | sort -V | head -n1) $need_ver ] } echo Checking required kernel configs (must be y) check_config CONFIG_BPF_SYSCALL check_config CONFIG_BPF_JIT check_config CONFIG_DEBUG_INFO check_config CONFIG_DEBUG_INFO_BTF check_config CONFIG_SCHED_CLASS_EXT check_config CONFIG_FUNCTION_ERROR_INJECTION check_config CONFIG_BPF_KPROBE_OVERRIDE echo echo Checking conflict kernel configs (must be n or absent) check_config CONFIG_DEBUG_INFO_SPLIT n check_config CONFIG_DEBUG_INFO_REDUCED n echo echo Checking pahole version (need 1.16) if command -v pahole /dev/null 21; then ver$(pahole --version | grep -oE [0-9]\.[0-9]) echo Detected pahole version: $ver if version_compare 1.16 $ver; then echo -e \033[32m[OK]\033[0m pahole 1.16 else echo -e \033[31m[FAIL]\033[0m pahole too old (need 1.16) fi else echo -e \033[31m[FAIL]\033[0m pahole not installed fi echo echo Checking libdwarves_emit.so availability if ldconfig -p | grep -q libdwarves_emit.so; then echo -e \033[32m[OK]\033[0m libdwarves_emit.so found else echo -e \033[31m[WARN]\033[0m libdwarves_emit.so not in standard paths echo Try: export LD_LIBRARY_PATH/usr/local/lib64:\$LD_LIBRARY_PATH fi执行check_config.sh 确保各项检查pass编译后的内核启动时如果卡在Loading initial ramdisk ...用下面的config文件重新编译内核这个文件已经设置了sched_ext相关的配置项。6.15.7_sched_ext.config链接: https://pan.baidu.com/s/1-i5uhL7G5MXcdtnvY8S56w 提取码: htk5三、6.15.7内核编译选项签名相关不关闭签名可能产生下面的错误强烈建议关闭。- SSL error:0480006C:PEM routines::no start line: ../crypto/pem/pem_lib.c:763 extract-cert: certs/signing_key.pem make[3]: *** [certs/Makefile:74: certs/signing_key.x509] Error 1 make[2]: *** [scripts/Makefile.build:461: certs] Error 2 make[2]: *** Waiting for unfinished jobs.... make[1]: *** [/home/geshifei/linux-6.15.7/Makefile:2003: .] Error 2 make: *** [Makefile:248: __sub-make] Error 2CONFIG_MODULE_SIGn关闭模块签名“Enable loadable module support” - “Module signature verification”四、关闭证书linux-6.15.7源码目录执行scripts/config --disable SYSTEM_TRUSTED_KEYSscripts/config --disable SYSTEM_REVOCATION_KEYS五、编译6.15.7内核make -j$(nproc) make modules_install make install grub2-mkconfig -o /boot/grub2/grub.cfg六、重启进6.15.7重启启动项中选择刚刚编译的6.15.7 kernel。本文后续操作都是在6.15.7系统中七、安装工具包编译clang、全功能bpftool需要用到这些工具包。[roothadoop00 ~] yum install valgrind valgrind-devel [roothadoop00 ~] yum install libedit-devel [roothadoop00 ~] yum install elfutils-libelf-devel [roothadoop00 ~] yum install zlib-devel [roothadoop00 ~] yum install binutils-devel [roothadoop00 ~] yum install libcap-develubuntu[roothadoop00 ~] apt install valgrind [roothadoop00 ~] apt install libedit-dev [roothadoop00 ~] apt install libelf-dev [roothadoop00 ~] apt install zlib1g-dev [roothadoop00 ~] apt install binutils-dev [roothadoop00 ~] apt install libcap-dev八、升级clang≥16BPF程序在内核中运行时可以通过 BTF (BPF Type Format) 来获取类型信息这些信息是通过clang编码到.BTF section中的。低版本calng会出现不支持新标记的问题比如btf_type_tag、btf_decl_tag本文将clang升级到17.0.6。1下载及编译clang 17.0.6[roothadoop02 ~] cd /opt 下载代码 官方速度很慢git clone gitgithub.com:llvm/llvm-project.git 国内gitee速度很快git clone https://gitee.com/mirrors/llvm-project.git 国内清华需要排队git clone https://mirrors.tuna.tsinghua.edu.cn/git/llvm-project.git [roothadoop02 opt] cd llvm-project/ [roothadoop02 llvm-project] git checkout llvmorg-17.0.6 [roothadoop02 llvm-project] mkdir build cd build [roothadoop02 build] cmake -G Unix Makefiles -DLLVM_ENABLE_PROJECTSclang;lld;compiler-rt -DCMAKE_BUILD_TYPERelease ../llvm [roothadoop02 build] make -j$(nproc) [roothadoop02 build] make install2检查clang版本[roothadoop02 build]# which clang /usr/local/bin/clang [roothadoop02 build] /usr/local/bin/clang --version clang version 17.0.6 (gitgithub.com:llvm/llvm-project.git 6009708b4367171ccdbf4b5905cb6a803753fe18) Target: x86_64-unknown-linux-gnu Thread model: posix InstalledDir: /usr/local/bin九、安装libbpf一定要用内核源码自带的libbpf编译否则可能有兼容问题。[roothadoop02 ~]# cd /home/geshifei/linux-6.15.7/tools/lib/bpf [roothadoop02 bpf]# make -j$(nproc) make install十、安装libbpftool一定要用内核源码自带的bpftool编译否则可能有兼容问题。需要按照六七节安装工具包才能编译出全功能版的libpftool在编译bpftool时显示Auto-detecting system features: ... clang-bpf-co-re: [ on ] ... llvm: [ on ] ... libcap: [ on ] ... libbfd: [ on ]编译命令[roothadoop02 ~]# cd /home/geshifei/linux-6.15.7/tools/bpf/bpftool/ [roothadoop00 bpftool]# make -j$(nproc) [roothadoop00 bpftool]# make install十一、运行自带的sched_ext调度器a编译[roothadoop00 bpftool]# cd /home/geshifei/linux-6.15.7/tools/sched_ext/ [roothadoop00 sched_ext]# make -j$(nproc)b编译成功后调度器在build/bin目录下。[roothadoop00 sched_ext]# /home/geshifei/linux-6.15.7/tools/sched_ext/build/bin/scx_simple local1 global0 local143 global15 local275 global24 local558 global25 ^CEXIT: unregistered from user space [roothadoop00 sched_ext]#
延伸阅读

更多相关文章

2026/11/5 1:17:31

实战指南:从入门到精通PySceneDetect视频场景分割技术

实战指南:从入门到精通PySceneDetect视频场景分割技术 【免费下载链接】PySceneDetect :movie_camera: Python and OpenCV-based scene cut/transition detection program & library. 项目地址: https://gitcode.com/GitHub_Trending/py/PySceneDetect 在…

2026/11/5 1:17:31

PySceneDetect视频智能剪辑:零基础掌握自动场景切分技术

PySceneDetect视频智能剪辑:零基础掌握自动场景切分技术 【免费下载链接】PySceneDetect :movie_camera: Python and OpenCV-based scene cut/transition detection program & library. 项目地址: https://gitcode.com/GitHub_Trending/py/PySceneDetect …

2026/11/5 1:17:31

MM32单片机IAP程序升级参考例程(包含源码协议和上位机)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 2:12:35

住房证明PDF结构化抽取:坐标锚点、批量入库与原件校验

简介:这份PDF为东莞市不动产登记权利人查询结果样张,面向需要了解住房证明开具格式、核验方式及登记查询口径的读者,可用于办理购房、贷款、户籍或材料审核前的流程熟悉与字段核对。资源包共1个PDF文件,约256KB,完整呈…

2026/11/5 2:12:35

SSM+MySQL房屋租赁系统源码部署、联调与二次开发

简介:面向计算机专业毕业设计阶段的房屋租赁系统论文文档,聚焦 SSM 框架结合 MySQL 的在线租赁平台设计与实现,适合需要选题参考、论文结构模板与技术方案梳理的本科、专科毕业生及 Java Web 入门者。全文围绕房地产租赁行业背景展开&#xf…

2026/11/5 2:12:35

微信小程序驾校预约管理系统:时段冲突与权限控制设计

简介:该资源为基于微信小程序的驾校预约管理系统毕业设计配套答辩PPT,面向计算机相关专业准备毕业设计答辩的本科生,尤其适合以小程序、信息管理系统为选题的同学。内容围绕系统首页、个人中心、学员与教练管理、驾校信息与车辆管理、教练预约…

2026/11/5 2:12:35

电力系统机组组合优化实战:GA+PSO双求解器Python工程包

简介:本资源是2021年全国大学生电工杯数学建模竞赛B题的完整解题实践包,面向数学建模初学者、电气工程专业学生及备赛本科生,聚焦电力系统优化、故障建模等典型工程问题的数学抽象与程序求解。压缩包含70个文件,主体为37个MATLAB数…

2026/11/5 2:12:35

AI项目工程化落地:从训练失败到国奖答辩的全链路框架

简介:本资源为第十七届中国计算机设计大赛人工智能挑战赛国家级二等奖获奖项目完整源码包,面向高校AI方向参赛学生、算法初学者及计算机视觉实践者,聚焦多场景智能检测任务的工程化落地。压缩包共47个文件,含15个核心Python脚本&a…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑