Set MAKEFLAGS and TESTSUITEFLAGS for parallelism

This commit is contained in:
Poltern 2023-11-22 17:30:04 +05:00
parent e88f0fda49
commit a8694f2fe2
7 changed files with 99 additions and 48 deletions

View File

@ -34,18 +34,6 @@
некоторых случаях цифры могут отличаться на десятки минут.</para>
<note>
<para>Для многих современных систем с несколькими процессорами (или ядрами)
время компиляции пакета можно сократить, выполнив <quote>параллельную сборку</quote>,
либо установив переменную среды, либо сообщив программе <command>make</command>,
сколько ядер задействовать для сборки. Например, процессор Intel i5-6500 может
поддерживать четыре одновременных потока:</para>
<screen role="nodump"><userinput>export MAKEFLAGS='-j4'</userinput></screen>
<para>или просто собирать с флагом:</para>
<screen role="nodump"><userinput>make -j4</userinput></screen>
<para>Когда используется несколько ядер, единицы измерения SBU будут
различаться еще больше, чем обычно. В некоторых случаях make просто
завершится ошибкой. Анализ выходных данных процесса сборки также будет более

View File

@ -174,7 +174,7 @@ EOF</userinput></screen>
повлиять на сборку важных пакетов LFS. Чтобы убедиться, что пользовательская
среда <systemitem class="username">lfs</systemitem> чиста, проверьте наличие
файла <filename>/etc/bash.bashrc</filename> и, если он есть, переименуйте его.
От пользователя <systemitem class="username">root</systemitem>, запустите:</para>
От имени пользователя <systemitem class="username">root</systemitem>, запустите:</para>
<screen role="nodump"><userinput>[ ! -e /etc/bash.bashrc ] || mv -v /etc/bash.bashrc /etc/bash.bashrc.NOUSE</userinput></screen>
@ -188,6 +188,54 @@ EOF</userinput></screen>
готовой системе LFS.</para>
</important>
<para>
Для многих современных систем с несколькими процессорами (или ядрами)
время компиляции пакета можно сократить, выполнив <quote>параллельную сборку</quote>,
либо установив переменную среды, либо сообщив программе <command>make</command>,
сколько ядер задействовать для сборки. Например, процессор Intel Core i9-13900K
имеет 8 ядер P (производительность) и 16 ядер E (энергоэффективность), ядро P может
одновременно запускать два потока, поэтому каждое ядро P моделируется ядром Linux
как два логических ядра. В результате получается 32 логических ядра. Очевидный способ
задействовать все эти логические ядра - разрешить <command>make</command> создавать
до 32 заданий сборки. Это можно сделать, передав параметр <parameter>-j32</parameter>
команде <command>make:
</para>
<screen role='nodump'><userinput>make -j32</userinput></screen>
<para>
Или установите переменную окружения <envar>MAKEFLAGS</envar>, и ее содержимое будет
автоматически использоваться <command>make</command> в качестве параметров командной
строки:
</para>
<screen role='nodump'><userinput>export MAKEFLAGS=-j32</userinput></screen>
<important>
<para>
Никогда не передавайте параметр <parameter>-j</parameter> без номера в
<command>make</command> и не устанавливайте такой параметр в <envar>MAKEFLAGS</envar>.
Иначе <command>make</command> будет создавать бесконечные задания сборки,
что вызовет проблемы со стабильностью системы.
</para>
</important>
<para>
Чтобы использовать все логические ядра, доступные для сборки пакетов в
<xref linkend='chapter-cross-tools'/> и
<xref linkend='chapter-temporary-tools'/>, укажите параметр <envar>MAKEFLAGS</envar>
в <filename>.bashrc сейчас</filename>:
</para>
<screen><userinput>cat &gt;&gt; ~/.bashrc &lt;&lt; "EOF"
<literal>export MAKEFLAGS=-j<replaceable>$(nproc)</replaceable></literal>
EOF</userinput></screen>
<para>
Замените <replaceable>$(nproc)</replaceable> количеством логических ядер, которые
вы хотите использовать, если вы планируете использовать не все логические ядра.
</para>
<para>Наконец, чтобы убедиться, что среда полностью подготовлена для сборки временных
инструментов, перечитайте только что созданный профиль пользователя:</para>

View File

@ -22,8 +22,20 @@
TERM="$TERM" \
PS1='(lfs chroot) \u:\w\$ ' \
PATH=/usr/bin:/usr/sbin \
MAKEFLAGS="-j<replaceable>$(nproc)</replaceable>" \
TESTSUITEFLAGS="-j<replaceable>$(nproc)</replaceable>" \
/bin/bash --login</userinput></screen>
<para>
Если вы не хотите использовать все доступные логические ядра, замените параметр
<replaceable>$(nproc)</replaceable> количеством логических ядер, которые вы хотите
использовать для сборки пакетов в этой и последующих главах. На наборы тестов некоторых
пакетов (в частности Autoconf, Libtool и Tar) в &ch-final; не влияет установка переменной
<envar>MAKEFLAGS</envar>, вместо этого они используют переменную среды
<envar>TESTSUITEFLAGS</envar>. Мы также установили её здесь для запуска тестов с поддержкой
нескольких ядер.
</para>
<para>Параметр <parameter>-i</parameter> команды <command>env</command>, очистит
все переменные в среде chroot. После этого переменные
<envar>HOME</envar>, <envar>TERM</envar>, <envar>PS1</envar> и
@ -44,9 +56,9 @@
указан в переменной окружения <envar>PATH</envar>. Это означает, что кросс-тулчейн
больше не будет использоваться.</para>
<para>Обратите внимание, что в командной строке <command>bash</command> будет указано
<computeroutput>I have no name!</computeroutput>. Это нормально, поскольку файл
<filename>/etc/passwd</filename> еще не создан.</para>
<para>Также обратите внимание, что в командной строке <command>bash</command> будет
указано <computeroutput>I have no name!</computeroutput>. Это нормально, поскольку
файл <filename>/etc/passwd</filename> еще не создан.</para>
<note>
<para>Важно, чтобы все команды в оставшейся части этой главы и следующих главах

View File

@ -52,11 +52,14 @@
<screen><userinput remap="make">make</userinput></screen>
<para>Использование опции make -j4 ускоряет тесты даже в системах с одним
процессором из-за внутренних задержек в отдельных тестах. Чтобы протестировать
пакет, выполните:</para>
<para>Использование четырех параллельных заданий ускоряет тестирование даже на системах
с меньшим количеством логических ядер из-за внутренних задержек в отдельных тестах. Чтобы
протестировать пакет, выполните:</para>
<screen><userinput remap="test">make -j4 check</userinput></screen>
<screen><userinput remap="test">make <replaceable>-j$(($(nproc)&gt;4?$(nproc):4))</replaceable> check</userinput></screen>
<para>Замените <replaceable>$((...))</replaceable> количеством логических ядер, которые
вы хотите использовать, если вы не планируете использовать все.</para>
<para>Известно, что тест t/subobj.sh не проходит.</para>

View File

@ -62,7 +62,7 @@
<para>Чтобы протестировать пакет, выполните:</para>
<screen><userinput remap="test">make test</userinput></screen>
<screen><userinput remap="test">HARNESS_JOBS=<replaceable>$(nproc)</replaceable> make test</userinput></screen>
<para>Известно, что один тест, 30-test_afalg.t, завершится ошибкой, если в ядре
хоста не включен параметр <option>CONFIG_CRYPTO_USER_API_SKCIPHER</option> или

View File

@ -110,7 +110,7 @@ export BUILD_BZIP2=0</userinput></screen>
<para>Чтобы протестировать пакет (примерно 11 SBU), выполните:</para>
<screen><userinput remap="test">make test</userinput></screen>
<screen><userinput remap="test">TEST_JOBS=$(nproc) make test_harness</userinput></screen>
<para>Установка пакета и очистка:</para>

View File

@ -47,10 +47,10 @@
<!ENTITY automake-fin-du "114 MB">
<!ENTITY automake-fin-sbu "менее 0.1 SBU (около 7.0 SBU с тестами)">
<!ENTITY bash-version "5.2.15">
<!ENTITY bash-size "10,695 KB">
<!ENTITY bash-version "5.2.21">
<!ENTITY bash-size "10,696 KB">
<!ENTITY bash-url "&gnu;bash/bash-&bash-version;.tar.gz">
<!ENTITY bash-md5 "4281bb43497f3905a308430a8d6a30a5">
<!ENTITY bash-md5 "ad5b38410e3bf0e9bcc20e2765f5e3f9">
<!ENTITY bash-home "&gnu-software;bash/">
<!ENTITY bash-tmp-du "67 MB">
<!ENTITY bash-tmp-sbu "0.2 SBU">
@ -148,10 +148,10 @@
<!ENTITY e2fsprogs-fin-du "95 MB">
<!ENTITY e2fsprogs-fin-sbu "2.4 SBU на жестком диске, 0.6 SBU на SSD диске">
<!ENTITY elfutils-version "0.189"> <!-- libelf -->
<!ENTITY elfutils-size "8,936 KB">
<!ENTITY elfutils-version "0.190"> <!-- libelf -->
<!ENTITY elfutils-size "8,949 KB">
<!ENTITY elfutils-url "https://sourceware.org/ftp/elfutils/&elfutils-version;/elfutils-&elfutils-version;.tar.bz2">
<!ENTITY elfutils-md5 "5cfaa711a90cb670406cd495aeaa6030">
<!ENTITY elfutils-md5 "79ad698e61a052bea79e77df6a08bc4b">
<!ENTITY elfutils-home "https://sourceware.org/elfutils/">
<!ENTITY elfutils-fin-du "122 MB">
<!ENTITY elfutils-fin-sbu "0.3 SBU">
@ -208,10 +208,10 @@
<!ENTITY flit-core-fin-du "1.7 MB">
<!ENTITY flit-core-fin-sbu "менее 0.1 SBU">
<!ENTITY gawk-version "5.2.2">
<!ENTITY gawk-size "3,324 KB">
<!ENTITY gawk-version "5.3.0">
<!ENTITY gawk-size "3,356 KB">
<!ENTITY gawk-url "&gnu;gawk/gawk-&gawk-version;.tar.xz">
<!ENTITY gawk-md5 "d63b4de2c722cbd9b8cc8e6f14d78a1e">
<!ENTITY gawk-md5 "97c5a7d83f91a7e1b2035ebbe6ac7abd">
<!ENTITY gawk-home "&gnu-software;gawk/">
<!ENTITY gawk-tmp-du "48 MB">
<!ENTITY gawk-tmp-sbu "0.1 SBU">
@ -317,10 +317,10 @@
<!ENTITY gzip-fin-du "21 MB">
<!ENTITY gzip-fin-sbu "0.3 SBU">
<!ENTITY iana-etc-version "20231026">
<!ENTITY iana-etc-size "588 KB">
<!ENTITY iana-etc-version "20231107">
<!ENTITY iana-etc-size "589 KB">
<!ENTITY iana-etc-url "https://github.com/Mic92/iana-etc/releases/download/&iana-etc-version;/iana-etc-&iana-etc-version;.tar.gz">
<!ENTITY iana-etc-md5 "87e127b8f5ce7f2daa7b4afa1c147465">
<!ENTITY iana-etc-md5 "01331998d26d5beb592c12b06b2eeb24">
<!ENTITY iana-etc-home "https://www.iana.org/protocols">
<!ENTITY iana-etc-fin-du "4.8 MB">
<!ENTITY iana-etc-fin-sbu "менее 0.1 SBU">
@ -341,10 +341,10 @@
<!ENTITY intltool-fin-du "1.5 MB">
<!ENTITY intltool-fin-sbu "менее 0.1 SBU">
<!ENTITY iproute2-version "6.5.0">
<!ENTITY iproute2-size "908 KB">
<!ENTITY iproute2-version "6.6.0">
<!ENTITY iproute2-size "897 KB">
<!ENTITY iproute2-url "&kernel;linux/utils/net/iproute2/iproute2-&iproute2-version;.tar.xz">
<!ENTITY iproute2-md5 "ae811fc51b3a2c9c7701be308152c45a">
<!ENTITY iproute2-md5 "6716fc3188dbea226997fa2478a190d7">
<!ENTITY iproute2-home "&kernel;linux/utils/net/iproute2/">
<!ENTITY iproute2-fin-du "17 MB">
<!ENTITY iproute2-fin-sbu "0.1 SBU">
@ -430,13 +430,13 @@
<!ENTITY libxcrypt-fin-sbu "0.1 SBU">
<!ENTITY linux-major-version "6">
<!ENTITY linux-minor-version "5">
<!ENTITY linux-patch-version "9">
<!ENTITY linux-minor-version "6">
<!ENTITY linux-patch-version "1">
<!--<!ENTITY linux-version "&linux-major-version;.&linux-minor-version;">-->
<!ENTITY linux-version "&linux-major-version;.&linux-minor-version;.&linux-patch-version;">
<!ENTITY linux-size "135,718 KB">
<!ENTITY linux-size "136,730 KB">
<!ENTITY linux-url "&kernel;linux/kernel/v&linux-major-version;.x/linux-&linux-version;.tar.xz">
<!ENTITY linux-md5 "9e187b3c0cd0e29d151a1bd72c66f78f">
<!ENTITY linux-md5 "90291279ca684fb8cfa59b2ae75b6fe0">
<!ENTITY linux-home "https://www.kernel.org/">
<!-- measured for 6.5.3 / gcc-13.2.0 on x86_64 with -j4 : minimum is
allnoconfig + some configs we recommend for the users, rounded down to
@ -735,13 +735,13 @@
<!ENTITY util-linux-fin-du "310 MB">
<!ENTITY util-linux-fin-sbu "0.5 SBU">
<!ENTITY vim-version "9.0.1968">
<!ENTITY vim-version "9.0.2103">
<!-- <!ENTITY vim-majmin "90"> -->
<!ENTITY vim-docdir "vim/vim90">
<!ENTITY vim-size "16,909 KB">
<!ENTITY vim-size "11,193 KB">
<!--<!ENTITY vim-url "https://github.com/vim/vim/archive/v&vim-version;/vim-&vim-version;.tar.gz">-->
<!ENTITY vim-url "&anduin-sources;/vim-&vim-version;.tar.gz">
<!ENTITY vim-md5 "66147348ba84ea9c78b9d6595015f5a6">
<!ENTITY vim-url "&anduin-sources;/vim-&vim-version;.tar.xz">
<!ENTITY vim-md5 "1af1d018026234d085a82348703461ce">
<!ENTITY vim-home "https://www.vim.org">
<!ENTITY vim-fin-du "229 MB">
<!ENTITY vim-fin-sbu "2.3 SBU">
@ -762,10 +762,10 @@
<!ENTITY xml-parser-fin-du "2.3 MB">
<!ENTITY xml-parser-fin-sbu "менее 0.1 SBU">
<!ENTITY xz-version "5.4.4">
<!ENTITY xz-size "1,623 KB">
<!ENTITY xz-version "5.4.5">
<!ENTITY xz-size "1,642 KB">
<!ENTITY xz-url "https://tukaani.org/xz/xz-&xz-version;.tar.xz">
<!ENTITY xz-md5 "d83d6f64a64f88759e312b8a38c3add6">
<!ENTITY xz-md5 "1d33e0be05c53e7a5641acf5c8b35fdd">
<!ENTITY xz-home "https://tukaani.org/xz">
<!ENTITY xz-tmp-du "22 MB">
<!ENTITY xz-tmp-sbu "0.1 SBU">