# Hyper Threading e MAKEOPTS

## makami

Volevo parlare un pò dell' Hyper Threading e della variabile MAKEOPTS.

Sto usando L' hyper threading con l'ultimo kernel stabile gentoo, con la variabile MAKEOPTS="-j3"

Da quel che ho capito la variabile MAKEOPTS entra in funzione solo durante la compilazione di un' ebuild, per le quatidione operazioni svolte dalla cpu (o dalle cpu logiche) non viene presa in considerazione, o sbaglio?

Voi avete tratto dei reali vantaggi dall' hyper threading? o solo qualche placebo?

Ricordo che su win qualche anno fa erano pochi i programmi che traevano giovamento dall' hyper threading, si diceva che alcuni tipi di operazioni potessero essere addirittura rallentati.

Che dite, ci può dare una mano in velocità questo hyper threading?

----------

## BikE

Direi che non serve a nulla... a meno che tu non abbia piu' CPU o stia facendo cross-compiling...

----------

## .:chrome:.

non ho capito molto della tua domanda...

in generale: $MAKEOPTS viene usata solo da portage, ovviamente, perché è un'impostazione DI portage, e non puoi ovviamente pretendere che venga applicata anche ad una compilazione fatta senza portage.

l'effetto è quello di passare, a make, il parametro -j "$MAKEOPTS", che avvia $MAKEOPTS istanze di compilazione parallele. ci sono casi in cui, a causa di Makefile strutturati non troppo bene, o di gerarchie di dipendenza fatte male o del tutto assenti, in cui non si hanno vantaggi, ma in generale qualcosa cambia.

in che termini cambi dipende dal parametro passato. se leggi, in make.conf.example c'è scritto di impostare ((numero di processori visti dal kernel) + 1), ed è quello che io ho sempre fatto con ottimi risultati.

quanto all'efficacia dell'HyperThreading in sè, basta guardare come è strutturato ed implementato, per accorgersi delle potenzialità che offre. non sarà mai come avere due processori separati, ma di certo è molto meglio che averne uno solo. anzi... a volte è anche meglio del doppio processore (in casi rari)

----------

## BikE

 *k.gothmog wrote:*   

> non sarà mai come avere due processori separati, ma di certo è molto meglio che averne uno solo. anzi... a volte è anche meglio del doppio processore (in casi rari)

 

Un conto e' avere due processori distinti che lavorano separatamente... un altro conto e' invece averne uno solo che "fa finta di essere doppio"   :Wink: 

----------

## makami

grazie per le risposte, in effetti hai schiarito i miei dubbi.

MAKEOPTS funziona come pensavo, però avevo qualche dubbio.

Vedo graficamente che le cpu quando compilo lavorano entrambe al 50% ciascuna, questo mi rendeva un pò dubbioso..

----------

## X-Drum

 *makami wrote:*   

> Vedo graficamente che le cpu quando compilo lavorano entrambe al 50% ciascuna, questo mi rendeva un pò dubbioso..

 

LA cpu, è una sola....

HyperThreading(HT), DualCore(X2)... (che cmq sono due cose differenti) 

sono "stratagemmi" che senza dubbio aumentano il boost prestazionale della cpu 

per determinate operazioni, ma vi prego ricordate che la cpu è una

anche nel caso del DualCore la cpu è sempre una!

UNA!!!

----------

## makami

Ero convinto che nel dual core fossero due, 2 cpu in un unico pezzo, così avevo letto. Dual core Hyper threading infatti sapevo fossero 4 cpu logiche, le due vere (in un unico pezzo) e le due virtuali..

Hanno anche due cache L2 distinte

Sei sicuro che sia una sola?

----------

## X-Drum

 *makami wrote:*   

> Sei sicuro che sia una sola?

 

è una!!!

il fatto di avere due core non significa avere due cpu:

due entità distinte e separate, sebbene il dualcore rispetto all'HT 

è sicuramente una tecnologia piu' performante, hai una sola cpu

con 2 core

----------

## thewally

 *X-Drum wrote:*   

>  *makami wrote:*   Sei sicuro che sia una sola? 
> 
> è una!!!
> 
> il fatto di avere due core non significa avere due cpu:
> ...

 

 :Laughing:  LOL Calmo X-Drum... a cuccia bello...   :Laughing:   :Laughing: 

Comunque, mi pare di ricordare che nel DualCore X2 siano condivise anche le cache...

Se fosse giusto alontanerebbe ancora di più l'idea dell'avere due cpu distinte   :Wink: 

----------

## makami

Copio la prima frase di http://it.wikipedia.org/wiki/Dual_core

```
Una CPU dual core unisce due processori indipendenti, le rispettive cache e i cache controller in una singola porzione di silicio o circuito integrato
```

 :Rolling Eyes: 

----------

## lavish

Probabilmente X-Drum intende dire che la CPU (Central Process Unit) rimane una sola, anche se "ingloba" due processori... mi sa che è questo il succo del suo discorso.

Ad ogni modo, non c'è motivo di scaldarsi X-Drum   :Confused: 

----------

## xchris

una parolina sul HT.

Io ho 2 xeon HT e l'HT lo tengo sempre abilitato per diversi motivi.

Prima di spiegarne i motivi vorrei ricordare che la CPU finta aggiuntiva viene utilizzata in compilazione solo quando nel ebuild e' presente il comando emake e non il comando make.

Quando c'e' emake viene considerata la variabile MAKEOPTS.

Risultato? su compilazioni lunghe l'effetto si fa sentire abbastanza (ma non fa miracoli ovviamente)

Puo' l'HT rallentare il sistema?

Certo che si. Se sei un giocatore incallito ti suggerisco di disattivarla perche' la singola CPU splittata e' + lenta della CPU non splittata.

L'HT serve unicamente quando vengono lanciati N processi contemporaneamente e quindi trova il suo campo d'azione su server (non a caso e' stata attivata prima sugli XEON) e su desktop Linux un po' complessi.

Il mio desktop e' in realta' un server con n-mila servizi e trovo che l'HT dia un po' di respiro alla macchina.

Non importa se il singolo processo sarà un po' più lento...l'insieme di N processi risulta comunque + veloce.

Ho fatto anche molte prove cambiando il parametro -jN e sulla mia ho trovato ottimale -j5, quindi direi che la formula indicata normalmente e' corretta. (per te e' un -j3)

Fai qualche test ma ricordati di ispezionare l'ebuild per la presenza di emake e non considerare pacchetti piccoli perche' i tempi extra-compilazione iniziano ad avere un peso maggiore sul calcolo di tempo di emerge.

Ciao

----------

## makami

L' Hyper Threading mi da un problema.

Ieri avevo il pc acceso per 15 ore consecutive cira.. ho visto un film, navigato, giocato, ricompilato un kernel, emerso dei pacchetti eccettera.. tutto ok..

Ad un certo punto il pc è diventato sempre più lento, i comandi rispondevano moolto in ritardo, non riuscivo a scrivere sulla shell o da qualsiasi altra parte da quanto erano lunghi i tempi di risposta.. e subito dopo.. freeze del sistema, ho dovuto riavviare premendo il tastino.

Questa cosa mi succede quando attivo l'Hyper threading, mi succedeva anche con gli altri kernel che ho provato, sia Vanilla che Gentoo.

Devo disattivarlo o qualcuno ha qualche consiglio idea da darmi?

----------

## randomaze

 *makami wrote:*   

> Ad un certo punto il pc è diventato sempre più lento, i comandi rispondevano moolto in ritardo, non riuscivo a scrivere sulla shell o da qualsiasi altra parte da quanto erano lunghi i tempi di risposta.. e subito dopo.. freeze del sistema, ho dovuto riavviare premendo il tastino.

 

Sei sicuro che dipenda dall'HT e non da qualche applicazione che si dimentica di rilasciare la memoria e, per puro caso questo lo noti solo quando sei con l'HT attivo?

Avevo notato che, in particolari condizioni firefox fa questo scherzo e in qualche ora diventa enorme.... ti suggererirei di provare a fare le tue cose normali e, periodicamente (ovvero ogni 2/3 ore) fai dei controlli con top per verificare le occupazioni di memoria.

----------

## makami

Sono sicuro al 100% che succede solo quando l'HT è attivo. 

Mi era successo anche in passato, alla fine avevo dovuto toglierlo.

Il problema è che non capisco perchè quando ho l'ht attivo a volte capita che si blocchi tutto, facendo sempre le solite cose, sembra che capiti in random..

Ora ho tolto questi moduli dal kernel:

<*> /dev/cpu/*/msr - Model-specific register support

<*> /dev/cpu/*/cpuid - CPU information support 

Non so che fare per capire perchè l'ht freeze il mio sistema, lo faceva anche con installazioni passate, con kernel diversi, quindi penso che magari sto sbagliando io nel mettere o non mettere qualcosa nel kernel, oppure è un problema dell' ht del mio processore (che sun win funzionava senza problemi però..)

----------

## X-Drum

 *lavish wrote:*   

> Probabilmente X-Drum intende dire che la CPU (Central Process Unit) rimane una sola, anche se "ingloba" due processori... mi sa che è questo il succo del suo discorso.
> 
> Ad ogni modo, non c'è motivo di scaldarsi X-Drum  

 

è una!!!!

lol, e chi si scalda  :Smile:  cazzeggio mode on

----------

## Cazzantonio

cavolo a questo punto siamo curiosi X-drum.... motivacelo con dati e fatti please   :Confused: 

Perché i dual-core dovrebbero essere una sola cpu se hanno due core? (premetto che non ci capisco un cazzo di processori et similia a parte le cose base che tutti conosciamo)

----------

## X-Drum

ok , non c'è nulla da capire le cpu sono due: adesso siete  tutti contenti  :Very Happy: 

imho, e per inciso imho scherzi a parte, è esagerato fare riferimento

ad una cpu con HT (es:p4) o una con tecnologia dualcore (es:athlon x2)

come a due cpu , ovvero due entita' distinte e separate.

Entrambe le implementazioni (come detto prima X2 rispetto ad HT è gia + performante)

comunque mettono a disposizione qualcosa in piu' (le peformance alla fine parliamoci chiaro non è 

che vengano incrementate drammaticamente, e questo l'ho provato di persona), per cui imho

la cpu è una

lal in ogni caso un po di cazzeggio passatelo al vostro lamer preferito, dopo tutto è natale

----------

## makami

Ho provato a ricompilare il kernel abilitando e/o disabilitando delle opzioni riguardanti la cpu idverse volte, purtroppo quanod meno me l'aspetto il sistema crasha. ho disabilitato l'ht, ora tutto apposto.. spero un giorno di scoprire il motivo..

----------

## ^Stefano^

[ot] x-drum ma stai a ferrara? bhe potremo beccarci...ma lol un ferrarese sul forum di gentoo   :Laughing:   :Laughing:   [/ot]

io ho un pentium 4 hyper trading e posso dire che su linux la situazione non è ancora rosa e fiori. purtroppo da quando il kernel ha implementato la funzione SMT invece della sola SMP, l'ht su alcune combinazioni di hardware da grossi problemi al boot della macchina. mi riferisco in particolare all'hyper trading che convive con chipset intel i875 etsimili che hanno controller ICH. ho già trovato 4 5 persone sia nella mia città che nella rete che con questa combinazione di hardware hano problemi ad abilitare l'ht.  gli stessi problemi non li avevano quando il kernel usava solo l'opzione SMP. 

riguardo all'opzione MAKEOPTS io, sul mio pc, ho trovato decisamente migliore impostare il numero di cpu e basta. anzi, impostando il numero di cpu+una mi veniva rallentata la compilazione di portage. ricompilare lo stesso programma con -j2 invece di -j3 l'ha velocizzata.

----------

## makami

grazie Nello84, penso sia il mio stesso problemo visto che la mia scheda madre ha come chipset l'intel 865PE, molto simile  all' 875..

più avanti se vedrò qualcosa di diverso con un make menuconfig proverò a riabilitarlo, per ora resto senza.

MAKEOPTS ti dava risultati migliori cn -j2 probabilmente perchè con -j2 usavi solo uno dei due processori logici, con -j3 li usavi entrambi, sfruttando meglio l' hyper threading, il quale ti dava problemi.

----------

## xchris

quando hai fatto le prove Nello84 ti sei assicurato che l'ebuild fosse ok per la compilazione distribuita? (emake)

il test andrebbe condotto su un pacchetto grandino e con emake.

Mi sembrano strani i tuoi risultati perche' a me ha fatto una certa differenza.

A gennaio magari riprovo e posto i risultati.

Ciao

----------

## ^Stefano^

si ho provato ma magari riprovo anche io. ad ogni modo i problemi che riscontro io sono il mancato avvio della tastiera al boot, oppure del mouse. questo accade 3 volte su 10 e accade 0 volte su 10 se disabilito l'smp e smt. ho provato anche a tenere solo l'smp ma nada. ma -j2 dovrebbe usare i due processori (uno logico e uno fisico), non uno solo. perchè se la regola è il numero delle cpu più uno allora -j2 è il numero delle cpu, più uno diventa -j3. però secondo me funziona meglio con -j2 perchè sfrutta le due cpu che in realtà il sistema vede. perchè con -j3 deve distribuire la 3° compilazione tra le due cpu, non ne crea un altra per l'occasione. almeno, IMHO.

voi cosa ne dite?

----------

## xchris

in realtà il terzo processo non e' distribuito tra i 2 processori logici (sono 2 logici non 1 fisico e 1 logico  :Smile:  ) ma e' assegnato ad uno dei due.

Diciamo che la regola del +1 serve per sfuttare meglio i tempi morti (momenti in cui legge e scrive su FS)... o per lo meno credo  :Smile: 

ciao

----------

## X-Drum

 *Nello84 wrote:*   

> [ot] x-drum ma stai a ferrara? bhe potremo beccarci...ma lol un ferrarese sul forum di gentoo     [/ot]
> 
> 

 

non sono ferrarese.... :X a ferrara ci vivo (per ora...)

----------

## ^Stefano^

 *xchris wrote:*   

> in realtà il terzo processo non e' distribuito tra i 2 processori logici (sono 2 logici non 1 fisico e 1 logico  ) ma e' assegnato ad uno dei due.
> 
> Diciamo che la regola del +1 serve per sfuttare meglio i tempi morti (momenti in cui legge e scrive su FS)... o per lo meno credo 
> 
> ciao

 

in base a cosa va meglio -j3 invece che -j2 o -j5? parliamo sempre di UN pentium4 hyper trading. 

ma l'opzione che io metto in make.conf è solo per portage; mentre se anche nella compilazione manuale volessi questa opzione dovrei darla a mano, assieme al comando make?

----------

## gutter

 *Nello84 wrote:*   

> 
> 
> in base a cosa va meglio -j3 invece che -j2 o -j5? parliamo sempre di UN pentium4 hyper trading. 
> 
> 

 

Diciamo che a grosse linee la spiegazione dovrebbe essere: se tu hai un sistema SMP dovresti essere in grado di fare girare più processi contemporaneamente almeno uno su ogni cpu logica. Un valore approssimativo da dare dovrebbe essere NUM_CPU+1. Se dai un valore minore ti rimangono CPU logiche che non fanno una mazza, se dai un valore maggiore avrai un calo di performace dal momento che se forki 5 make dovrai eseguire un context switch tra questi processi e questo ti fa perdere cicli ci CPU.

Spero di essermi spiegato bene  :Wink:  sono ancora un poco assonnato. 

 *Nello84 wrote:*   

> 
> 
> ma l'opzione che io metto in make.conf è solo per portage; mentre se anche nella compilazione manuale volessi questa opzione dovrei darla a mano, assieme al comando make?

 

Esattamente.

----------

## ^Stefano^

si ti sei spiegato bene, grazie mille!

[ot on] x-drum, hai un messaggio privato, perchè non lo leggi? dai su...è anche natale!!! [ot off]

----------

