You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为systemd服务配置SCHED_DEADLINE调度策略?

给systemd服务配置SCHED_DEADLINE调度策略的正确方法

下面是三种可行的配置方案,覆盖不同场景和systemd版本:

方案1:用chrt直接启动服务(全版本兼容)

不用等进程启动后再修改PID,直接让chrt以SCHED_DEADLINE策略启动服务主程序,把服务配置里的ExecStart改成这样:

[Service]
# 替换成你的服务实际路径和启动参数
ExecStart=/usr/bin/chrt -d --sched-runtime 1000000 --sched-deadline 5000000 --sched-period 5000000 /usr/bin/your-service
# 修改调度策略需要权限,一般用root运行
User=root

这种方式最可靠,进程一启动就处于目标调度策略下,没有延迟,而且不管你用哪个版本的systemd都能生效。

方案2:启动后自动调整(不改动原启动命令)

如果不想修改原有的ExecStart,可以添加ExecStartPost,利用systemd自带的$MAINPID变量自动获取服务主进程ID,启动后再调整调度策略:

[Service]
ExecStart=/usr/bin/your-service
ExecStartPost=/usr/bin/chrt -d --sched-runtime 1000000 --sched-deadline 5000000 --sched-period 5000000 -p $MAINPID
User=root

注意:得确保服务运行用户有CAP_SYS_NICE权限,root用户默认就有;非root用户的话,需要给服务程序加权限:sudo setcap cap_sys_nice+ep /usr/bin/your-service

方案3:用systemd原生配置(仅适用于新版systemd)

如果你的systemd版本在246及以上(输入systemd --version即可查看),可以直接用systemd的原生参数,无需依赖chrt:

[Service]
ExecStart=/usr/bin/your-service
CPUSchedulingPolicy=deadline
# 这里用ms单位对应你原来的参数:1ms runtime、5ms deadline/period
CPUSchedulingRuntimeSec=1ms
CPUSchedulingDeadlineSec=5ms
CPUSchedulingPeriodSec=5ms
User=root

这种方式更贴合systemd的配置风格,不用额外调用外部命令。

验证生效的方法

改完配置后,先重载systemd再重启服务:

sudo systemctl daemon-reload && sudo systemctl restart your-service.service

然后用chrt -p <你的服务PID>检查,输出里应该能看到deadline调度类以及对应的runtime、deadline、period参数。

内容的提问来源于stack exchange,提问作者Trofen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 20:22:42