[ Content contribution] 再更新一版cpu动态调度
Tofloor
poster avatar
fslong
deepin
2025-10-30 14:54
Author

本程序用于一些老旧散热不好的设备动态控制cpu最高主频,减少长时间处于高负载造成的死机和不稳定性。

CPU 调度优化工具

简介

CPU调度优化工具是一套用于动态调整CPU频率的脚本和服务,旨在解决系统在高负载下长时间睿频导致的不稳定问题(如磁盘掉电等)。该工具通过监控系统负载,在持续高负载时自动降低CPU频率上限,以减少功耗和热量产生,提高系统稳定性。

工作原理

  1. 定期监控系统负载(默认每10秒检查一次)
  2. 当检测到任意CPU核心持续高负载(默认80%以上持续1分钟)时,自动降低CPU频率上限(默认降低到75%)
  3. 当系统进入持续低负载状态(默认40%以下持续1分钟)时,自动恢复CPU频率上限

CPU负载监控与调节

  • 实时监控任意CPU核心的负载情况(使用/proc/stat)
  • 当任意CPU核心负载超过设定阈值并持续一定时间时自动降频
  • 当系统负载降低并持续一定时间时自动恢复频率
  • 更快地响应单核高负载情况,提升系统稳定性

IO负载监控

  • 实时监控系统IO负载(使用iostat)
  • 根据设备类型设置不同阈值:
    • SATA设备
      • 4K随机读阈值:10 MB/s
      • 4K随机写阈值:8 MB/s
      • 使用率阈值:70%
    • NVMe设备
      • 4K随机读阈值:40 MB/s
      • 4K随机写阈值:36 MB/s
      • 使用率阈值:85%
  • 触发条件(任一满足即触发):
    • 使用率超过阈值
    • 4K随机读写速度超过阈值
    • 持续时间达到设定值
  • 降频策略:
    • 70-80% IO负载持续10秒 → 降频到75%
    • 80-90% IO负载持续5秒 → 降频到60%
    • 超过90% IO负载 → 立即降频到50%

日志管理

  • 自动轮转日志文件(默认保留5个,每个最大5MB)
  • 关键错误时记录完整系统状态(CPU、内存、IO)

文件说明

  • cpu_scheduler.sh: 主要的CPU调度优化脚本
  • cpu-scheduler.service: systemd服务配置文件
  • install_service.sh: 安装服务的脚本
  • uninstall_service.sh: 卸载服务的脚本
  • io_stress_test.sh: IO压力测试脚本
  • README.md: 说明文档

更新日志

[2025-10-30]

  1. 修改CPU负载判断逻辑,使用任意CPU核心的负载代替平均负载
  2. 优化单核高负载场景下的频率调控响应速度

[2025-10-14]

  1. 新增IO负载监控功能
  2. 优化日志轮转机制(自动保留最多5个日志文件,每个最大5MB)
  3. 增强系统健康检查,在高IO负载时自动降频
  4. 改进安装脚本,确保配置文件正确安装
  5. 更新卸载脚本,完全清理所有相关文件

[2025-09-01]

  • 初始版本发布

使用方法

获取帮助信息

# 查看完整帮助
sudo ./cpu_scheduler.sh --help

# 查看服务状态
sudo systemctl status cpu-scheduler.service

# 查看服务日志
sudo journalctl -u cpu-scheduler.service

动态调整服务参数

服务运行时可以通过以下命令动态调整参数(不会修改配置文件):

# 调整多个参数
sudo systemctl reload cpu-scheduler.service interval=3 high=85 low=35 sustained-high=8 sustained-low=45

# 调整单个参数
sudo systemctl reload cpu-scheduler.service interval=2

# 查看当前参数设置
sudo journalctl -u cpu-scheduler.service | grep "当前参数"

直接运行脚本

# 以默认参数运行(需要root权限)
sudo ./cpu_scheduler.sh --help  # 先查看帮助
sudo ./cpu_scheduler.sh

# 自定义参数运行
sudo ./cpu_scheduler.sh -i 60 -h 75 -s 120 -r 10

# 服务运行时动态调整参数
sudo systemctl reload cpu-scheduler.service interval=3 high=85 low=35

参数详细说明

核心调节参数

  • -i, --interval <秒>:

    • 检查系统负载的时间间隔
    • 默认: 5秒
    • 建议范围: 1-10秒 (太短会增加系统负担,太长会降低响应速度)
  • -h, --high-threshold <百分比>:

    • 触发降频的CPU使用率阈值
    • 默认: 80%
    • 建议范围: 70-90% (根据系统散热能力调整)
  • -l, --low-threshold <百分比>:

    • 触发升频的CPU使用率阈值
    • 默认: 30%
    • 建议范围: 20-50% (低于高阈值至少20个百分点)

时间控制参数

  • -s, --sustained <秒>:

    • 高负载持续时间阈值,超过此时长才触发降频
    • 默认: 10秒
    • 建议: 5-30秒 (避免短暂峰值误触发)
  • --sustained-low <秒>:

    • 低负载持续时间阈值,超过此时长才触发升频
    • 默认: 60秒
    • 建议: 30-120秒 (保持降频效果足够时间)

频率调整参数

  • -r, --reduction <百分比>:

    • 降频幅度(相对于最大频率)
    • 默认: 25%
    • 建议: 10-40% (过大降幅可能影响性能)
  • -n, --increase <百分比>:

    • 升频幅度(相对于当前频率)
    • 默认: 25%
    • 建议: 10-30% (平稳恢复频率)

其他参数

  • -f, --log-file <文件>:

    • 日志文件路径
    • 默认: /var/log/cpu-scheduler.log
    • 需要确保有写入权限
  • MAX_LOG_SIZE_MB:

    • 最大日志文件大小(MB)
    • 默认: 5MB
    • 建议: 5-20MB (根据磁盘空间调整)
  • MAX_LOG_FILES:

    • 保留的日志文件数量
    • 默认: 5个
    • 建议: 3-10个

安装为系统服务

# 安装为系统服务(开机自启)
sudo ./install_service.sh

# 启动服务
sudo systemctl start cpu-scheduler.service

# 查看服务状态
sudo systemctl status cpu-scheduler.service

# 停止服务
sudo systemctl stop cpu-scheduler.service

# 禁用服务(取消开机自启)
sudo systemctl disable cpu-scheduler.service

卸载服务

# 卸载服务及相关文件
sudo ./uninstall_service.sh

日志查看

# 查看服务日志
sudo journalctl -u cpu-scheduler.service

# 查看日志文件(如果使用脚本直接运行)
cat /var/log/cpu-scheduler.log

注意事项

  1. 所有操作都需要root权限
  2. 该工具仅适用于支持CPU频率调节的系统
  3. 频率调整仅影响CPU的最大频率限制,不影响其他CPU调度策略
  4. 服务安装后会将脚本复制到系统目录 /opt/ohmylinux/cpu-scheduler/
  5. 如果更新了脚本,需要重新运行安装脚本以使更改生效

故障排除

服务无法启动

检查日志以获取详细信息:

sudo journalctl -u cpu-scheduler.service

CPU频率未按预期调整

  1. 确认系统支持CPU频率调节:

    ls /sys/devices/system/cpu/cpu0/cpufreq/
    
  2. 检查是否有其他程序正在控制CPU频率

负载检测不准确

可以手动检查系统负载:

uptime

点击下载脚本cpu-scheduler.zip

Reply Favorite View the author
All Replies
Misaka
deepin
2025-10-30 17:21
#1

like

Reply View the author
jfshen
deepin
2025-10-31 16:46
#2

请问下,参数设置完成保存并应用后,这个“CU频率调节器v1.2.29"的窗口是要一直开着还是可以关了?

Reply View the author
fslong
deepin
2025-11-02 08:44
#3
jfshen

请问下,参数设置完成保存并应用后,这个“CU频率调节器v1.2.29"的窗口是要一直开着还是可以关了?

???我这个是个服务哎,安装完了就直接安装到系统里,后台生效了

Reply View the author
jfshen
deepin
2025-11-03 09:33
#4
fslong

???我这个是个服务哎,安装完了就直接安装到系统里,后台生效了

感谢哈,挺好用!

Reply View the author