[ Content contribution] 再更新一版cpu调度优化工具,主要优化日志和系统健康度检查
Tofloor
poster avatar
fslong
deepin
2025-11-03 13:01
Author

CPU 调度优化工具

简介

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

image.png

工作原理

  1. 定期监控CPU频率(默认每5秒检查一次)
  2. 当检测到CPU频率持续高于设定阈值(默认80%)并持续一定时间(默认10秒)时,自动降低CPU频率上限(默认降低到75%)
  3. 当系统负载降低并持续一定时间(默认60秒)时,自动恢复CPU频率上限
  4. 同时监控系统IO负载,在高IO负载时也会触发相应的降频策略

CPU频率监控与调节

  • 实时监控CPU最高频率百分比(相对于硬件最大频率)
  • 当CPU频率超过设定阈值并持续一定时间时自动降频
  • 当系统进入低频率状态并持续一定时间时自动恢复频率
  • 更快地响应持续高频率情况,提升系统稳定性

系统健康检查

  • 定期检查系统整体健康状况(默认每30秒检查一次)
  • 监控系统负载和IO使用率,用于状态记录与告警
  • 系统负载过高阈值:200%(相对于CPU核心数的负载)
  • IO使用率过高阈值:95%
  • 根据不同条件触发不同级别的降频措施:
    • 系统负载和IO使用率同时过高时,触发紧急降频措施(降频到40%)
    • 仅系统负载过高时,降频到60%
    • 仅IO使用率过高时,降频到70%
  • 此检查用于识别系统异常状态并采取相应调控措施

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频率监控相关消息使用"CPU频率"术语
    • 系统健康检查相关消息使用"系统负载"术语
    • 避免混淆不同监控机制

文件说明

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

更新日志

[2025-11-03]

  1. 优化系统健康检查日志消息,准确区分CPU频率监控和系统负载监控
  2. 修复CPU负载判断阈值,使用更合理的固定百分比而非与核心数相关的动态值
  3. 更新文档说明,明确区分不同监控机制的职责和术语使用
  4. 增强系统健康检查机制,使其在单一资源异常时也能触发相应降频措施
  5. 修复代码中的标点符号问题,统一使用英文标点符号

[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 <秒>:

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

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

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

时间控制参数

  • -s, --sustained <秒>:

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

    • CPU低频率持续时间阈值,超过此时长才触发升频
    • 默认: 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

下载

atomgit:cpu-scheduler

deepin论坛:cpu-scheduler.zip

Reply Favorite View the author
All Replies
MeGusta
deepin
2025-11-03 18:44
#1

我的Intel Ultra5 125H小主机在UOSv20系统下无法降频,如果不处理,外壳温度快45度。在安装了deepin的最新intel-mircocode,和用你的工具控制频率之后,温度就降下来了,非常好。

Reply View the author
fslong
deepin
2025-11-03 22:05
#2
MeGusta

我的Intel Ultra5 125H小主机在UOSv20系统下无法降频,如果不处理,外壳温度快45度。在安装了deepin的最新intel-mircocode,和用你的工具控制频率之后,温度就降下来了,非常好。

这cpu要是不降频很可能要遭,硬件损伤。

另外如果配合我的6.17.5内核食用,可能更香。

Reply View the author
鲜衣怒马
deepin
2025-11-03 23:48
#3

围观,agree

Reply View the author
星辰大海的种花家
deepin
2025-11-03 23:57
#4

感谢大神奉献。希望内核能更优化功耗就好了!

Reply View the author
MeGusta
deepin
2025-11-04 08:15
#5
fslong

这cpu要是不降频很可能要遭,硬件损伤。

另外如果配合我的6.17.5内核食用,可能更香。

适用于uos的新内核,可以在哪里获取?

Reply View the author