[devel] IХ. Алгоритмы работы сборочницы. O commit. ч.1

Igor Vlasenko vlasenko на imath.kiev.ua
Вт Апр 2 22:32:08 MSK 2019


On Sun, Mar 24, 2019 at 12:50:18AM +0300, Dmitry V. Levin wrote:
> On Sat, Mar 23, 2019 at 12:17:19PM +0200, Igor Vlasenko wrote:
> [...]
> > Что делает сборочница? Она хватает и пересобирает случайную
> > парочку пакетов из очереди, которым не повезло оказаться в
> > очереди именно в этот момент. Остальные сотни других пакетов
> > в Сизифе так и остаются собранными со старой libfoo.
> > 
> > Не абсурд ли это?
> 
> Это абсурд: сборочница ничего не хватает и ничего случайно не пересобирает.

Гм. я, действительно, иногда сдабриваю свои письма
просторечием и эмоциональностью. В научной статье такое было
бы недопустимо. Но ведь это рассылка, я надеялся,
что немного эмоций оживит чтение.
Прошу прощения, если это напрягает.

То же самое могу сказать другими словами.
Во время своей работы сборочница может подвергать
дополнительной пересборке уже собранные пакеты.
[вместо "хватает и пересобирает"]

С одной стороны, такая пересборка может быть
вызвана объективной необходимостью -
непрохождением проверок на целостность
(unmets и т.д.). С другой стороны, большинство
пакетов отправляются на пересборку по критерию,
что их сборочное окружение изменилось.
При чем из всего множества пакетов, которые должны
были быть пересобраны согласно использованному
критерию, пересборке подвергаются только
пакеты, которые были в этот момент в очереди на commit.
Это подмножество не детерминировано
критерием, и формируется случайным образом.

Добавление этой пересборки в логику работы сборочницы
не достигло заявленных целей, но
привело к замедлению сборочницы на порядки
из-за фактической сериализации ее работы.

Другими, более простыми словами,
для попадания пакета в Сизиф, не для test-only,
сборочница фактически собирает пакеты последовательно,
один за одним. Многоядерность помогает изредка,
в основном, на этапе компиляции. Многонодность
не помогает почти совсем, разве разгружает test-only.

При этом очередь перегружена,
а сборочный кластер простаивает.
Такая сборочница тормозит, не масштабируется,
и не эффективно использует железо.

-- 

I V


Подробная информация о списке рассылки Devel