от peio(28-01-2004)

рейтинг (9)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

Съдържание
  1. Увод
  2. Инсталиране на dictcc
  3. Инсталиране на ccache
  4. Стартиране на dictccd
  5. Използване на dictccd
  6. Използване на ccache
  7. Тестове и резултати
  8. Заключение и благодарности

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. Препоръчителната стойност е два пъти броя на процесорите, между които ще се извършва компилацията:
build
make -j 4

След това работата по компилирането трябва да започне и да бъде разпределена между всички машини. Добър графичен инструмент за наблюдение на процеса е 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 >>