ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Igor Vlasenko <vlasenko@imath.kiev.ua>
To: devel@lists.altlinux.org
Subject: [devel] Сборочница. VII. Алгоритмы ускорения сборки Больших Транзакций.
Date: Sat, 3 Mar 2018 15:02:30 +0200
Message-ID: <20180303130229.GA15075@dad.imath.kiev.ua> (raw)

Уважаемые господа!

Продолжаю цикл писем, посвященный предложениям по улучшению
нашей сборочницы.

VII. Алгоритмы ускорения сборки Больших Транзакций.

Большие транзакции естественно возникают при обновлении
многих языковых экосистем. У нас на слуху perl и python,
сейчас добавился texlive, но это только потому, что они
хорошо представлены в Сизифе и регулярно обновляются.

На самом деле это типичная проблема. Просто ранее 
большинство языковых экосистем у нас были представлены
только базовым компилятором или интерпретатором и ограниченным набором
основных библиотек. На самом деле такая ситуация не очень
хороша. Это как дать пользователю базовую систему
(ядро+shell+cc) и сказать, а дальше собирайте сами.
Тем не менее, большинство предпочтет полноценный дистрибутив.
Но сейчас ALTLinux вырастает из детских штанишек,
и у него растут требования к поддержке, в. т. ч.
различных языковых экосистем.
Поэтому Большие Транзакции (как пересборка питона с 3000+ пакетов)
все чаще и чаще посещают нашу сборочницу.

К сожалению, наша сборочница к ним не готова.
30 суток на обработку питона или 10 суток на обработку texlive
нельзя назвать адекватным ответом задаче.

В прошлых письмах я описывал алгоритмы работы параллельной
сборочницы. Эти алгоритмы решают проблему, как быстро собрать
большое число транзакций параллельно. Однако эти алгоритмы
не влияют на скорость сборки каждой отдельной транзакции.

Однако в параллельной сборочнице сборку Больших Транзакций
тоже можно ускорить. Но в данном случае автоматические
алгоритмы предлагаю использовать в сочетании со специальной
разметкой пакетов транзакции человеком.

Именно, часть subtask'ов в task'е надо пометить как синхронные.

Синхронный subtask означает, что, пока синхронный subtask и
все ему предыдущие не собраны, параллельная сборочница не пытается
собрать subtask'и, следующие за синхронным.

К примеру, при обновлении perl я помечу самый первый subtask в
транзакции, perl, как синхронный.
Все остальные subtask'и в обновлении perl я помечать (как синхронный)
не буду, пусть сборочница пытается их собрать параллельно.

Для полноты опишу алгоритм.
У транзакции есть пул собранных пакетов, в начале пустой.
Субтаски могут иметь флаг "синхронный",
а внутри состояния "ожидает", "собирается", "собран", "ошибка сборки",
"в пуле" (собранные пакеты добавлены в пул).
есть указатель головы сборки.

Начиная с головы, субтаски ставятся в параллельную сборку с текущим
пулом по порядку номеров в числе имеющихся параллельных потоков
сборки, но лишь до тех пор, пока не встретится "синхронный"
или "ошибка сборки" субтаск.
Если первый же субтаск, на который указывает текущий указатель,
"синхронный" или "ошибка сборки", он единственный отправляется
на сборку, неудача сборки делает всю транзакцию FAILED.
Собранные субтаски добавляются в пул, указатель инкрементируется.
(есть тонкости как реализовывать, синхронно проще, асинхронно быстрее).

Алгоритм прост, небольшая дополнительная сложность пользователю,
что нужно еще разметить транзакцию и запустить не как по умолчанию,
а со специальной опцией --parallelize.

Зато вместо 10 суток результат будет через 10 часов.


-- 

I V


             reply	other threads:[~2018-03-03 13:02 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-03 13:02 Igor Vlasenko [this message]
2018-03-05  4:14 ` Андрей Бергман
2018-03-05 12:57   ` Igor Vlasenko
2018-03-05 13:12     ` Anton Farygin
2018-03-05 13:14       ` Anton Farygin
2018-03-10  4:32         ` Андрей Бергман
2018-03-11  8:20           ` Anton Farygin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180303130229.GA15075@dad.imath.kiev.ua \
    --to=vlasenko@imath.kiev.ua \
    --cc=devel@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git