PDA

View Full Version : Compilazione distribuita di più kernel simultaneamente


kurts
14-12-2009, 11:43
salve, sto portando avanti un progettino (IMHO niente male) ed ora mi trovo con questo dubbio amletico...
dunque, la domanda fondamentale è semplice:
posso compilare "n" kernel (sia versioni uguali che diverse) allo stesso tempo sulla stessa macchina??

cercando in rete pare che nessuno si sia mai posto questo problema (o che non l'abbia mai avuto), pensando ci 5 minuti ho concluso che, se per copilare i kernel si usa il symlink /usr/src/linux la risposta è "ovviamente no".

e se io invce non usassi quel link?
voglio dire, se compilassi tutto nella directory che crea l'estrazione della tarball?
ad esempio linux-source-2.6.bla-bla...

leggendo questo (http://linuxmafia.com/faq/Kernel/usr-src-linux-symlink.html)post di torvalds (niente popò di meno di...) anche lui consiglia di lasciar perdere il symlink, ma il dubbio ed il timore, mi vengono quando leggo che i maintainers delle glibc stessi continuano a contare sull'esistenza di questo link, e se non lo trovassero??
mi rendo conto che la cosa peggiore sarebbe la compilazione di un kernel corrotto ma, dato che sul mio poveretto di un pc ci metto anche 5 ore a compilare un kernel generico senza nessuna ottimizzazione o potatina sono un po' titubante...

qualcuno si è mai posto questo interrogativo? avete risolto in qualche modo?

Gimli[2BV!2B]
14-12-2009, 19:44
Puoi compilare quanti kernel vuoi contemporaneamente, ma direi che è assolutamente controproducente.

Con l'opzione j puoi saturare il sistema con una singola compilazione (http://www.linuxtopia.org/online_books/linux_kernel/kernel_configuration/ch05s04.html), mentre lanciando più compilazioni in parallelo finiresti per saturare prima il sottosistema disco (un disco meccanico passerebbe dei brutti momenti, un ssd un po' meno...), ottenendo quasi certamente risultati peggiori.

Il link simbolico /usr/src/linux mi torna utile solo quando mi capita di compilare qualcosa che va a cercare i sorgenti del kernel.

kurts
14-12-2009, 21:06
si, certo, non ho intenzione di compilarmi 50 kernel tutti assieme sulla stessa macchina, ma nemmeno 2 alla volta.
forse è il caso di svuotare il sacco??

dunque, da dove comincio...
questa idea mi è nata circa un annetto fa, stavo cercando di pensare ad un progetto che potesse essere portato come tesi di laurea (informatica) e mi sono trovato a ragionare su quanto potesse essere bello un servizio di compilazione kernel online (poi le cose sono andate diversamente e la tesi pure...).

il concetto non è difficile, avete mai compilato un kernel su un computer non troppo potente? magari un P3 500MHz con 256MB di ram? e magari un kernel non troppo ottimizzato, qualcosa di generico da far girare su tutte le vostre macchine che avete in casa?
io si, e tutte le volte mi veniva voglia di tagliarmi le vene, anche perchè un computer del genere in compilazione è praticamente inutilizzabile!!

allora mi sono detto, ma quanto sarebbe figo se potessi usare tutti i miei pc (essì, ne ho un po') per compilare un kernel in maniera distribuita?
dunque mi sono documentato, ho scoperto distcc, bellissimo software che permette di distribuite la compilazione tramite gcc su una intera rete di computer.
l'ho installato su 4 pc, l'ho configurato a dovere ed ho lanciato sta benedetta/maledetta compilazione del kernel, beh, come intuirete tutti quanti è stata tutta un'altra storia!!
nonostante i computer non fossero particolarmente potenti la differenza l'ho notata eccome!

la mia rete era composta da:
P4 1,7GHz 640MB
P3 533MHz 128MB
duron 700MHz 512MB
P1 133MHz 64MB

come funziona distcc?
riducendo all'osso:
si installa un distccd (notare la d) su una macchina principale, il client, questo demone si occuperà di intercettare tutte le chiamate a gcc e le diestribuisce ai vari server della rete in base a quali sono al momento disponibili e ad una lista di priorità.

una volta finito di compilare il mio primo kernel "distribuito" ero tutto gasato ed ho pensato: "beh, ma non mi risulta che esista una cosa del genere in rete al giorno d'oggi...", al ché mi sono messo a lavorare per tirare su un server web con DB e annessi e connessi che fosse in grado di ricevere le richieste della "povera gente", fatto questo mi mancava da implementare il "dietro le quinte" ma poi il tempo ha cominciato a scemare ed ho lasciato perdere tutto quanto.

ora che la tesi è finita ho finalmente ancora un po' di tempo da poterci dedicare e mi chiedevo se qualcuno avesse dei consigli o magari volesse addirittura partecipare allo sviluppo di questo progetto.

detto questo, fatevi avanti...

Mister24
14-12-2009, 22:34
Tre considerazioni:
I PC sono sempre più potenti e dunque la compilazione del kernel che un tempo impiegava diverse ore attualmente richiede poche decine di minuti e in futuro sempre meno.

La gente che ha necessità di compilare il kernel da se è veramente poca.

Ti ci vuole una potenza di calcolo disumana, metti che un centinaio di persone ti chiedano di compilare il kernel. Mi sembra normale che dovresti compilare il kernel più velocemente di come lo farebbero sul loro PC. Inoltre come pensi di pagare tutta questa potenza? I PC andrebbero sempre tenuti aggiornati altrimenti nel giro di pochi mesi ti ritrovi con niente.

Per questi motivi penso che il progetto non sia realizzabile e poco utile.

kurts
14-12-2009, 22:39
Tre considerazioni:
I PC sono sempre più potenti e dunque la compilazione del kernel che un tempo impiegava diverse ore attualmente richiede poche decine di minuti e in futuro sempre meno.

La gente che ha necessità di compilare il kernel da se è veramente poca.

Ti ci vuole una potenza di calcolo disumana, metti che un centinaio di persone ti chiedano di compilare il kernel. Mi sembra normale che dovresti compilare il kernel più velocemente di come lo farebbero sul loro PC. Inoltre come pensi di pagare tutta questa potenza? I PC andrebbero sempre tenuti aggiornati altrimenti nel giro di pochi mesi ti ritrovi con niente.

Per questi motivi penso che il progetto non sia realizzabile e poco utile.

hai ragione, concordo.

ma la voglia di imparare e di sperimentare dove la mettiamo?

HexDEF6
15-12-2009, 08:37
se non ricordo male kernel, xorg e pochi altri pacchetti sono tra quei pacchetti che non si possono (piu' che altro non si dovrebbero) compilare nemmeno con un -j 3 pena problemi vari...
con altri pacchetti, distcc risolve il problema... pero' funziona bene se tutte le macchine sono allineate (pensa se ci fossero 2 gcc differenti, credo che il risultato possa essere un casotto)

Ciao

Dane
16-12-2009, 10:30
comunque, per usare distcc con profitto devi usare un numero di j pari a (circa) il totale dei processori che compilano (vado a memoria).

Su sistemi vecchi,
secondo me una delle soluzioni migliori ( a parte di smontare il disco e infilarlo nel pc più potente) è di far fare al "lento" da server NFS, e di chroottare (in caso fare un chroot a 32 bit partendo dal sistema a 64bit) dal pc "potente", magari compilando in ram.
vado avanti così da 6 mesi e non ho sostanziali problemi (gentoo).



Comunque, se il problema era che stavi troppo tempo a compilare il kernel, potevi risolvere compilandolo da un altro pc e poi spostare solo kernel ed eventuali moduli.

kurts
17-12-2009, 10:45
con distcc non c'è bisogno di impostare il numero di processori utilizzati nella compilazione e nemmeno di montare dischi remoti con nfs.
il distccd si occupa di inviare una piccola parte dei file compilati ad vari server disponibili che quindi se li compilano in locale per poi restituirli compilati al client.

l'unica accortezza è di avere sempre la stessa versione di gcc su tuttti i client, altrimenti potrebbero verificarsi strani problemi.

inoltre non è che non abbia gia provato a compilare sulla macchina più potente, il problema è che per me ci mette comunque troppo:p