2026年 Mac Mini 七乘二十四批处理公平性决策矩阵
launchd ThrottleInterval、Nice 与 IO 优先级对长任务完成率
七乘二十四混跑时,公平性不是「均分 CPU」,而是长任务在约定窗内稳定跑完、交互与哨兵不被饿死。下文给决策矩阵与参数清单:以 launchd 的 ThrottleInterval 控重入节拍,以 Nice 与低优 IO 语义削峰;并说明如何与夜间深窗叠用,在成本可控前提下少动架构。延伸阅读:时段调度与队列矩阵、切片与退避、磁盘水位 FAQ。
公平性与完成率
批处理公平性建议用两类指标验收:窗口内完成率(该跑完的长任务是否按期结束)与尾延迟(同机轻量任务是否偶发卡顿)。单机混部时,缺少节拍与优先级会把两者同时拖差;先用系统调度写清「何时可重入、对谁让路」,再调业务并发,通常比盲目加规格更省。
决策矩阵(场景 × 策略)
| 场景 | 首要杠杆 | 预期收益 | 注意 |
|---|---|---|---|
| 上游 Webhook/队列高频触发 | ThrottleInterval 与单实例互斥 | 抑制惊群、稳定完成率 | 勿与「长跑内部心跳」混淆 |
| CPU 型压缩/转码与桌面共存 | Nice 十到十五档、深窗放宽 | 保交互余量 | Nice 不替代算法内并行度上限 |
| 大文件顺序读写到系统盘 | 低优 IO plist 键或包装器内限并发 | 降 I/O 等待尾迹 | 与水位线监控联动 |
| 多 LaunchAgent 同分钟启动 | 错开 StartCalendarInterval 分钟字段 | 削峰、减锁争用 | 与上游 SLA 对齐 |
参数清单(起步区)
| 项 | 建议起步 | 验收信号 |
|---|---|---|
| ThrottleInterval | 六十到三百秒视上游抖动 | 重复启动次数下降、错误重试不升 |
| Nice | 十档;深窗可降到五档 | 交互时段 CPU 队列缩短 |
| LowPriorityIO | 批处理 Agent 置 true | 读写 P95 延迟改善 |
| ProcessType | Background(纯批场景) | 系统对前台更敏感 |
| 日历触发分散 | 同小时错开五到十五分钟 | 启动尖峰拉平 |
plist 键示例(示意)
下列片段突出与公平性相关的键;路径与 Label 请按租户命名空间自改。加载域与用户/系统守护视部署而定。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"><dict>
<key>Label</key><string>com.example.batch-fair</string>
<key>ProgramArguments</key>
<array><string>/usr/local/bin/run_batch.sh</string></array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key><integer>2</integer>
<key>Minute</key><integer>7</integer>
</dict>
<key>ThrottleInterval</key><integer>300</integer>
<key>Nice</key><integer>12</integer>
<key>LowPriorityIO</key><true/>
<key>ProcessType</key><string>Background</string>
</dict></plist>
上线后可用 launchctl print 与用户级 bootstrap/bootout 管理生命周期;与「生产/实验分区」不同 Label 并行,见 launchd 分区实践。
Nice 与 IO 优先级思路
Nice 作用于 CPU 调度顺序:批处理wrapper 用 nice -n 12 your_cmd,或在 plist 写 Nice 键,避免在子进程里再二次覆盖 unless 有意分层。IO:在 Apple 栈上优先用 plist 的 LowPriorityIO 表达「可让路」语义;若在 Linux 侧跑同源脚本,可封装 ionice -c2 -n7 一类调用作为对照思路——同一仓库用条件分支避免在 macOS 上硬调不存在命令。业务层仍应限制并行读盘块大小与临时目录共卷竞争。
与夜间窗口的关系
深窗负责「何时允许吃满」:StartCalendarInterval 把重活放进低交互概率时段;ThrottleInterval 负责「多快允许再来一轮」:二者正交。深窗内可把 Nice 回调五档、临时提高并行,但保留 ThrottleInterval,防止上游重复投递造成同一目录锁风暴。与队列矩阵中的等级表对齐,可减少口头约定。参见 七乘二十四调度矩阵。
FAQ:磁盘争用与 CPU 争用怎么分
CPU 争用:全核长时间饱和、运行队列变长,磁盘利用率仍中等——先降业务并行、升 Nice、把大段压缩挪深窗。磁盘争用:I/O wait 或存储延迟尾部分布变差、同卷多路顺序读写总吞吐顶格——先限并发读盘、开低优 IO、分散临时路径与错开日历分钟;再结合 水位 FAQ 看阈值。二者并存时先磁盘再 CPU,避免「加核」误判。
- 完成率下降且重试上升:先查是否 ThrottleInterval 过短导致部分成功被频繁重入。
- 仅尾延迟差:优先 Nice 与低优 IO,不动已成功的主路径并发。
可引用要点
- ThrottleInterval 管「多快能再被 launchd 拉起」,不是单轮计算上限。
- Nice 与低优 IO 组合,优先保障长任务窗口完成率与轻量任务尾延迟。
- 夜间深窗调并发、ThrottleInterval 保节拍,成本可控下先调参后扩容。