ПредишенСледващото

Изградете от процеса на кандидатстване източник на yuniksoida обикновен и дори банално. Ние съставяне на приложението да изпробва нови функции, нанесете петна, или просто да инсталирате пакета в (Здравейте фенове BSD и Gentoo). Въпреки това, съвременните приложения са толкова големи, че понякога този процес може да отнеме повече от един час. За да не се чака толкова дълго, предлагам да се използват специални инструменти, които могат значително да намалят времето на приложения за сглобяване.

Като цяло, методи за увеличаване на скоростта на заявления за сглобяване в Никс няколко и не всички от тях изискват използването на допълнителен софтуер. Един от най-простите и най-простият начин е да деактивирате всички оптимизации. Този ход наистина дава значително повишение в скоростта на събранията, но и води до значително намаляване на скоростта на изпълнение на компилиран софтуер. Ако сте съгласни с това състояние на нещата, а след това можете да поръчате на компилатора да замени всяка оптимизация. За да направите това, добавете следния ред към

износ CFLAGS = '- O0 "
износ CXXFLAGS = $ CFLAGS

FreeBSD и Gentoo потребителите могат да използват /etc/make.conf файл, за да промените стойностите на тези променливи:

В OpenBSD, файлът е кръстен /etc/mk.conf.

Ускоряване на процеса на компилация, можете да използвате паралелно извършване, т.е. едновременно компилирате няколко файла, съдържащи изходния код. Тези, които са запознати с програмирането трябва да е наясно, че всеки малко или много голяма програма, написана на езика С се състои от няколко отделни файлове, съдържащи изходен код откъси. По време на монтажа на програмата, тези файлове се обработват от компилатора, а само в самия край, независимо линкерни комбинирани в един изпълним файл. Благодарение на тази функция, приложението може да се паралелизирано събрание, така че тези части от файлове са събирани в същото време.

В "-J класически Linux" флаг "," трябва да се посочи директно по време на изграждането на приложение:

$ ./configure
$ Направи -j5
$ Sudo направи инсталиране

В системи, базирани на пристанища, има специални опции за конфигуриране на файлове, което позволява да се използва този флаг в световен мащаб. Така например, в Gentoo направи някаква опция може да бъде назначен за подаване на променливи MAKEOPTS /etc/make.conf. В FreeBSD, тази променлива е MAKE_ARGS име.

По същия «източник базирани дистрибуции», можете да използвате друг трик, за да се намали времето за монтаж средно с 10%. Значението му е да се постави в директорията използва за съхраняване на междинните резултати от компилация, в tmpfs. високоскоростен достъп до файла ще се увеличи значително, което ще доведе до победа. Повечето системи използват за съхранение на временни файлове е един от поддиректориите на / Var / TMP, така че ние просто го монтирате на tmpfs. Пример Gentoo:

$ Sudo монтиране -t tmpfs tmpfs -o размер = 1G, nr_inodes = 1M
/ Var / TMP / Portage

Естествено, машината трябва да има достатъчно памет (2 GB е напълно достатъчно), за да не tmpfs започна да използва суап, което допълнително се простира на процеса на компилация. Ако паметта в системата е малък, той може да бъде освободен с помощта на завършване на всички "дебели" приложения и от "X".

кеширане

По подразбиране, компилаторът не се обърне внимание на по-рано, събрани файлове и произвежда пълна прекомпилирате цялото приложение по време на повторния старт на процеса на изграждане. Това може значително да навреди, ако, например, многократно коригира една от изходните файлове, и всеки път след това initsiiruesh сглобяване. Тя също така ще увеличи експериментите с ядрото, когато компилирате ядрото си няколко пъти, опитвайки се да включвате и изключвате различни възможности. За да реши проблема, можете да използвате ccache услуги.

ccache програма - препроцесор кеширане, което позволява да се избегне прекомпилирате вече събрани по-рано файлове. Той генерира хеш за всеки файл се компилира, така че ако след компилация файл остава непроменен, неговата повторна обработка не се извършва, и да използвате предварително компилирани обект файл. Ccache значително да се увеличи скоростта на повторно компилиране на заявлението. В някои случаи, увеличението може да бъде десетки пъти.
За да се даде възможност на ccache достатъчно, за да го инсталирате в системата и да стартирате процеса на кандидатстване натрупване посредством команда, нещо като това:

$ CC = "ccache ССЗ" СХХ = "ccache г ++" ./configure

Preprocessor кеширана обект файлове се съхраняват в директорията

/.ccache. По подразбиране, този размер е ограничен до 1 GB, но бих препоръчал да го увеличи до 4 GB:

Ако мястото в собствената директория няма да е достатъчно за съхранение на кеш паметта, можете да зададете друга директория за използване ccache:

$ Echo "износ CCACHE_DIR =" / Var / TMP /
ccache / "" >>

За да сте сигурни, да създадете символна връзка:

/.ccache
$ Ln -s / Var / TMP / ccache

Той заема специално място в ccache системи, базирани на пристанищата. Съставяне на инструментите, необходими само през пристанище строя, статични библиотеки и други "еднократна употреба" инструменти, в такива системи обикновено се извършват всеки път, когато събранието порт, изисква от тях.

Затова ccache носи безценен. Освен това, съществуващите файлове в кеша могат да бъдат използвани при обновяване пристанища. Ето две рецепта употреба ccache: на Gentoo разпределение и FreeBSD.

За да активирате ccache с Gentoo е достатъчно за изпълнение две прости стъпки:

1. Инсталирайте ccache:

$ Sudo появяват -av ccache

2. Редактиране /etc/make.conf на файла:

$ Sudo VI /etc/make.conf
# Активирайте ccache
ХАРАКТЕРИСТИКИ = "ccache"
# Местоположение Cache
CCACHE_DIR = "/ Var / TMP / ccache /"
# Размерът на кеша
CCACHE_SIZE = "4G"

След изпълнението на тези стъпки, всички пристанища ще се събират с помощта на ccache. За да се даде възможност на ccache по време на компилиране на ядрото с помощта на genkernel, използвайте следната команда:

$ Sudo genkernel --kernel-сс = / ЮЕсАр / ИЪ /
ccache / хамбар / ССЗ --menuconfig всички

В случай на FreeBSD-сложно от това, но това е в рамките на разумното:

1. Инсталирайте ccache:

$ CD / ЮЕсАр / пристанища / раз / ccache
$ Sudo направи инсталирате чиста

2. Редактирайте /etc/make.conf:

$ Sudo VI /etc/make.conf
# Ако променливата на средата не е NO_CACHE
решени активирате ccache
.ако! дефинирани (NO_CACHE)
CC = / ЮЕсАр / местни / libexec / ccache / световно куб.см.
CCX = / ЮЕсАр / местни / libexec / ccache / световно C ++
.endif
# Деактивиране ccache по време на монтажа се
.ако $
NO_CCACHE = да
.endif

/.cshrc
Стандартни променливи # ccache
SetEnv PATH / ЮЕсАр / местни / libexec / ccache: $ PATH
SetEnv CCACHE_PATH / ЮЕсАр / хамбар: / ЮЕсАр / местни / хамбар
SetEnv CCACHE_DIR / Var / TMP / ccache
SetEnv CCACHE_LOGFILE /var/log/ccache.log
# Задаване на размера на кеша
ако (-x / ЮЕсАр / местни / хамбар / ccache), след това
/ ЮЕсАр / местни / хамбар / ccache -M 4G> / сътрудничество / нула
endif

За да забраните ccache по време на натрупването специфичен порт използва следната команда вместо стандартните «правят инсталирате чиста»:

$ Sudo направи NO_CACHE = да инсталирате чиста

разпределено компилиране

Distcc - това е обвивка за ССЗ, което ви позволява да използвате силата на други машини, за да се увеличи скоростта на приложения компилация. За разлика от другите решения в този клас, distcc е лесен за инсталиране и не изисква промяна на изходния код на приложението или някакви подготвителни действия. Прехвърлени към отдалечената машина вече предварителна обработка на изходния код, така че с ръката си, тя не трябва да има никакви заглавните файлове или библиотеки за компилиране.

distcc клъстер обикновено се състои от един-единствен клиент и няколко сървъра. Клиентът работи на машината започване на процеса на изграждане, и предава тази работа да се извърши по съставяне сървъри, работещи на отдалечени машини. А работа се състои от предварително обработени файл, съдържащ кода на източника и знамената на компилатора. Всичко това се изпраща към сървъра посредством обща мрежова връзка, без криптиране и автентификация дистанционно страна. Сървъри, че действително се осъществява от компилацията може да работи на операционни системи Linux, BSD *, Solaris, или Windows (трябва да инсталирате ССЗ и distcc в Cygwin среда), но версията на ССЗ на тези машини трябва да е същото.

Няма никакъв смисъл да се използва distcc за монтаж на еднократно кандидатстване, това е напълно прав и един компютър. Но в разпределението на Gentoo и FreeBSD, тя може да осигури значително увеличаване на скоростта на инсталиране и актуализиране на приложения. Gentoo е подготвен за използване на distcc, така че собствениците си с няколко лесни стъпки, за да активирате обвивка. На първо място, инсталиране на distcc на всички машини в клъстера:

$ Sudo появяват distcc

След това отидете на клиентската машина и редактирате /etc/make.conf файл:

$ Sudo VI /etc/make.conf
# Показва броя на потоците компилация
MAKEOPTS = "- J8"
# Активиране distcc
ХАРАКТЕРИСТИКИ = "distcc"
# Directory за кеш памет distcc
DISTCC_DIR = "/ TMP / .distcc"

В MAKEOPTS опции определят общия брой на компилация потоци. Обикновено този номер се изчислява, както следва: общ брой процесори / на всички машини ядра * 2 + 1. Все пак, това не винаги е вярно, и може да се наложи да експериментирате, за да намери оптималната стойност.

За да зададете хостовете, включени в компилацията, използвайте помощната програма distcc-довереник (в действителност, а само променя стойността на променливите DISTCC_HOSTS):

$ SUDO distcc-довереник --set-домакини "127.0.0.1
192.168.0.1 192.168.0.2 192.168.0.3 "

DISTCCD_OPTS = "$ -позволяват 192.168.0.0/24"

Сега добавете сървъра в стандартното ниво тичам и да го стартирате:

$ Sudo RC-актуализация добавите distccd подразбиране
$ Sudo /etc/init.d/distccd старт

Сега всички пристанища ще бъдат събирани в клъстер distcc. За да компилирате ядрото с distcc, използвайте следната команда:

$ Sudo genkernel --kernel-сс = distcc всички

За разлика от това, Gentoo, FreeBSD не разполага с необходимата инфраструктура за прилагане на прозрачни distcc, така че ние ще трябва да го имплантират по хирургичен път. За да направите това, създаден distcc се използва системата на порт:

$ CD / ЮЕсАр / пристанища / раз / distcc
$ Sudo направи инсталирате чиста

Това трябва да се прави на всички машини, които ще участват в процеса на компилация. На следващо място, активирайте distcc сървър в /etc/rc.conf, така че да се управлява по време на инициализация на операционната система и може да приеме работа от клиента:

distccd_enable = "YES"
distccd_flags = "- хубави 5 --allow 192.168.1.0/24
--демон --user distcc -Р /var/run/distccd.pid "

Тази стъпка трябва да се извърши и на всички машини, включително и клиент (за съставянето му се състоя и на машината, тя инициира). "-позволяват" флаг определя подмрежата, към която автомобилите имат право да представят работата на сървъра. Започнете на сървъра:

$ Sudo /usr/local/etc/rc.d/distccd старт

Връщаме се на клиентската машина. Open /etc/make.conf и добавете следните редове:

# Vi /etc/make.conf
# Използвайте distcc като съставител
CC = distcc
СХХ = distcc
# Броят на задачи
MAKE_ARGS = - j8

Посочихме distcc променливи CC и СХХ, така че пристанищата и света ще се събират автоматично в клъстер за разпространение на останалата част от събранието ще продължи един малък трик и по-нисък стандарт компилатори ССЗ и г ++:

# MKDIR -p / ЮЕсАр / местни / ИЪ / distcc / бин
# Cd / ЮЕсАр / местни / ИЪ / distcc / бин
# Ln -s / ЮЕсАр / местни / хамбар / distcc ССЗ
# Ln -s / ЮЕсАр / местни / хамбар / distcc гр ++
# Ln -s / ЮЕсАр / местни / хамбар / distcc куб.см.
# Ln -s / ЮЕсАр / местни / хамбар / distcc C ++

/root/.cshrc отворен и място сме създали директорията, в началото на търсенето на начини за двоичен:

SetEnv PATH / ЮЕсАр / местни / ИЪ / distcc / бин: $ PATH

SetEnv DISTCC_HOSTS "127.0.0.1 192.168.1.2
192.168.1.3 192.168.1.4 "

Всички проверки могат да се изпълняват при монтажа на пристанище. distcc пакет идва с програма за наблюдение на distccmon текст на процеса на изграждане. Изпълнение на програмата без параметри, ще видите на екрана на текущото състояние distcc. За да получите информация в реално време, използвайте командата «distccmontext N», където N - е броя на секунди между показване на екрана. Потребителите Gnome (и не само) могат да използват графичен монитора нарича distccmon-джудже.

Съставяне в облака

distcc програма влиза в сила решение, когато става въпрос за изграждане на заявление в група от машини, хоствани на локалната мрежа, но поради тяхната уязвимост, тя не може да се използва за съставяне на разпределителните машини, пръснати по целия свят. Можете да създадете VPN частния, за да се справите с този проблем, но аз предлагам просто и ефективно решение - SSH-тунел.

Всички следните инструкции са от значение за разпределението на Gentoo, но не е много трудно да се поберат в друго разпределение / OS.

# MKDIR -p /etc/distcc/.ssh
# Usermod-d / и т.н. / distcc distcc

На второ място, тя трябва да се определя на корпуса:

# Usermod -s / хамбар / Баш distcc

Трето, тя трябва да бъде отключен:

# Passwd -u distcc

Тези три стъпки трябва да се правят на всички машини. Клиентът може да влезете в-производителността на машината с помощта на SSH и
даде distcc работа, тя трябва да има ключ:

# Ssh-търсени -t DSA -f /etc/distcc/.ssh/id_dsa

Публичният ключ (id_dsa.pub), трябва да копирате стоките /etc/distcc/.ssh/authorized_keys всички машини, които ще участват в компилацията. За да SSH и пренасяне на товари по суша да могат да работят заедно, е необходимо да се определи на разрешенията. На машини-работници, което правим:

# Chown -R distcc: демон / и т.н. / distcc
# CHMOD 644 /etc/distcc/.ssh/authorized_keys

На клиента, изпълнете:

# Chown Portage: Portage /etc/distcc/.ssh/id_dsa
# 600 коригират /etc/distcc/.ssh/id_dsa
# CHMOD 644 /etc/distcc/.ssh/id_dsa.pub

За да се появи по време на SSH не е блокирало по средата с въпроса за вземане на публичния ключ на всяка машина, работно, предварително се съберат всички ключове:

# Ssh-KeyScan -t RSA rabochiy1 rabochiy2 rabochiy3 \
> /var/tmp/portage/.ssh/known_hosts
# Chown Portage: Portage /var/tmp/portage/.ssh/ \
known_hosts

Сега създайте обвивка за distcc:

# Vi / и т.н. / distcc / distcc-SSH
#! / Bin / Баш
EXEC / ЮЕсАр / хамбар / SSH -i /etc/distcc/.ssh/id_dsa "$ @"

Нека да го правим изпълним:

# Коригират а + х / и т.н. / distcc / distcc-SSH

Редактирайте /etc/make.conf файл:

# Vi /etc/make.conf
MAKEOPTS = "- J8"
ХАРАКТЕРИСТИКИ = "distcc"
DISTCC_SSH = "/ и т.н. / distcc / distcc-SSH"
DISTCC_HOSTS = "Localhost / 2 distcc @ rabochiy1 / 3 distcc @
rabochiy2 / 5 "

След успешна компилация

Програми като ccache и distcc, заедно с други трикове могат да дадат много значително увеличаване на скоростта на събранието, но трябва да се има предвид, че не всички приложения могат да бъдат изградени с тях. Изграждане някои комплексни програми, състоящи се от много компоненти, които често се провали, причината, поради която е трудно да се определи. Така че бъдете внимателни, използвайте най-новата версия на ccache и същата версия на GCC на машини distcc-клъстер, освен това, не забравяйте да погледнете в инсталационния файл.

  • На Gentoo разпространение на различни флагове, съставящи пристанища могат да се активират индивидуално за всеки порт (вж. На файла / и т.н. / Portage / пакета. CFLAGS). Това може да се използва, за да принуди разстояние ccache и distcc при изграждане на някои пристанища.
  • Присвояване опции PORTAGE_NICENESS файл / и т.н. / марка. конф на Gentoo разпределение е твърде голяма стойност, вие лично може значително да забави скоростта на приложения за сглобяване.
  • програма Ccache distcc и живеят добре заедно. С Gentoo можете да ги активирате в същото време, добавяне на ред ХАРАКТЕРИСТИКИ = "ccache distcc", за да /etc/make.conf.

Покажете тази статия на приятел:

Подкрепете проекта - споделете линка, благодаря!