zampierilucas/scx_horoscope
GitHub: zampierilucas/scx_horoscope
一个基于 sched_ext 框架的功能完备但纯娱乐性质的 Linux CPU 调度器,根据真实行星位置和占星原理做出调度决策。
Stars: 1249 | Forks: 28
# scx_horoscope - 星象 CPU 调度器
一个功能完备的 sched_ext 调度器,根据实时行星位置、星座和占星原理做出真实的 CPU 调度决策。这确实会加载到 Linux 内核中并调度你的系统任务。既然宇宙能影响我们的生活,为什么不能影响我们的 CPU 调度呢?

## 功能特性
- **真实的行星计算**:使用 `astro` crate 进行精确的的地心行星位置计算
- **基于星座的任务分类**:任务根据其占星亲和力进行分类
- **逆行检测**:通过比较每日位置变化来检测真实的逆行运动 - 负面影响会触发 50% 的时间片惩罚
- **月相调度**:月相影响交互式任务(shell、编辑器),满月提供 1.4 倍加成
- **元素增益与减益**:火象星座提升 CPU 任务(1.5 倍),水象星座削弱它们(0.6 倍)—— 元素对立引发宇宙混乱
- **宇宙天气预报**:通过月相追踪,为你的系统提供实时占星指引
- **确实能用**:通过 sched_ext 加载到 Linux 内核并调度真实的系统进程
- **真实的 BPF 集成**:使用 scx_rustland_core 框架进行内核与用户空间通信
- **动态时间切片**:根据占星优先级(100-1000)调整 CPU 时间
## 占星调度规则
### 行星领域
每颗行星掌管特定类型的系统任务:
- **☀️ 太阳** (生命力):关键系统进程 (PID 1, init)
- **🌙 月亮** (情绪):交互式任务 (shell, 编辑器, 终端)
- **💬 水星** (沟通):网络和 I/O 任务
- **💖 金星** (和谐):桌面和 UI 进程
- **⚔️ 火星** (能量):CPU 密集型任务 (编译器, 视频编码)
- **🎯 木星** (扩张):内存密集型应用 (数据库, 浏览器)
- **⚙️ 土星** (结构):系统守护进程和内核线程
### 元素效果
星座元素产生元素亲和与对立:
**增益组合** (任务在相容元素下茁壮成长):
- **🔥 火** (白羊座, 狮子座, 射手座, 蛇夫座*) × CPU 任务: 1.5 倍加成
- **🌬️ 风** (双子座, 天秤座, 水瓶座) × 网络任务: 1.5 倍加成
- **🌍 土** (金牛座, 处女座, 摩羯座) × 系统任务: 1.4 倍加成
- **💧 水** (巨蟹座, 天蝎座, 双鱼座) × 内存任务: 1.3 倍加成
**减益组合** (元素对立):
- **💧 水** × CPU 任务: 0.6 倍 (水熄灭火)
- **🌍 土** × 网络任务: 0.6 倍 (土阻挡风)
- **🌬️ 风** × 系统任务: 0.7 倍 (风扰乱土的结构)
- **🔥 火** × 内存任务: 0.7 倍 (火蒸发水)
所有其他组合为中性 (1.0 倍)。
*蛇夫座 (第 13 个星座) 可通过 `--ophiuchus` 标志启用,使用 IAU 星座边界。
### 逆行效果
当行星处于逆行状态时,受其支配的任务将遭受 **50% 时间片惩罚**。逆行是通过比较每日行星位置来检测的 —— 当行星在黄道带上向后移动(黄经变化为负值)时,即为逆行。
主要逆行效果:
- **水星逆行**:网络和交互式任务受损
- **火星逆行**:CPU 任务慢如蜗牛
- **金星逆行**:UI 变得不和谐
- **注意**:太阳和月亮永远不会逆行
### 优先级公式
```
final_priority = base_priority × planetary_influence × element_boost
time_slice = min_slice + (base_slice - min_slice) × (priority / 1000)
if retrograde: time_slice × 0.5
```
**基础优先级:**
- 关键 (PID 1): 1000
- 系统任务: 200
- 交互式任务: 150
- 桌面/UI: 120
- CPU/网络: 100
- 内存: 80
**行星影响 (当行星顺行时):**
- 火象星座: 1.3 倍
- 风象星座: 1.2 倍
- 土象星座: 1.1 倍
- 水象星座: 1.0 倍
- 逆行: -1.0 (触发时间片惩罚)
## 安装
**注意:** 用户空间调度器需要 6.12 或更高版本的内核。
```
cargo build --release
```
如果你使用的是 NixOS,也可以像这样添加提供的 flake (需要 25.11+ 版本):
```
# Include this flake
inputs.scx_horoscope.url = "github:zampierilucas/scx_horoscope";
...
# Include module
outputs = { self, nixpkgs, scx_horoscope, ... }@inputs: {
nixosConfigurations.myhost = nixpkgs.lib.nixosSystem {
modules = [
scx_horoscope.nixosModules.default
];
};
};
```
然后在你的系统配置中添加:
```
services.scx_horoscope = {
enable = true;
# Add options as needed
extraArgs = [ "--cosmic-weather" ];
};
```
## 使用方法
加载到内核作为 sched_ext 调度器**需要 root 权限**。
### 运行调度器
```
# 构建
cargo build --release
# 使用 cosmic weather report 和详细输出运行
sudo target/release/scx_horoscope --cosmic-weather -v
# 使用 debug decisions 运行以查看单个任务调度
sudo target/release/scx_horoscope --debug-decisions
# 停止: 按 Ctrl+C 进行优雅关闭
```
### 命令行选项
**占星选项:**
- `-w, --cosmic-weather` - 启动时显示行星位置和占星指引
- `-d, --debug-decisions` - 实时观察宇宙做出调度决策
- `--ophiuchus` - 使用包含蛇夫座的 13 星座系统 (IAU 星座边界)
- `--no-retrograde` - 无聊模式 (禁用逆行混乱)
- `-u, --update-interval ` - 每 N 秒更新行星位置 (默认: 60)
**性能调优:**
- `-s, --slice-us ` - 基础时间片时长 (默认: 5000)
- `--slice-us-min ` - 最小时间片 (默认: 500)
- `-v, --verbose` - 显示详细统计数据
运行 `--help` 查看所有选项。
## 免责声明
此调度器 **100% 用于教育和娱乐目的**。虽然天文计算是真实的,调度器也确实能工作(它真的会加载到内核并调度任务!),但使用占星术来调度 CPU 任务是:
- 科学上存疑的
- 宇宙层面上滑稽的
- 具备完整功能的,包含真实的逆行检测和月相调度
- 不推荐用于生产系统(但它能启动并稳定运行)
- 非常适合会议演讲、黑客马拉松,并证明一切皆有可能
## 许可证
GPL-2.0-only (按照 sched_ext 要求)
## 致谢
- **Norm** 提出了这个滑稽而绝妙的按星象调度的想法
- **sched_ext** 团队提供了令人惊叹的 BPF 调度器框架
- 宇宙,提供了无尽的娱乐
*"在太空中,没人能听见你调度。"*
来自人们的评论:
- "你让它跑起来了,但代价是什么!"
标签:CPU时间片, CPU调度器, DNS解析, Hpfeeds, Linux内核, Linux工具, Rust, sched_ext, scx_rustland_core, 任务调度, 内核开发, 创意编程, 占星术, 可视化界面, 开源项目, 星座, 星象计算, 玄学编程, 端口探测, 系统优化, 系统调用, 网络流量审计, 行星位置, 趣味项目, 通知系统