[devel] Сборочница V. Планировщик
Igor Vlasenko
vlasenko на imath.kiev.ua
Пн Фев 26 17:22:38 MSK 2018
Уважаемые господа!
Продолжаю цикл писем, посвященный предложениям
по улучшению нашей сборочницы.
V. Планировщик [процесс, запускающий task'и на сборку].
Я уже писал, что для повышения производительности
планировщик и мержер транзакций надо разнести в полностью отдельные
параллельно выполняемые независимые процессы.
Пусть общаются только через смену статуса task'ов.
Однако кроме этого в текущем планировщике есть и другие недостатки.
Что мне больше всего не нравится в текущем планировщике, это
как реализована для пользователя его эмуляция последовательной сборочницы.
С одной стороны, она не полная, т.е. если пользователь залил таски
T1 T2 T3, то нет гарантии, что они соберутся именно в
последователоьности T1 T2 T3. Могут и в T2 T3 T1.
С другой стороны, блокировку последовательной сборочницы планировщик
честно эмулирует: если T1 собирается, то T2 и T3 никогда не будут
отправлены на сборку, При этом, если T1 --- тяжелая транзакция,
как существенное обновление python или texlive, то такая транзакция
будет обрабатываться нашей сборочницей неделями, а то и месяцами.
Планировщик, эмулируя блокировку последовательной сборочницы,
по сути, банит пользователя на эту неделю, а то и месяц.
IMHO, так не правильно. Если есть свободные вычислитльные ноды
и AVAITING task'и, планировщик просто обязан помочь найти
им друг друга. Ведь сборочница не должна простаивать?
А проблема балансировки нагрузки решается, например,
приоритетами. Чем больше у пользователя запущенных task'ов,
тем ниже его приоритет у планировщика при запуске нового task'а.
Далее, раз эмуляция последовательной сборочницы востребована,
я предлагаю сделать для нее улучшения в интерфейсе пользователя
(syntax sugar).
К примеру, сейчас работа с task deps достаточно громоздка.
Облегчить работу могла бы опция --after.
Опция --after "<task id1>,<task id2>,...,<task idN>"
в ssh girar build/run позволит быстро выставить task deps.
Для тех, кому task deps слишком сложны в обслуживании,
можно реализовать полноценную эмуляцию последовательной сборочницы.
добавить в ssh girar build/run опцию --seq[uential].
Эта опция внутри будет выставлять task'у опцию sequential,
а планировщик будет запускать task с опцией sequential
только тогда, когда все таски с меньшими номерами либо DONE,
либо FAILED. --- очень легко в реализации, и гораздо
лучше, чем сейчас.
--
I V
Подробная информация о списке рассылки Devel