LINUX-BG   Адрес : http://www.linux-bg.org
Използване на distcc и ccache
От: peio
Публикувана на: 28-01-2004
Адрес на статията: http://www.linux-bg.org/cgi-bin/y/index.pl?page=article&id=advices&key=358436495
Съдържание
  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 >>

Авторите на сайта, както и техните сътрудници запазват авторските права върху собствените си материали публикувани тук, но те са copyleft т.е. могат свободно да бъдат копирани и разпространявани с изискването изрично да се упоменава името на автора, както и да се публикува на видно място, че те са взети от оригиналния им URL-адрес на този сървър (http://www.linux-bg.org). Авторските права на преводните материали принадлежат на техните автори. Ако с публикуването тук на някакъв материал неволно са нарушени нечии права - след констатирането на този факт материалът ще бъде свален.

All trademarks, logos and copyrights mentioned on this site are the property of their respective owners.
Linux is copyright by Linus Torvalds.
© Линукс за българи ЕООД 2007
© Slavei Karadjov 1999 - 2006

All rights reserved.

Изпълнението отне: 0 wallclock secs ( 0.16 usr + 0.04 sys = 0.20 CPU)