[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