Formula sugárhajtóművek gyorsulás felgyorsítja az alkalmazások összeállításához használja ccache és distcc

Építőanyag forráskódú alkalmazás folyamat yuniksoida közönséges, sőt világi. Mi lefordítani az alkalmazást, hogy próbálja ki az új funkciókat, a foltokat alkalmazni, vagy csak telepíteni a csomagot (helló rajongók BSD és a Gentoo). Azonban a modern alkalmazások olyan nagy, hogy néha ez a folyamat több, mint egy óra. Annak érdekében, hogy ne várjon, hogy a hosszú, azt javasoljuk, hogy speciális eszközöket használnak, ami jelentősen csökkenti az idő összeszerelési alkalmazásokhoz.







Általában módszerek egyre nagyobb a sebesség összeszerelésében a Knicks egy pár, és nem mindegyik használata szükséges további szoftver. Az egyik legegyszerűbb és legkézenfekvőbb módja az, hogy tiltsa le az összes optimalizálás. Ez a lépés valóban ad egy jelentős növekedés sebességének összeszerelés, hanem vezet jelentős csökkenését a végrehajtási sebesség a lefordított program. Ha Ön egyetért ezzel a helyzettel, akkor tudod, hogy a fordító, hogy felülbírálja optimalizálási. Ehhez adjuk hozzá a következő sort a

export CFLAGS = '- O0'
export CXXFLAGS = $ CFLAGS

FreeBSD és a Gentoo felhasználók használhatják az /etc/make.conf fájl módosításához e változók értékeit:

Az OpenBSD, a fájl neve /etc/mk.conf.

Fel kell gyorsítani a fordítási folyamatot, akkor a párhuzamosság, azaz egyszerre összeállításához több fájl tartalmazza a forráskódot. Azok, akik ismerik a programozás tisztában kell lenniük azzal, hogy többé-kevésbé nagy program C-nyelven írt áll több különálló fájlt tartalmazó forráskód részleteket. Az összeszerelés során a program, ezeket a fájlokat dolgozza fel a fordító, és csak a legvégén függetlenül linker összevonható egy futtatható fájlt. Köszönhetően ezt a funkciót, az alkalmazás lehet párhuzamosított szerelvényt, hogy ezeket a darabokat fájlok össze ugyanabban az időben.

A „klasszikus Linux»flag«-j„meg kell határozni közvetlenül az alkalmazás során épít:

$ ./configure
$ Make -j5
$ Sudo make install

Az alapuló rendszerek port, van egy speciális fájl opciókat, lehetővé téve ezzel a zászló világszerte. Például a Gentoo semmilyen beállítást lehet rendelni egy változó MAKEOPTS az /etc/make.conf fájlt. A FreeBSD-ben, ez a változó MAKE_ARGS neve.

Ugyanebben «forráskódú» disztribúció, akkor használjon egy másik trükk, hogy csökkentsék a szerelési időt átlagosan 10%. Jelentése, hogy a könyvtár tárolására használt közbenső eredmények összeállításának, a tmpfs. Fájl hozzáférési sebesség jelentősen növekedni fog, ami vezet a győzelem. A legtöbb rendszerben az ideiglenes fájlok tárolásához egyik alkönyvtárakat a / var / tmp, így egyszerűen csatlakoztatni kell tmpfs. Példa Gentoo:

$ Sudo mount -t tmpfs tmpfs -o size = 1G nr_inodes = 1M
/ Var / tmp / portage

Természetesen, ha a gép rendelkezik elegendő memóriával (2 GB is elég), hogy tmpfs nem kezdte meg a csere, ami tovább húzódik a fordítási folyamatot. Ha a memória a rendszerben kicsi, lehet szabadítani a segítségével, hogy mind a „kövér” alkalmazások, és ki a „X”.

caching

Alapértelmezésben a fordító nem figyelni, hogy a korábban összeállított fájlokat, és létrehoz egy teljes újrafordítás a teljes alkalmazás során újra futni a fordítást. Ez nagymértékben károsíthatja, ha például többször korrigálja az egyik forrás fájlokat, és minden alkalommal azt követően initsiiruesh szerelvény. Ez is növeli a kísérleteket a kernel, ha fordítani hozzá egy párszor próbál engedélyezni és letiltani a különböző lehetőségeket. Hogy oldja meg a problémát, akkor használja ccache szolgáltatásokat.

ccache programot - egy előfeldolgozó caching, amely lehetővé teszi, hogy ne újrafordítás már összeállított korábbi fájlokban. Ez létrehoz egy hash minden fájl összeállított, így ha mivel összeállítás fájl változatlan marad, az újra-feldolgozás nem megy végbe, és használja a korábban összeállított objektum fájl. A ccache jelentősen növeli a újra összeállítása a kérelmet. Bizonyos esetekben a növekedés lehet tucatszor.
Annak érdekében, hogy ccache elég telepíteni a rendszert, és az alkalmazás futtatásához fordítási folyamat paranccsal, valahogy így:

$ CC = "ccache gcc" CXX = "ccache g ++" ./configure

Előfeldolgozó cache objektum fájlok tárolása a könyvtárban

/.ccache. Alapértelmezésben ez a méret legfeljebb 1 GB, de én azt ajánlom, hogy növelje meg a 4 GB:

Ha a tér az otthoni könyvtár nem lesz elég ahhoz, hogy tárolja a cache, megadhat egy másik könyvtárat használni a ccache:

$ Echo "export CCACHE_DIR =" / var / tmp /
ccache / "" >>

Az biztos, hogy hozzon létre egy szimbolikus linket:

/.ccache
$ Ln -s / var / tmp / ccache

Ez különleges helyet foglal el a ccache alapuló rendszerek a portokat. Összeállítása szükséges eszközök csak a port lefordítása, statikus könyvtárak és más „eldobható” eszközökkel, az ilyen rendszerekben általában úgy végezzük, valahányszor a port szerelés, kötelezve őket.

Ezért ccache hozza felbecsülhetetlen. Sőt, a meglévő fájlokat a cache lehet újra frissítésekor port. Íme két recept használatra ccache: Gentoo forgalmazása és FreeBSD.

Aktiválásához ccache Gentoo elegendő két egyszerű lépésben:

1. Telepítse ccache:

$ Sudo jelennek -av ccache

2. Szerkessze a fájlt az /etc/make.conf:

$ Sudo vi az /etc/make.conf
# Aktiválása ccache
JELLEMZŐI = "ccache"
# Elhelyezkedés gyorsítótár
CCACHE_DIR = "/ var / tmp / ccache /"
# Gyorsítótár mérete
CCACHE_SIZE = "4G"

Lépéseket követően, az összes port fognak gyűjteni a használatát ccache. Annak érdekében, hogy ccache alatt kernelfordítással a genkernel, használja az alábbi parancsot:

$ Sudo genkernelt --kernel-cc = / usr / lib /
ccache / bin / gcc --menuconfig összes

Abban az esetben, FreeBSD ennél bonyolultabb, de ez az ésszerűség határain belül:

1. Telepítse ccache:

$ Cd / usr / ports / devel / ccache
$ Sudo make install clean

2. Módosítsa a /etc/make.conf fájlban:

$ Sudo vi az /etc/make.conf
# Ha a környezeti változó nincs NO_CACHE
meghatározott activate ccache






.ha! defined (NO_CACHE)
CC = / usr / local / libexec / ccache / világ-cc
CCX = / usr / local / libexec / ccache / világ-c ++
.endif
# Letiltása ccache szerelés közben maga
.ha a $
NO_CCACHE = yes
.endif

/.cshrc
Normál változók # ccache
setenv PATH / usr / local / libexec / ccache: $ PATH
setenv CCACHE_PATH / usr / bin: / usr / local / bin
setenv CCACHE_DIR / var / tmp / ccache
setenv CCACHE_LOGFILE /var/log/ccache.log
# Állítsa be a gyorsítótár méretét
if (x / usr / local / bin / ccache), majd
/ Usr / local / bin / ccache -M 4G> / dev / null
endif

Letiltani ccache alatt épít egy adott portot a következő parancs segítségével ahelyett, hogy a szokásos «make install clean»:

$ Sudo make NO_CACHE = yes install clean

elosztott fordítás

Distcc - ez egy wrapper gcc, amely lehetővé teszi, hogy használja a hatalmát a többi gép, hogy növelje összeállítása sebességű alkalmazásokhoz. Eltérően más megoldások ebben az osztályban, distcc könnyen telepíthető és nem igényel módosítást alkalmazás forráskódját vagy előkészítő tevékenységek. Át a távoli gép már előkezelt forráskódját, így a kezével, akkor nem kell semmilyen header fájlokat vagy könyvtárakat fordításra.

distcc klaszter jellemzően egyetlen kliens és több szerver. A kliens fut a gépen kezdeményező fordítási folyamat, és továbbítja a feladat elvégzésére összeállítása szerver fut a távoli gépen. A feladat áll előkezelt fájl tartalmazza a forráskódot, és a fordító zászlók. Mindez a szervernek küldött egy közös hálózati kapcsolat nélkül titkosítást és hitelesítést távoli oldalon. Szerverek, hogy végre ténylegesen összeállításához futtatható operációs rendszerek Linux, * BSD, Solaris, vagy Windows (telepíteni kell a gcc és distcc a cygwin környezet), de az a változat gcc ezeket a gépeket meg kell egyeznie.

Semmi értelme használni distcc egy egyszeri alkalmazás összeállítás, ez egészen jobbra és egy számítógép. De forgalmazásával Gentoo és FreeBSD, akkor, ami jelentősen növeli a sebességet a telepítési és frissítési alkalmazásokhoz. Gentoo már felkészült a használata distcc, így a tulajdonosok néhány egyszerű lépést, hogy aktiválja a wrapper. Először telepítse distcc az összes gép a klaszter:

$ Sudo jelennek distcc

Ezután lépjen a kliens gépen, és módosítsa a /etc/make.conf fájlban file:

$ Sudo vi az /etc/make.conf
# Jelzi folyamok száma összeállítása
MAKEOPTS = "- J8"
# Activate distcc
JELLEMZŐI = "distcc"
# Directory tárolási cache distcc
DISTCC_DIR = "/ tmp / .distcc"

A MAKEOPTS adható meg a számát összeállítása folyik. Ez a szám általában a következőképpen kell kiszámítani: teljes processzorok számát / magok az összes gép * 2 + 1 Azonban ez nem mindig igaz, és lehet kísérletezni, hogy megtalálják az optimális érték.

Állítsa be a házigazdák részt vesz a válogatás, a segédprogrammal distcc-config (sőt, csak módosítja a változó értékét DISTCC_HOSTS):

$ Sudo distcc-config --set-hosts „127.0.0.1
192.168.0.1 192.168.0.2 192.168.0.3 "

DISTCCD_OPTS = "$ -allow 192.168.0.0/24"

Most adjuk hozzá a kiszolgáló az alapértelmezett futási szintet és futtatni:

$ Sudo rc-update add distccd alapértelmezett
$ Sudo /etc/init.d/distccd Start

Most az összes port fogják összeállítani egy fürt distcc. A fordításhoz a kernel distcc használja a következő parancsot:

$ Sudo genkernelt --kernel-cc = distcc összes

Ezzel szemben, a Gentoo, FreeBSD nem rendelkezik a szükséges infrastruktúra átlátható megvalósítása distcc, így lesz beültetni műtéti úton. Ehhez létre distcc a kikötői rendszer:

$ Cd / usr / ports / devel / distcc
$ Sudo make install clean

Ezt meg kell tenni az összes gép, amely részt vesz a fordítási folyamatot. Ezután aktiválja a distcc szerver az /etc/rc.conf úgy, hogy fut az inicializálás során az operációs rendszer és el tudja fogadni a munkahelyek egy kliens:

distccd_enable = "YES"
distccd_flags = „- szép 5 --allow 192.168.1.0/24
--démon --user distcc -P /var/run/distccd.pid "

Ez a lépés is kell végezni az összes gép, beleértve a kliens (a válogatás került sor, és a gépen, kezdeményezi azt). „-allow” jelző a alhálózatot mely autók a jogot, hogy munkákat küldeni a szerverre. Indítsa el a kiszolgáló:

$ Sudo /usr/local/etc/rc.d/distccd Start

Visszamegyünk a kliens gépen. Nyílt /etc/make.conf fájlt és add hozzá a következő sorokat:

# Vi az /etc/make.conf
# Használd a distcc mint egy fordító
CC = distcc
CXX = distcc
# A feladatok száma
MAKE_ARGS = - J8

Kimutattuk distcc változók CC és CXX, hogy a kikötők és a világ automatikusan gyűjtött egy fürt terjeszteni a többi szerelvény fog menni egy kis trükk és a szabványos fordítóprogramok gcc és a g ++:

# Mkdir -p / usr / local / lib / distcc / bin
# Cd / usr / local / lib / distcc / bin
# Ln -s / usr / local / bin / gcc distcc
# Ln -s / usr / local / bin / distcc g ++
# Ln -s / usr / local / bin / distcc cc
# Ln -s / usr / local / bin / distcc c ++

/root/.cshrc nyitott és helyet hoztunk létre a könyvtárat, az elején a keresést a módját, hogy a bináris:

setenv PATH / usr / local / lib / distcc / bin: $ PATH

setenv DISTCC_HOSTS „127.0.0.1 192.168.1.2
192.168.1.3 192.168.1.4 "

Minden ellenőrzés lehet futtatni a szerelvény egy kikötő. distcc csomag tartalmaz egy segédprogramot nyomon distccmon-szöveg a fordítást. Program végrehajtása paraméterek nélkül, látni fogja a képernyőn a jelenlegi állapot distcc. Ahhoz, hogy megkapja információkat valós időben, használd a «distccmontext N», ahol N - a másodpercek száma között megjelenik a képernyőn. Gnome felhasználóknak (és nem csak) tudja használni a grafikus monitor nevű distccmon-gnome.

Összeállítás a felhőben

distcc programot válik hatékony megoldás, amikor az épület egy alkalmazást cluster gépek házigazdája a helyi hálózaton, hanem azért, mert a biztonsági rés nem lehet összeállításához használt elosztó gépek szétszórva a világban. Hozhat létre a VPN magán, hogy megoldja ezt a problémát, de kínálnak egyszerű és hatékony megoldást - SSH-alagút.

Minden a következő utasítások relevánsak a Gentoo forgalmazás, de nem lehet túl nehéz, hogy illeszkedjen őket egy másik elosztó / OS.

# Mkdir -p /etc/distcc/.ssh
# Usermod -d / etc / distcc distcc

Másodszor meg kell rendelni a héj:

# Usermod -s / bin / bash distcc

Harmadszor, meg kell oldani:

# Passwd -u distcc

Ezt a három lépést kell tenni az összes gép. Az ügyfél bejelentkezhet teljesítményű gépre SSH-val és
így a munka distcc, akkor meg kell adni a kulcsot:

# Ssh-keygen -t dsa -f /etc/distcc/.ssh/id_dsa

A nyilvános kulcs (id_dsa.pub), akkor át kell másolni a katalógusban /etc/distcc/.ssh/authorized_keys minden gép, hogy részt vesz a válogatás. Ahhoz, hogy az ssh és a Portage képes együtt dolgozni, meg kell rögzíteni az engedélyeket. Gépeken dolgozók, csinálunk:

# Chown -R distcc: daemon / etc / distcc
# Chmod 644 /etc/distcc/.ssh/authorized_keys

A kliens fut:

# Chown Portage: Portage /etc/distcc/.ssh/id_dsa
# Chmod 600 /etc/distcc/.ssh/id_dsa
# Chmod 644 /etc/distcc/.ssh/id_dsa.pub

Annak idején jelennek ssh nem ragadt félúton azzal a kérdéssel, hogy a nyilvános kulcs minden gép dolgozik, előre összegyűjti a kulcsokat:

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

Most hozzon létre egy wrapper distcc:

# Vi / etc / distcc / distcc-ssh
#! / Bin / bash
exec / usr / bin / ssh -i /etc/distcc/.ssh/id_dsa "$ @"

Tegyük futtathatóvá:

# Chmod a + x / etc / distcc / distcc-ssh

Szerkesztése az /etc/make.conf fájlban:

# Vi az /etc/make.conf
MAKEOPTS = "- J8"
JELLEMZŐI = "distcc"
DISTCC_SSH = "/ etc / distcc / distcc-ssh"
DISTCC_HOSTS = „localhost / 2 distcc @ rabochiy1 / 3 distcc @
rabochiy2 / 5 "

sikeres összeállítás

Programok, mint a ccache és distcc, valamint más trükköket tud adni egy nagyon jelentős növekedés az az összeállítás sebessége, de meg kell szem előtt tartani, hogy nem minden alkalmazás építhető velük. Építsd néhány komplex programok, amelyek számos összetevő, gyakran nem sikerül, az okot, ami miatt nehéz azonosítani. Ezért legyen óvatos, a legújabb verzióját ccache és ugyanazon verziójú gcc gépeken distcc-klaszter, ráadásul ne felejtsük el, hogy vizsgálja meg az INSTALL fájlban.

  • A Gentoo eloszlása ​​különböző zászlók összeállítása portokat külön aktiválható minden kikötő (lásd. Az / etc / portage / csomag. Cflags). Ezt fel lehet használni, hogy erőt ki ccache és distcc építése során bizonyos portokat.
  • Hozzárendelése lehetőségek PORTAGE_NICENESS / etc / tenni. conf Gentoo eloszlása ​​túl nagy érték, akkor személyesen nagymértékben lelassíthatja a szerelési alkalmazás.
  • A ccache distcc programról és jól élnek együtt. A Gentooval aktiválja őket ugyanabban az időben, hozzátéve Vonalelemek = „ccache distcc” a /etc/make.conf-hoz.

Itt található az ezt a cikket egy ismerősének: