Virtual Aware Scheduler
本项目已在 openEuler 社区开源, 欢迎贡献与使用!
📍简介
Virtual Aware Scheduler(简称VSched)是基于鲲鹏cpu拓扑的虚拟化调度调优服务. 鲲鹏cpu拓扑层级为numa->cluster->core->cpu(smp), VSched旨在尽量减少范围绑核的虚拟机跨cluster, 以及vCPU线程在cpu间的抖动漂移, 从而提高LLC cache命中率, 减少vCPU无意义迁移的性能开销.
📌 快速开始
环境要求
- 操作系统:推荐 openEuler 24.03 LTS SP2或更高版本
- 编译工具链:CMake ≥ 3.22, GCC ≥ 9.3
- 依赖库:详见 构建指导文档
获取源码
git clone https://gitcode.com/openeuler/ubs-virt
cd virt-awaresched
构建项目
-
默认 Release 构建 RPM 包(生产环境编译)
bash build.sh package -
使用 Debug 构建 RPM 包(包含Debug信息)
bash build.sh -D package
构建产物位于 cmake-build-* 目录下, RPM 包输出至 output/目录。
🧩 核心特性
- 采集虚拟机, CPU拓扑信息
采集虚拟机信息并监听虚拟机生命周期事件, 同时采集CPU拓扑信息, 用于虚拟机vCPU调度。 - CPU分配与整理
VSched基于cluster拓扑在虚拟机绑核范围内为vCPU分配一个合适的CPU, 尽可能减少虚拟机跨cluster使用虚拟机. 在虚拟机销毁时, 回收CPU并整理CPU碎片。 - 支持静态/动态两种绑核模式
VSched为vCPU线程绑核, 支持静态绑核与动态绑核两种:- 静态绑核下, vCPU将使用指定的CPU。
- 动态绑核下, vCPU将使用一个优选核, 当优选核CPU使用率高于阈值后, vCPU将使用绑定范围中性能更好的CPU上. 动态绑核需要内核支持潮汐亲和特性。
- 支持CLI用户指令
VSched提供给管理员运维指令, 方便进行vCPU绑定信息查询, 修改配置, 手动重调度。
📂 项目结构概览
virt-awaresched
├── 3rdparty # 依赖二方/三方件
├── cmake # cmake工具封装
├── docs # 文档
├── scripts # 开发使用脚本
│ └── ut_coverage
├── src # 源码目录
│ ├── cli # cli框架
│ ├── include # 头文件目录
│ ├── libvirt_module # libvirt动态加载
│ ├── log # 日志模块
│ ├── util # 工具方法
│ ├── vasctl # vasctl
│ │ └── arg_parse # 二进制指令解析
│ └── vasd # vas-daemon
│ ├── acquire # 信息采集
│ ├── api # api接口
│ ├── arg_parse # 二进制指令解析
│ ├── cluster_sched # 调度模块
│ ├── conf # 配置文件
│ ├── looper # 主循环
│ └── security # 安全模块
└── test # 测试目录
🧪 开发者测试
项目包含完整的单元测试(UT)。
-
仅运行UT
bash build.sh test -
运行特定测试用例
bash build.sh test -- --gtest_filter="TestClusterSched.*" -
生成代码覆盖率报告
# 报告将生成与./coverage目录下 bash build.sh test -C
测试开发指南见 单元测试开发指南。
📚 文档索引
所有技术文档位于 docs/ 目录, 包括:
🤝 参与贡献
我们欢迎社区开发者提交 Issue、PR 或参与讨论!
请先阅读 贡献指南,并遵守 openEuler 社区行为准则。
📄 许可证
本项目采用 Mulan PSL v2 开源许可证。