[rlug] Distributed make
Adrian Sevcenco
Adrian.Sevcenco at cern.ch
Mon Jan 8 21:36:28 EET 2018
On 01/08/2018 06:37 PM, Mihai Osian wrote:
> Salut,
>
> Lucrez la o aplicatie mareata (+500k linii) care pe o singura mashina se
> compileaza in +30 de minute. Fapt care imi permite sa scriu mesaje pe rlug
cu ccache-ul instalat? daca da, poate ar trebui re-organizata structura
de includeuri si semnaturi, vezi
http://en.cppreference.com/w/cpp/language/pimpl
si
https://herbsutter.com/2013/08/19/gotw-7a-solution-minimizing-compile-time-dependencies-part-1/
> ;-). Dorinta mea ar fi sa reduc timpul de compilare.
>
> Ce am:
> - o cireada de servere Redhat cu nr variabil de CPUs fiecare, intre 4 si 24
> - acces prin ssh la oricare
> Directorul de lucru e un Clearcase view (versioning system) disponibil
> pe toate severele. Pentru cine nu e familiar cu clearcase - e oarecum
> similar cu un NFS mount. Secventa de lucru e:
> - ssh catre unul din servere
> - rulat un script de setup pt clearcase
> Dupa asta codul din repository devine vizibil intr-un director predefinit
> de pe serverul remote (the "NFS mount"). Daca dintr-o alta consola efectuez
> ssh + setup catre un alt server voi vedea aceleasi fisiere ca pe primul
> server.
accesul random prin nfs e groaznic si orice compilare prin nfs va avea
penalitati mari ...
> Ce nu am:
> - root access nicaieri (nici pe statia mea de lucru)
> - posibilitatea de a instala librarii sau programe noi (din motive de
> securitate, stampile, audituri)
>
> As vrea sa emulez un distributed make folosind scripturi/utilitare
> standard. Mai concret, as vrea sa pot rula dintr-o consola un script
> fabulos de genul:
> "dmake -j <nr jigantic de CPUs> server1 server2 ..."
distcc face acest lucru , are mod de lucru prin ssh ..
in plus daca ai nevoie de un build-farm (desi firma ar trebui sa iti
asigure toate necesare pentru castigul firmei nu?) vezi asa ceva:
http://www.hardkernel.com/main/products/prdt_info.php?g_code=G150152508314
HTH,
Adrian
>
> In imaginatia mea acest dmake ar lansa "make -j <nr>" pe statia de lucru
> locala, insa substituind "gcc <parametri>" cu un wrapper care:
> - gaseste la fiecare invocare un server remote cu procesoare libere
> - lanseaza "something-like-ssh server_remote gcc <parametri>"
> - asteapta finalizarea gcc-ului de pe serverul remote
>
> Pasul #1 de load-balancing cred ca stiu sa il fac. Ce ma incurca este
> lansarea gcc-ului pe un server remote. Lansarea trebuie sa se intample dupa
> setup-ul de clearcase, care dureaza cateva secunde bune si deci trebuie
> facut doar o singura data pt fiecare server. Asadar, pt fiecare server
> remote am nevoie de:
> - ssh remote
> - clearcase_setup (remote)
> - in a loop (remote):
> while <read command from (tty, stdin, unix-socket ?) > ; do
> exec command ; done
>
> Iar pe statia local, wrapperul de gcc:
> - send command to chosen remote using (pipe, stdout, unix-socket,
> pidgeon ?)
> - wait for command completion
> - display stdout/stderr-ul procesului extern
> - return exit code of external process
>
> Am tot citit pagini de manual de la diverse utilitare standard
> (ssh,tmux,screen,socat) dar nu gasesc nimic care sa functioneze cum imi
> trebuie mie, sau nu stiu eu sa le folosesc. Dintre cele listate "socat"
> pare cel mai promitator, cu o incantatie de genul:
>
> socat UNIX-LISTEN:/tmp/mysocket_1 exec:'ssh server_1',pty,setsid,ctty
>
> urmat de
> echo "clearcase_setup.sh ; g++ a.cpp" | socat - UNIX:/tmp/mysocket_1
>
> Insa nu stiu cum sa pastrez deschis canalul de comunicatie (cand se inchide
> socat-ul "local" moare si ala remote), deci nu pot trimite decat o singura
> linie de comanda. Eu nu stiu dinainte cate/care comenzi vreau sa trimit.
>
> Are cineva vreo sugestie cum sa purced ? Sau impusc tantarul cu tunul si
> exista deja o solutie evidenta si binecunoscuta a problemei de compilare
> distribuita ?
>
> Multumesc,
> Mihai
> _______________________________________________
> RLUG mailing list
> RLUG at lists.lug.ro
> http://lists.lug.ro/mailman/listinfo/rlug_lists.lug.ro
>
--
----------------------------------------------
Adrian Sevcenco, Ph.D. |
Institute of Space Science - ISS, Romania |
adrian.sevcenco at {cern.ch,spacescience.ro} |
----------------------------------------------
More information about the RLUG
mailing list