от peio(28-01-2004)
рейтинг (9)
[ добре ]
[ зле ]
Вариант за отпечатване
1. Увод
Всеки от нас е компилирал програми от изходен код и всеки знае колко време и ресурси отнема това. Тази статия има за цел да ви запознае с два проекта, чиято цел е да направят този процес по-бърз.
Distcc (distcc.samba.org) разпределя компилирането на приложения писани на C, C++, Objective C или Objective C++ между свързани в мрежа компютри, като целта му е да използва максимално добре ресурсите на всеки от тях.
Целта на ccache (ccache.samba.org) е да кешира код при компилацията, който може да бъде бъде използван и при последващи компилации.
2. Инсталиране на dictcc
Много е вероятно да намерите прекомпилиран пакет на distcc във вашата дистрибуция, а ако такъв няма може да потърсите такъв на сайта на проекта или да го компилирате от изходен код. Потребителите на Slackware могат да намерят готов пакет в slackware/d/ директорията на дистрибутива.
3. Инсталиране на ccache
За Slackware готов пакет може да намерите от slackware/d/ директорията на дистрибутива. Там версията на ccache е 2.2, а ако искате да ползвате последната към момента на писане 2.3 може да свалите кода от сайта на проекта.
Разархивирането, компилирането и инсталирането стават с добре познатите ни :
ccache install |
tar zxvf ccache-2.3.tar.gz
cd ccache-2.3
./configure
make
su -c "make install" |
4. Стартиране на distccd
При стартирането на distccd трябва да се укажат хостовете между които ще се разпределя компилацията. Това става с задаването им в променлива на обкръжението DISTCC_HOSTS:
distcc env setup |
export DISTCC_HOSTS='localhost host1 host2' |
Демонът distccd трябва да бъде стартиран на всички машини, между които ще бъде разпределена компилацията. Това става с подаването на опцията --daemon . С опцията --allow можем да укажем ip адресите, на които е разрешено да участват в процеса. Опцията --user служи за указване на потребителя, като който ще работи демона. Друга полезна възможност е да укажем приоритета на процеса с опцията --nice. Ето пример за това как може да стартираме distccd:
distcc start |
distccd --daemon --user nobody --allow 192.168.1.0/24 |
Още веднъж напомням, че демона трябва да бъде стартиран на всички машини, между които ще се разпредели компилацията.
5. Използване на dictccd
За примерите в тази статия ще използваме компилирането на ProFtpd. Няма да се спирам на различните конфигурационни опции, а акцентът ще падне върху използването на distcc. Първо при изпълнението на ./configure скрипта задаваме използването на distcc с:
distcc & ./configure |
CC="distcc" ./configure |
Следващата стъпка е да укажем на make максималния брой на едновременните процеси с опцията -j. Препоръчителната стойност е два пъти броя на процесорите, между които ще се извършва компилацията:
След това работата по компилирането трябва да започне и да бъде разпределена между всички машини. Добър графичен инструмент за наблюдение на процеса е distccmon-gnome, а ако той липсва на вашата система може да ползвате текстовия distccmon-text.
6. Използване на ccache
Ccache се използва като се укаже използването му преди компилатора, който ще ползваме :
ccache & ./configure |
CC="ccache gcc" ./configure |
Ако ще ползваме distcc и ccache едновременно указваме това чрез :
ccache & distcc |
CC="ccache distcc" ./configure |
Логично е да се напомни, че ефектът от ccache ще се прояви на втората и и следващи компилации, тъй като на първата се създава кеша. Информация за състоянието на кеша можем да получим като изпълним ccache -s. Чрез променливата на обкръжението CCACHE_DIR се указва в коя директория ще се създаде кеша, директорията по подразбиране е ~/.ccache/. Максималния обем на кеша се задава чрез опцията -М, а максималния брой на файловете чрез опцията -F .
При компилирането на линукс ядрото при процеса на конфигуриране нямаме възможност да укажем опциите за C компилатора по горния начин. И затова трябва да го укажем в Makefile-а или по долния начин :
kernel build |
make -j 4 dep bzImage modules modules_install CC="ccache distcc" |
7. Тестове и резултати
За да тествам ползата от използването на distcc и ccache използвах домашната си мрежа, която се състои от два компютъра свързани директно един с друг с мрежови карти подържащи до 100Mbit трансфер. Първата машина е с процесор Duron 1200 MHZ с 256 DDR RAM , а втората е с процесор Pentium III 800MHZ и 128 SDRAM. И на двете машини е инсталиран Slackware 9.1 .
Основните тестове направих върху компилирането на ProFtpd. Нормално само на моята машина се компилира приблизително за 40 секунди. За да замеря времето използвах командата time -p като взимам предвид real времето (т.е. времето от извикването до изхода) като го изпълнявах няколко пъти, за да добия средна стойност.
С помоща на distcc и разпределяне на компилирането между двете машини средното време падна до 24 секунди.
Когато използвах само ccache , след като бе създаден кеша времето за втората и следващите компилации падна до 9 секунди.
А при съвместното използването на ccache и distcc не забелязах ускоряване, но това предполагам се дължи на това, че се разчита основно на създадения кеш.
8. Заключение и благодарности
Този документ не претендира за точност и изчерпателност, а само отразява личния ми опит. Ако имате забележки, корекции или допълнения - моля, изпращайте ги на peio@peio.org .
Искам да изкажа благодарностите си на Горан Брегович и "Оркестъра за сватби и погребения" и специално на Оги Радивоевич, чийто нежен глас ме съпровождаше докато писах тази статия. Ако ви харесва музиката им - купете си лицензиран носител. Те си заслужават парите.
Автор: Пейо Попов
Последна ревизия: 28.01.2004
<< PPP over SSL. Част 1: Сървър | Как да инсталираме драйверите на ATI >>
|