Preemption (предварительное вытеснение) — это механизм, позволяющий приоритетным задачам вытеснять менее приоритетные, если в кластере не хватает ресурсов.


📦 Для чего нужна preemption:

  • Поддержка SLA для VIP-пользователей или срочных задач

  • Реализация QoS (Quality of Service) уровней

  • Балансировка кластера под многопользовательскую нагрузку


⚙️ Как работает preemption

  1. Пользователь запускает задачу с высоким приоритетом или QoS=premium

  2. Кластер занят — задача не может стартовать

  3. Планировщик находит низкоприоритетные задачи, которые можно приостановить или отменить

  4. Освобождает ресурсы → запускает приоритетную задачу


💡 Типы preemption-стратегий:

СтратегияПоведение
CANCELНизкоприоритетная задача отменяется полностью
SUSPENDЗадача приостанавливается и позже может быть возобновлена
REQUEUEЗадача останавливается и возвращается в очередь
GANGВытесняются все задачи пользователя или группы целиком

🛠 Настройка preemption через QoS

  1. Включи AccountingStorageEnforce=limits,qos в slurm.conf

  2. Создай QoS с preemption:

sacctmgr add qos lowpri preempt=NONE
sacctmgr add qos highpri preempt=lowpri
 

highpri может вытеснять lowpri

  1. Присвой QoS пользователям/группам:
sacctmgr modify user alice set qos=highpri
sacctmgr modify user bob set qos=lowpri
  1. В задании пользователь указывает:
sbatch --qos=highpri job.sh
 

🔄 Что видит пользователь:

  • Вытеснённые задачи получат статус CANCELLED, SUSPENDED, или REQUEUED

  • В логах будет видно причину (Preempted by job 12345)

  • Могут быть уведомления по email, если настроено