Preemption (предварительное вытеснение) — это механизм, позволяющий приоритетным задачам вытеснять менее приоритетные, если в кластере не хватает ресурсов.
📦 Для чего нужна preemption:
-
Поддержка SLA для VIP-пользователей или срочных задач
-
Реализация QoS (Quality of Service) уровней
-
Балансировка кластера под многопользовательскую нагрузку
⚙️ Как работает preemption
-
Пользователь запускает задачу с высоким приоритетом или
QoS=premium
-
Кластер занят — задача не может стартовать
-
Планировщик находит низкоприоритетные задачи, которые можно приостановить или отменить
-
Освобождает ресурсы → запускает приоритетную задачу
💡 Типы preemption-стратегий:
Стратегия | Поведение |
---|---|
CANCEL | Низкоприоритетная задача отменяется полностью |
SUSPEND | Задача приостанавливается и позже может быть возобновлена |
REQUEUE | Задача останавливается и возвращается в очередь |
GANG | Вытесняются все задачи пользователя или группы целиком |
🛠 Настройка preemption через QoS
-
Включи
AccountingStorageEnforce=limits,qos
вslurm.conf
-
Создай QoS с preemption:
sacctmgr add qos lowpri preempt=NONE
sacctmgr add qos highpri preempt=lowpri
highpri может вытеснять lowpri
- Присвой QoS пользователям/группам:
sacctmgr modify user alice set qos=highpri
sacctmgr modify user bob set qos=lowpri
- В задании пользователь указывает:
sbatch --qos=highpri job.sh
🔄 Что видит пользователь:
-
Вытеснённые задачи получат статус
CANCELLED
,SUSPENDED
, илиREQUEUED
-
В логах будет видно причину (
Preempted by job 12345
) -
Могут быть уведомления по email, если настроено