# [ATTUALITÀ]curiosità tempo compilazione

## ^Stefano^

Ciao ragazzi/e! Scrivo questo post perchè ho sempre sta domanda che mi martella. compilare un sorgente di un programma X su un distro tipo slackware o debian usando per esempio

```
CFLAGS="flags" CXXFLAGS="flags" ./configure

make

make install
```

mi impiega mettiamo 5 minuti. Compilare lo stesso programma X su gentoo con emerge usando in /etc/make.conf le stesse flags usate nell'altra compilazione mi occupa 20 minuti. Come mai emerge impiega sempre tanto a compilare i programmi e invece compilare gli stessi programmi a mano richiede meno tempo? io ho un pentium4 3ghz hyper trading con 1gb di ram ma per alcune cose tipo gnome, xorg mplayer e altri prorammi un po "tosti" devo aspettare davvero troppo tempo. Voi sapete dirmi più o meno quale arcano si cela dietro a cioò?

Stefano

----------

## federico

Ma quale programma in particolare ci mette 5 minuti a compilare in slack e 20 in gentoo per curiosita?

Fede

----------

## ^Stefano^

i tempi sono un esempio, mi sembra di averlo specificato. La domanda base è come mai compilare un programma a mano con le flag attivate impiega meno che installarlo con emerge.

----------

## federico

 *Nello84 wrote:*   

> i tempi sono un esempio, mi sembra di averlo specificato. La domanda base è come mai compilare un programma a mano con le flag attivate impiega meno che installarlo con emerge.

 

Lo hai specificato ma spero sia basato su qualche calcolo preciso il fatto che su gentoo ci mette 4 volte di piu', perche' se mi dici, ci metto un'ora a compilare firefox su slack e 4 su gentoo, mi suona strano, se mi dici che ci metti 5 minuti per nano su slack e 20 su gentoo, mi suona altrettanto strano, e quindi vorrei cercare di capire quanto ci metti tu, per confrontarlo quanto ci metto io (o gli altri sul forum in linea di massima a parita' di macchina) perche' forse potrebbe essere sbagliato qualcosa sul tuo sistema.

Fede

----------

## randomaze

 *Nello84 wrote:*   

> La domanda base è come mai compilare un programma a mano con le flag attivate impiega meno che installarlo con emerge.

 

emerge si ravana un poco nel database.

talvolta applica delle patch che tu forse non consideri.

Tuttavia se questo comporta un incremento dei tempi di 4x su un pacchetto medio il tuo sistema ha dei problemi seri. Se invece si parla di differenze molto inferiori magari fai un esempio reale, indicando tempi, nome dei pacchetti e versione del gcc usato. Altrimenti il tuo esempio equivale a premere a caso sulla tastiera  :Rolling Eyes: 

----------

## GuN_jAcK

effetivamente così è difficle dire... magari ci dici con quale applicazione lo fa   :Confused: 

----------

## ^Stefano^

ok allora prendiamo di esempio mplayer. compilazione di mplayer, solo sorgente, senza calcolare le dipendenze. su slackware con gcc uguale a gentoo, ovvero gcc-3.3.6, ci impiega circa 10 minuti. poco meno, 8 forse. partendo dal configure con le flag, poi make, poi make install.

invece dando emerge -av mplayer e guardando quanto ci mette emerge a compilare solo mplayer, quindi senza considerare anche qua le dipendenze, vedo che il tempo sfiora i 18 minuti. quasi il doppio. vorrei capire come mai. prima quando ho scritto 5minuti su slack e 20 su gentoo era un esempio, per dire che ogni programma impiega meno tempo a compilarsi a mano. provate voi stessi se non ci credete. con questo non voglio dire che gentoo fa schifo e slack no, o che emerge è bacato. vorrei solo capire come mai una compilazione fatta con emerge impiega in genere più tempo che effettuarla a mano.

p.s.= specifico ancora che 5minuti e 20 minuti sono tempi "inventati". non è voluto il fatto che 20 sia 4x5. quella frase andava letta non come "su gentoo impiega 4 volte tanto" ma come "emerge impiega più tempo che il classico configure make make install". e dire che avevo anche specificato che i tempo erano un esempio, non reali. ma se voi lo avete inteso diversamente questo mi porta a pensare che nel vostro sistema emerge compili con la stessa velocità con cui si compila a mano su altri sistemi.sbaglio forse?

----------

## neon

proprio mplayer e' uno dei pacchetti piu' patchati e personalizzati di gentoo, ad esempio a meno che non lo specifichi con una use non prende nemmeno le tue cflags... probabilmente il ./configure effettuato da emerge e' diverso da quello che fai tu.

----------

## ^Stefano^

 *neon wrote:*   

> proprio mplayer e' uno dei pacchetti piu' patchati e personalizzati di gentoo, ad esempio a meno che non lo specifichi con una use non prende nemmeno le tue cflags... probabilmente il ./configure effettuato da emerge e' diverso da quello che fai tu.

 

io ti ho detto mplayer perchè giusto ieri ho compilato quello. ma te lo possodire più in generale:

perchè QUALSIASI pacchetto si installa con emerge richiede più tempo (tempo che varia a seconda del programma che si sta installando) che installarlo a mano su altri sistemi?

----------

## neon

 *Nello84 wrote:*   

> io ti ho detto mplayer perchè giusto ieri ho compilato quello. ma te lo possodire più in generale:
> 
> perchè QUALSIASI pacchetto si installa con emerge richiede più tempo (tempo che varia a seconda del programma che si sta installando) che installarlo a mano su altri sistemi?

 

Ok, allora prendi quello che ho detto su mplayer e consideralo in generale... patch e modifiche varie, use/configure diversi

----------

## ^Stefano^

ok. grazie mille delle delucidazioni!

----------

## neon

Ora che ci penso meglio credo che l'unico modo attendibile per misurare la cosa ed essere certi sarebbe quello di creare un ebuild semplice che non applica patch e che effettua il tuo stesso ./configure per quel pacchetto (anche mplayer) e poi emergerlo... se togli il tempo di estrazione e quello di registrazione del pacchetto nel db i due tempi (comp manuale ed emersione) dovrebbero essere esattamente uguali.

----------

## lavish

Ma non basta un ./configure && make && make install anche su gentoo per questo tipo di verifica?

----------

## X-Drum

 *Nello84 wrote:*   

> io ti ho detto mplayer perchè giusto ieri ho compilato quello. ma te lo possodire più in generale:
> 
> perchè QUALSIASI pacchetto si installa con emerge richiede più tempo (tempo che varia a seconda del programma che si sta installando) che installarlo a mano su altri sistemi?

 

scusa ma, ovviamente noi tutti ci basiamo sui dati da te snocciolati, ora:

-l'esempio dei 20 minuti era "inventato" come tu hai detto 

-il pacchetto mplayer a seconda delle features abilitate via

configure (quindi via use sotto gentoo) che ricordo non sono poche, 

puo' avere tempi di compilazione piu o meno elevati come gia detto da altri.

(e comunque quando usavo slackware la compilazione di mplayer durava parecchio

ma questo è totalmente irrilevante)

adesso imho se si vuole fare una sorta di benchmark o confronto tra i due so

bisogna necessariamente riportare fedelmente:

-tempi effettivi e corretti di compilazione

-versione del pkg da compilare e features abilitate

-versione del compilatore (da te gia riportata)

altrimenti la discussione diviene priva di senso, questo

non perche qualcuno voglia darti del bugiardo o altro

ma solo perchè questo è l'iter da seguire se si vuole

fare un confronto fra le due distro o far emergere (lol)

i problemi che affligono il tuo sistema (ammesso sempre che ne abbia)

----------

## neon

 *lavish wrote:*   

> Ma non basta un ./configure && make && make install anche su gentoo per questo tipo di verifica?

 

A quanto ho capito io si tratta di calcolare la differenza tra questo ed un emerge... il tutto sulla stessa macchina con (presumo) lo stesso s.o. (gentoo)

----------

## randomaze

 *lavish wrote:*   

> Ma non basta un ./configure && make && make install anche su gentoo per questo tipo di verifica?

 

In realtà é quello che andrebbe fatto... altrimenti tra le variabili di cui tener presente c'é anche la configurazione del kernel.

A proposito, l'hyperthreading lo hai abilitato? Perché quel tempo di compilazione con mplayer mi sa che lo faccio con il mio AthlonXP 2200+  :Rolling Eyes:  (non sono sicurissimo, stasera controllo...)

----------

## salade

Se può servire:

```

     Sat Nov 26 15:24:19 2005 >>> media-video/mplayer-1.0_pre7-r1

       merge time: 5 minutes and 39 seconds.

```

```

[ebuild   R   ] media-video/mplayer-1.0_pre7-r1  -3dfx -3dnow -3dnowext +X -aac -aalib +alsa (-altivec) +arts -bidi -bl -cdparanoia -cpudetection -custom-cflags -debug -dga +directfb -doc -dts -dv +dvb +dvd +dvdread -edl +encode +esd -fbcon -ggi +gif +gtk -i8x0 -ipv6 +jack -joystick +jpeg -libcaca +lirc -live -lzo +mad -matroska -matrox +mmx -mmxext -mythtv -nas +nls -nvidia +opengl +oss +png -real -rtc +samba +sdl -sse -sse2 -svga -tga -theora +truetype -v4l -v4l2 +vorbis +win32codecs -xanim +xinerama +xmms +xv +xvid -xvmc 0 kB

```

```

homer ~ # cat /proc/cpuinfo

[...]

model name      : Intel(R) Pentium(R) 4 CPU 2.66GHz

[...]

(senza ht)

```

```

homer ~ # cat /proc/meminfo

MemTotal:      1034584 kB

[...]

```

----------

## ^Stefano^

 *X-Drum wrote:*   

> 
> 
> scusa ma, ovviamente noi tutti ci basiamo sui dati da te snocciolati, ora:
> 
> -l'esempio dei 20 minuti era "inventato" come tu hai detto 
> ...

 

tu hai perfettamente ragione in quello che dici in questo post. ma la mia domanda era proprio semplice, senza andare a cercare complicazione o dover leggere un howto sugli ebuild per avere la risposta. e difatti chi mi ha detto "la compilazione con emerge può essere più lunga perchè emerge applica delle patch o fa qualcosa descritto nell'ebuild che tu con un semplice configure non fai" mi ha dato la risposta "più giusta". altresi ritengo che mplayer sia un esempio da non usare, anche se io l'ho usato, perchè appunto abilita un sacco di cose installandolo con emerge, che magari a mano con il configure non vengono abilitate. ma un esempio semplice semplice può essere quello di nano, di xchat, di amsn o di altri programmi davvero semplici dove su un qualsiasi sistema basta solo un ./configure senza --enable-chissàche per far notare che emerge impiega un poco di più a compilare. concordo anche con chi ha detto che per fare una buona prova bisognerebbe scriversi un ebuild semplice e paragonarlo con un ./configure che ha le stesse opzioni dell ebuild. non concordo con chi ha detto "ma non basta un semplice ./configure && make && make install" perchè la domanda non era la differenza tra le compilazioni su due sistemi, era tra la compilazione "manuale" e quella che effettua emerge. 

randomaze: si l'hyper trading è abilitato, anche se con il chipset intel e controller ICH da un sacco di problemi....ma questo è un altro discorso e sto facendo già delle ricerche specifiche. ad ogni modo ti posso assicurare che abilitarlo o no non porta chissà quali miglioramenti, almeno a vista d'occhio. ad ogni modo ringrazio tutti per le risposte e chiedo scusa se sono stato poco chiaro nei post!

Stefano

----------

## randomaze

 *Nello84 wrote:*   

> "ma non basta un semplice ./configure && make && make install" perchè la domanda non era la differenza tra le compilazioni su due sistemi, era tra la compilazione "manuale" e quella che effettua emerge. 

 

Allora per avere il dato che vai cercando devi fare entrambe le operazioni sullo stesso sistema, ovvero prendere i tempi di "./configure && ..." e di  emerge su gentoo.

----------

## lavish

 *Nello84 wrote:*   

> non concordo con chi ha detto "ma non basta un semplice ./configure && make && make install" perchè la domanda non era la differenza tra le compilazioni su due sistemi, era tra la compilazione "manuale" e quella che effettua emerge.

 

Non concordo nemmeno io su quello che ho detto se ti interessava quanto hai esposto adesso allora   :Laughing: 

Io pensavo che tu volessi comunque OLTRE alla compilazione via emerge, provare a raffrontare la compilazione "nuda e cruda" sulla stessa macchina con 2 distro differenti, quali gentoo e slack  :Wink: 

----------

## Lestaat

 *randomaze wrote:*   

>  *Nello84 wrote:*   "ma non basta un semplice ./configure && make && make install" perchè la domanda non era la differenza tra le compilazioni su due sistemi, era tra la compilazione "manuale" e quella che effettua emerge.  
> 
> Allora per avere il dato che vai cercando devi fare entrambe le operazioni sullo stesso sistema, ovvero prendere i tempi di "./configure && ..." e di  emerge su gentoo.

 

Faccio una piccola considerazione al volo:

Tempo di emerge:

(diamo per scontato che il download è già avvenuto)

colcolo delle dipendenze (anche se già presenti)

controllo dell'md5

scompattazione del tar

applicaizone delle patch

configure

make

make install

cancellazione dei sorgenti dalla dir di lavoro

regenerationg ld.so

Come si vede chiaramente fare un emerge è ben lungi dall'essere la stessa cosa che fare configure && make && make install

Non so se questo possa bastare a spiegare la differenza dei tempi ma anche questo conta.

----------

## Kernel78

Magari il fatto che il compilatore su gentoo viene compilato con le flag che specifichi tu mentre quello della slack è già compilato e in base alle flag che hai usato potresti anche aver peggiorato le prestazioni del compilatore.

Poi magari usi gentoo da stage 3 e quanto appena detto non conta niente  :Wink: 

----------

## ^Stefano^

infatti uso gentoo da stage3!

@Lestaat: il mio conteggio parte da qua: configure e si ferma qua make install. Le altre azioni da te citate io non le considero. (non sono proprio così stupido...  :Laughing:  )

@lavish: Io volevo solo capire perchè i comandi configure make e make install dati via emerge richiedono più tempo che gli stessi comandi dati da me. io ho fatto l'esempio della distro slack ma potrei fare lo stesso esempio stando solo su gentoo o facendo gentoo debian, gentoo mandrake, gentoo freebsd etc etc. avevo anche pensato che le use potessero togliere tempo, ma alcuni programmi, quando do

```
emerge -av programma
```

non mi inseriscono alcuna use flag. cflags come queste

```
CFLAGS="-march=pentium4 -O2 -pipe -fomit-frame-pointer"

CHOST="i686-pc-linux-gnu"

CXXFLAGS="${CFLAGS}"

```

possono aumentare tanto il tempo di compilazione in generale? penso che siano più o meno le flags standard che si possono mettere con un pentium4. Opzioni varie che possono diminuire il tempo di compilazione ce ne sono?

----------

## Kernel78

Se togli le ottimizzazioni il tempo di compilazione si dovrebbe ridurti ma non penso che il gioco valga la candela   :Wink: 

----------

## Lestaat

 *Nello84 wrote:*   

> infatti uso gentoo da stage3!
> 
> @Lestaat: il mio conteggio parte da qua: configure e si ferma qua make install. Le altre azioni da te citate io non le considero. (non sono proprio così stupido...  )
> 
> 

 

 :Laughing: 

Immaginavo ma è la prima cosa che mi è venuta in mente..  :Smile: 

----------

## silian87

Spesso e volentieri non viene contato il tempo per fare l'installazione in sandbox, che e' pure lui considerevole.

----------

## =DvD=

Io ho notato che compilando le glibc con la use nptl e glibc-omitfp rende il sistema _molto_ più veloce.

Probabilmente su debian sono compilate a quel modo.

Fai questa prova

----------

## ^Stefano^

il significato della use nptl l'ho trovato, quello di glibc-omitfp no. a cosa serve questa utlima? eventualmente io le metterei in make.conf e ricompilerei tutto il sistema, potrei avere problemi?

ma voi se aggiungete una o due use al make.conf ricompilate sempre l'intero sistema oppure no?

----------

## =DvD=

emerge -N world per ricompilare solo i pacchetti affetti dale nuove use.

applica la fomit-frame-pointer alle glibc

----------

## COReE

Ecco qualcosa che può servirvi su glibc... 

Ha funzionato molto bene sul mio portatile con un risultato di 

memcopy 2.1 x quello di gentoo stable con glibc-2.3.6 compilato coi use di default, e udite udite...

3.5 x quello dell attuale debian(sid with libc6_2.3.5-8.1) ovviamente senza la patch che devo addatare.

link: https://forums.gentoo.org/viewtopic-t-376943.html

----------

## Matteo Azzali

 *Nello84 wrote:*   

> 
> 
> il mio conteggio parte da qua: configure e si ferma qua make install. Le altre azioni da te citate io non le considero. (non sono proprio così stupido...  )
> 
> 

 

Allora hai fatto un qualche tipo di macello coi file di configurazione (probabilmente il make.conf) perche'

"togliendo" le use flags la differenza di tempo tra emerge e compilazione "nuda e cruda" alle condizioni

che hai citato e' risibile (meno dell'1% per compilazioni superiori a 5 minuti).

----------

## ^Stefano^

guarda le mie use flag ai tempi della prova erano semplicemente "gtk gnome alsa cdr" e le cflags normalissime per un pentium4. adesso ho aggiunto abbastanza use che mi servono e sono quattro (4) ore che compila openoffice 2.0   :Shocked:   :Shocked:   :Shocked: 

hai qualche consiglio da darmi riguardo a qualche file di configurazione?

----------

## Luca89

per openoffice è normale che ci stia tutto questo tempo. Usa openoffice-bin se vuoi sbrigarti.

----------

## ^Stefano^

eh guarda penso anche che openoffice-bin sia lievemente più aggiornato perchè quando installai la openoffice era la 1.1.4 mentre la -bin era 1.5.

ad ogni modo vi farò sapere entro domani come andrà il sistema dopo la nuova compilazione dell glibc con le flag nuove!

----------

## ^Stefano^

=DvD= sto seguendo il tuo consiglio però per nptl ho un dubbio. inserisco in make.conf solo nptl oppure tu intendi 

sys-libs/glibc:nptlonly - Disables building the linuxthreads fallback in glibc ebuilds that support building both linuxthreads and nptl.

ad ogni modo inserendo nptl e glibc-omitfp poi dando emerge -Nav world mi ricompila solo glibc, quindi tutto ok. però sono indeciso su quale delle due use mettere, penso che tu mi avessi voluto dire nptlonly avresti scritto glibc-nptlonly e non solo nptl giusto? d'altro canto hai scritto glibc-omitfp quindi....

ho inteso giusto? io faccio partire la ricompilazione....magari dimmi cosa intendevi che al massimo se mi da problemi ricompilo!

ho anche disinstallato openoffice perchè dopo l'aggiornamento non avevo più gli eseguibili da nessuna parte. senza troppo chiedermi perchè l'ho direttamente tolto e ho messo openoffice-bin che si è compilato in pochissimi minuti!

----------

## =DvD=

hai capito benissimo!

Sembri l'omino timido di bruscocartoons =P

=D

----------

## ^Stefano^

 *=DvD= wrote:*   

> hai capito benissimo!
> 
> Sembri l'omino timido di bruscocartoons =P
> 
> =D

 

 :Rolling Eyes:   :Rolling Eyes: 

devo dire che il tuo suggerimento ha dato buoni risultati! il sistema è a vista d'occhio più performante, sia nell'avvio dello stesso che nell'avvio di programmi quali firefox (che impiega non poco ad avviarsi), valknut, acroread, openoffice etc...

grazie mille a tutti di tutto!

----------

## Matteo Azzali

 *Nello84 wrote:*   

> guarda le mie use flag ai tempi della prova erano semplicemente "gtk gnome alsa cdr" e le cflags normalissime per un pentium4. adesso ho aggiunto abbastanza use che mi servono e sono quattro (4) ore che compila openoffice 2.0    
> 
> hai qualche consiglio da darmi riguardo a qualche file di configurazione?

 

Ehm... non so se lo sai ma le use flags non sono semplicemente quelle nel file make.conf , perche' c'e' il profilo dietro

(ad esempio se non dai nulla e' come se stessi dando gnome e kde insieme), lo puoi vedere dal programma ufed.

Cmq io in genere scrivo ebuilds dopo aver compilato un programma, e poi le testo. E le mie semplici ebuilds con pochi

use flags richiedono (in compilazione) lo stesso identico tempo della compilazione manuale.

----------

## ^Stefano^

si lo so che non ci sono solo quelle in make.conf però io ufed ancora non l'ho installato.

diciamo che fino ad ora non ho avuto problemi a trovare il significato di una use nei file use.desc e use.local.desc. 

```
# emerge -av nome_programma
```

vedo le use, quelle che non so le vado a cercare e fino ad ora le ho sempre trovate tutte, anche quelle che sono specifiche di un programma, come glibc-omitfp che in use.esc non ce ma si trova in use.local.desc

----------

## Luca89

il significato di una use puoi cercalo più facilmente con "euse -i use_flag" (euse appartiene ad app-portage/gentoolkit)

 *Quote:*   

> ho anche disinstallato openoffice perchè dopo l'aggiornamento non avevo più gli eseguibili da nessuna parte. senza troppo chiedermi perchè l'ho direttamente tolto e ho messo openoffice-bin che si è compilato in pochissimi minuti!

 

Il binario non viene compilato ma installato direttamente  :Wink: 

 *Quote:*   

> =DvD= sto seguendo il tuo consiglio però per nptl ho un dubbio. inserisco in make.conf solo nptl oppure tu intendi
> 
> sys-libs/glibc:nptlonly - Disables building the linuxthreads fallback in glibc ebuilds that support building both linuxthreads and nptl.
> 
> ad ogni modo inserendo nptl e glibc-omitfp poi dando emerge -Nav world mi ricompila solo glibc, quindi tutto ok. però sono indeciso su quale delle due use mettere, penso che tu mi avessi voluto dire nptlonly avresti scritto glibc-nptlonly e non solo nptl giusto? d'altro canto hai scritto glibc-omitfp quindi....
> ...

 

Compilando le glibc con "+nptl -ntplonly" ci vorrà molto più tempo perchè verranno compilate due volte (una con nptl, una con linuxthreads), io ti consiglio "+nptl +nptlonly", il supporto a linuxthread protrebbe servire in caso installi binari che non supportano le nptl ma al giorno d'oggi credo che tutti i binari forniti da chi distribuisce software proprietario siano aggiornati alle nptl. "glibc-omitfp" mi pare di capire che serve per permettere alle glibc di calcolare quando è sicuro abilitare -fomit-frame-pointer, personalmente metto sempre questa cflag e non mi da problemi con nessun programma.

----------

