4. 批处理调度基础
仿真计算集群的任务通常以批处理作业的形式提交:用户把作业脚本、资源需求(核数、内存、时长)和优先级一起交给调度器,调度器在资源空闲时决定“下一个跑谁”。这个决定看似简单,却直接决定了集群吞吐、作业平均等待时间以及不同用户之间的公平感。本节围绕四种最基础的调度策略展开:FIFO、优先级队列、回填调度和公平共享,并说明它们在仿真集群中的实际表现。
一、FIFO:先来先服务
FIFO(First In First Out)是最直观的策略:作业按提交时间排队,队首作业优先获得资源。它的优点是实现简单、无饥饿、等待时间可预期,用户不会因为“别人插队”而反复被推迟。缺点也很明显——队头阻塞。假设集群有 64 个核,队首作业需要 64 核、运行 8 小时,而它后面排着 20 个只需 4 核、运行 10 分钟的短作业。FIFO 会让这 20 个短作业全部等待 8 小时,集群利用率在大部分时间里被浪费在“等一个大队列头”上。
在仿真集群中,FIFO 适合作业规模相近、时长差异不大的场景,例如同一课题组批量提交的参数扫描作业。一旦出现“大作业 + 大量小作业”混合,FIFO 的吞吐劣势就会迅速暴露。
二、优先级队列:让重要作业先跑
优先级队列为每个作业赋予一个优先级数值,调度器总是从最高优先级队列中取作业。优先级可以来自用户等级、项目紧急程度、作业类型(如交互式调试 vs 批量生产),也可以由管理员手工调整。它的核心价值是可控的服务分级:关键仿真任务不必排在无关作业后面。
但优先级队列有两个必须处理的问题。第一是饥饿:如果高优先级作业源源不断,低优先级作业可能永远得不到执行。常见对策是“老化”(aging)——作业每等待一段时间就提升一级优先级。第二是优先级反转:低优先级作业占着资源不放,高优先级作业反而要等它释放。在批处理场景中,这通常通过限制单作业最大运行时长来缓解。
三、回填调度:在等待中塞进短作业
回填(Backfill)是批处理调度中最具工程价值的改进。它的基本思想是:当队首作业因为资源不足而无法启动时,允许后面的小作业“跳过”它先运行,前提是不推迟队首作业的预计启动时间。这样既保留了 FIFO 的公平性,又显著提升了资源利用率。
回填通常需要两个输入:队首作业的预计开始时间(由当前占用资源的作业释放时间推算)和候选作业的资源需求与运行时长。只有那些能在“预计开始时间”之前完成的作业才被允许回填。以 Slurm 为例,其回填调度器会结合 scontrol show job 中的 StartTime 估算值来判断。一个典型的回填判断可以写成:
队首作业 J0:需 64 核,预计 14:00 启动
候选作业 J1:需 8 核,时长 30 分钟
当前空闲:16 核,14:00 前无新释放
判断:J1 可在 13:30 前完成 → 允许回填
候选作业 J2:需 16 核,时长 90 分钟
判断:J2 会占用到 14:30,推迟 J0 → 不允许回填
回填的收益在小作业占比高的仿真集群中非常明显:短作业的等待时间可以从数小时降到数分钟,而大队列头作业的启动时间几乎不变。代价是调度器需要维护更准确的时长估计,如果用户虚报时长,回填判断会失真。
四、公平共享:按份额分配资源
公平共享(Fair Share)不追求“谁先来谁先跑”,而是追求长期资源分配比例与用户或项目的份额相符。常见实现是 Slurm 的 Fairshare 和 SGE 的 share tree。其核心是给每个账户计算一个“公平份额因子”:已使用资源越多,因子越低,优先级越低;反之则越高。这样,一个长期占用大量资源的用户,其新作业的优先级会自动下降,从而给其他用户让出空间。
公平共享通常与优先级队列结合使用:优先级分数 = 公平份额因子 + 作业优先级 + 老化因子。在仿真集群中,公平共享特别适合多课题组共享同一套计算资源的场景,能避免“一个用户用脚本刷满队列”导致其他人无法提交。
五、在仿真集群中的实际表现与选择建议
把四种策略放到真实仿真集群中,可以看到它们各自解决不同层面的问题。FIFO 是基线,适合作业同质的场景;优先级队列解决“重要作业不能等”的问题,但必须配合老化机制;回填调度解决“资源空转”的问题,是提升吞吐最直接的手段;公平共享解决“多用户长期争抢”的问题,是共享集群的稳定器。
实际部署中,这四种策略往往不是互斥的,而是组合使用。以 Slurm 为例,一个典型配置是:队列按优先级划分,调度器启用回填,同时开启 Fairshare 计算账户份额。这样,高优先级作业能快速启动,短作业能通过回填填补空隙,长期占用资源的用户会被自动降权。管理员需要重点关注的指标包括:作业平均等待时间、队列长度、回填命中率、各账户资源占比。如果发现某用户长期占用超过其份额,应检查 Fairshare 权重配置;如果发现短作业等待时间仍然很长,应检查回填是否被时长估计不准所限制。
理解这四种策略的原理与边界,是后续学习更复杂调度器(如支持预留、抢占、拓扑感知的调度)的基础。在仿真集群中,没有“最好”的策略,只有与作业特征和共享模式最匹配的组合。