Summary: | Re-linking during %install | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | Ivan A. Melnikov <iv> |
Component: | samba | Assignee: | Evgeny Sinelnikov <sin> |
Status: | NEW --- | QA Contact: | qa-sisyphus |
Severity: | minor | ||
Priority: | P5 | CC: | sin |
Version: | unstable | ||
Hardware: | all | ||
OS: | Linux |
Description
Ivan A. Melnikov
2021-09-20 10:50:52 MSK
> Это не только концептуально нехорошо, но и, в связи с LTO, в последнее время очень сильно увеличивает время сборки.
Небольшая иллюстрация. Как я понял, начиная с 4.14.7 апстрим включил LTO сам, и от этого время сборки выросло примерно в 2.5 раза:
x86_64:
#279733/100 samba.git 4.14.6-alt1: 30m32s
#283654/100 samba.git 4.14.6-alt1: 1h17m58s
mipsel:
#67841/100 samba-4.14.6-alt1.src.rpm: 2h52m21s
#70377/100 samba-4.14.7-alt1.src.rpm: 7h49m04s
Ещё одня небольшая иллюстация. Обратите внимание на timestamp'ы в последней на сегодня сборке samba: http://git.altlinux.org/tasks/archive/done/_277/284376/build/100/x86_64/log [00:00:06] Building target platforms: x86_64 [...] [00:00:10] Executing(%prep): /bin/sh -e /usr/src/tmp/rpm-tmp.82376 [...] [00:00:11] + exit 0 [00:00:11] Executing(%build): /bin/sh -e /usr/src/tmp/rpm-tmp.1230 [...] [00:11:25] + exit 0 [00:11:26] Executing(%install): /bin/sh -e /usr/src/tmp/rpm-tmp.29524 [...] [01:00:51] + exit 0 [01:00:51] Finding Provides (using /usr/lib/rpm/find-provides) [...] [01:13:52] 6073.87user 1058.42system 1:13:43elapsed 161%CPU (0avgtext+0avgdata 1515000maxresident)k [01:13:52] 0inputs+0outputs (0major+267632404minor)pagefaults 0swaps То есть, %build занял чуть больше 11 минут, а %install -- чуть меньше 50. Это и понятно, учитывая, что make install работает в один поток. Так что если не получится победить регенерацию некоторых исходников (VERSION, build_options.c, dynconfig.c), можно будет хотя бы распараллелить make install, и это как-то улучшит ситуацию. А начал я всё это потому, что samba 4.14.7 на riscv64 собирается 11h55m10s. После небольшого патча на спек удалось увидеть коммандную строку компилятора. dynconfig.c в первый раз собирается с очень интересными DEFINE'ами. Вот, например, diff для не-heimdal (да, на локалхосте без hasher'а, но думаю всё равно репрезентативно): - '-DBINDIR="/tmp/.private/iv/RPM/BUILD/samba-4.14.7/bin"' - '-DSBINDIR="/tmp/.private/iv/RPM/BUILD/samba-4.14.7/bin"' + '-DBINDIR="/usr/bin"' + '-DSBINDIR="/usr/sbin"' - '-DPYTHONDIR="/tmp/.private/iv/RPM/BUILD/samba-4.14.7/bin/python"' - '-DPYTHONARCHDIR="/tmp/.private/iv/RPM/BUILD/samba-4.14.7/bin/python"' + '-DPYTHONDIR="/usr/lib/python3/site-packages"' + '-DPYTHONARCHDIR="/usr/lib64/python3/site-packages"' - '-DSCRIPTSBINDIR="/tmp/.private/iv/RPM/BUILD/samba-4.14.7/source4/scripting/bin"' - '-DSETUPDIR="/tmp/.private/iv/RPM/BUILD/samba-4.14.7/source4/setup"' + '-DSCRIPTSBINDIR="/usr/sbin"' + '-DSETUPDIR="/usr/share/samba/setup"' - '-DCODEPAGEDIR="/tmp/.private/iv/RPM/BUILD/samba-4.14.7/codepages"' + '-DCODEPAGEDIR="/usr/share/samba/codepages"' - '-DMODULESDIR="/tmp/.private/iv/RPM/BUILD/samba-4.14.7/bin/modules"' + '-DMODULESDIR="/usr/lib64/samba"' (In reply to Ivan A. Melnikov from comment #4) > После небольшого патча на спек удалось увидеть коммандную строку > компилятора. dynconfig.c в первый раз собирается с очень интересными > DEFINE'ами. И сделано это специально, чтобы samba работала из каталога, в котором только что собралась -- см. dynconfig_cflags: http://git.altlinux.org/gears/s/samba.git?p=samba.git;a=blob;f=dynconfig/wscript;h=f455699f06291bc14352b485d68c62b171fa9082#l382 (In reply to Ivan A. Melnikov from comment #5) > И сделано это специально, чтобы samba работала из каталога, в котором только > что собралась -- см. dynconfig_cflags: Отрывание четырёх строчек помогает от пересборки dynconfig.c --- a/dynconfig/wscript +++ b/dynconfig/wscript @@ -389,4 +388,0 @@ def dynconfig_cflags(bld, list=None): - if not bld.is_install: - override = get_override(bld) - if varname in override: - value = os.path.join(bld.env.srcdir, override[varname]) Однако VERSION всё равно генерируется и собирается каждый раз заново, и с ней всё как-то совсем печально (см. buildtools/wafsamba/samba_patterns.py). > Так что если не получится победить регенерацию некоторых исходников (VERSION, > build_options.c, dynconfig.c), можно будет хотя бы распараллелить make > install, и это как-то улучшит ситуацию. Я решил попробовать этот консервативный вариант. Вот как-то так: http://git.altlinux.org/tasks/285522/build/100/x86_64/log [00:00:06] Building target platforms: x86_64 [...] [00:00:11] Executing(%prep): /bin/sh -e /usr/src/tmp/rpm-tmp.24622 [...] [00:11:08] + exit 0 [00:11:08] Executing(%install): /bin/sh -e /usr/src/tmp/rpm-tmp.2757 [...] [00:21:09] + exit 0 [00:21:09] Finding Provides (using /usr/lib/rpm/find-provides) [...] [00:36:53] 6352.95user 1331.43system 36:45.00elapsed 348%CPU (0avgtext+0avgdata 1521136maxresident)k [00:36:53] 0inputs+0outputs (0major+266526143minor)pagefaults 0swaps Сравните это с comment #2: всё то же самое, только %install вместо почти 50 минут уложился в 10. Не идеально, просто чуть менее ужасно. sin@, в samba из 285522 это и ещё ещё несколько моих изменений, please review: http://git.altlinux.org/people/iv/packages/samba.git?a=shortlog;h=refs/tags/4.14.7-alt4 Предлагаю распараллеленый make install отправить в Сизиф, но багу не закрывать. Чтобы её нормально решить (и не линковать всё по два раза) нужно взаимодействовать с апстримом, я пока не собираюсь этим заниматься. Может найдётся герой) |