Для складання програмного пакету на робочій станції з багатьма ядрами процесора (скажімо, 12) етап конфігурації часто займає набагато більше часу, ніж фактичний етап компіляції, оскільки ./configure
тести виконуються по черзі, при цьому make -j
виконується gcc
так само, як і інші команди паралельно.
Я відчуваю, що велика трата ресурсів залишати решта 11 ядер в режимі очікування більшу частину часу в очікуванні завершення повільного ./configure
. Чому потрібно робити тести послідовно? Чи залежить кожен тест один від одного? Я можу помилитися, але, схоже, більшість з них незалежні.
Що ще важливіше, чи є способи пришвидшити ./configure
?
Редагувати: Щоб проілюструвати ситуацію, ось приклад з GNU Coreutils
cd /dev/shm
rm -rf coreutils-8.9
tar -xzf coreutils-8.9.tar.gz
cd coreutils-8.9
time ./configure
time make -j24
Результати:
# For `time ./configure`
real 4m39.662s
user 0m26.670s
sys 4m30.495s
# For `time make -j24`
real 0m42.085s
user 2m35.113s
sys 6m15.050s
З Coreutils-8,9 , ./configure
займає в 6 разів більше , ніж make
. Хоча ./configure
використовуйте менший час процесора (дивіться на "user" & "sys" часи), це займає набагато більше часу ("real"), оскільки воно не паралельне. Я кілька разів повторював тест (при цьому, можливо, відповідні файли залишаються в кеш-пам'яті), і час знаходиться в межах 10%.