Dual Core e HyperThreading: un possibile bug

Dual Core e HyperThreading: un possibile bug

Alcune analisi con processori Xeon DP hanno evidenziato un possibile problema del sistema operativo Windows XP, nella gestione di sistemi biprocessore con tecnologia HyperThreading attivata

di pubblicata il , alle 14:17 nel canale Processori
WindowsMicrosoft
 
61 Commenti
Gli autori dei commenti, e non la redazione, sono responsabili dei contenuti da loro inseriti - info
corgiov10 Marzo 2005, 23:48 #51
Originariamente inviato da sirus
imho questo problema non si verificherebbe con windows 2003 server che gestisce fino a 4 cpu...
xp è nato per gestirne 2 e quindi credo che con 4 core (seppur logici) il sistema non riesca a rispondere correttamente

Nei sei sicuro? Per quale ragione il mio Windows XP Sp2 gestirebbe fino 31 CPU?
La prova?
Tasto destro sulla barra applicazioni - Task Manager - Processi - Scegliere una qualunque riga - Tasto destro - Imposta affinità...
Quanti processori vedi? Io 31, di cui solo due selezionabili (possiedo un P4 2800 HT).
MaxArt11 Marzo 2005, 00:27 #52

Re: x MaxArt

Originariamente inviato da Superboy
La prima cpu pipelined x86 è stata il 386 (pipe di 4 stage).
Hai ragione, ho fatto un po' di confusione. Resta il fatto che il Pentium è il primo processore superscalare x86.
cionci11 Marzo 2005, 07:27 #53
Originariamente inviato da midian
non vorrei sbagliarmi ma quindi il P4 con 4 cpu logiche non potra essere sfruttato a pieno con widnows xp perche è stato progettato solo per 2 cpu al massimo?
se è cosi non rispondo.
e sull' uso di queste cpu su linux si sa qualcosa?

Non è questo il motivo... Anzi, la spiegazione sta proprio nella tecnologia Hyper Threading... Due core logici appartenenti allo stesso core fisico se impegnati con un thread molto pesante ciascuno hanno prestazioni nettamente peggiori degli stessi due thread inseriti ogni timeslice all'interno di un unico core fisico (come succede adesso con un processore single core)... Infatti è successo in passato di avere benchmark in cui l'attivazione di HT portasse ad un deterioramento delle prestazioni (% intorno al 3-5%, ma pur sempre rilevante)...

L'utilizzo che se ne fa nei server è solitamente con thread relativamente leggeri, vedi server web o server database in cui fanno da collo di bottiglia il disco fisso e la ram...

L'unica possibilità sarebbe di tentare uno scheduling in base alla percentuale di occupazione storica dell'intera CPU... Quindi non solo si dovrebbe tenere conto di quali core appartengono alla stessa CPU, ma anche tenersi una statistica, forse un po' troppo complessa per lo scheduler... In caso un CPU, ad esempio, risulti occupata oltre il 90% negli ultimi 300ms allora verrà allocato un solo thread in un solo core logico...
cionci11 Marzo 2005, 07:31 #54

Re: x cionci

Originariamente inviato da Superboy
Nelle SSE3 ci sono 2 istruzioni per la gestione dei thread Monitor e MWAIT: servono solo per ottimizzare consumi e prestazioni nei casi in cui un thread si deve sospendere in attesa di un qualsiasi evento (es spin-wait) non sono indispensabili

Sì, ma non solo, si può anche utilizzare per sincronizzare i thread in una CPU con HT... Ad esempio supponendo di avere una sola CPU con 2 core logici, impostando la schedulazione di ogni thread su una determinata CPU (il che si può fare) si potrebbero mettere all'interno di regioni critiche le parti di codice che generano un grande carico sulla CPU...in questo modo di fatto si riesce a controllare che due parti pesanti di codice non vadano in esecuzione contemporaneamente...
Superboy11 Marzo 2005, 10:00 #55

x cionci

purtroppo temevo che non si trattasse solo di un accelerazione hw allo spinloc ma venisse abusato in questo modo. Ma se così fosse, se si utilizzasse un meccanismo di lock quando concettualmente nn c'è una regione critica ma solo un "lavoro pesante" sarebbe una vera e propria porcata! Gli unici benefici di un codice si fatto sarebbero quelli di nn strozzare una cpu single core con ht, penalizzando tutto il resto del mondo! e se mi permetti questo fa proprio orrore !!!
Superboy11 Marzo 2005, 10:08 #56

Re: Re: x MaxArt

Originariamente inviato da MaxArt
Hai ragione, ho fatto un po' di confusione. Resta il fatto che il Pentium è il primo processore superscalare x86.


Originariamente inviato da MaxArt
La pipeline multistadio fu dapprima implementata nei primi Pentium (1993) e questo segnò l'inizio dell'architettura superscalare per i processori x86.


Si certo, e nel post da cui mi hai quotato ho spiegato anche il perchè...
Cmq il concetto di pipeline è totalmente indipendente da quello di cpu superscalare, quindi nn segna l'inizio di nulla :P
cdimauro11 Marzo 2005, 12:09 #57
Non credo che sia un bug del kernel di Windows (come di qualunque altro s.o.): il problema è intrinsecamente dovuto all'HT e al fatto che le due CPU logiche non hanno le stesse risorse. Questo è stato detto e mi sembra ovvio.

La soluzione potrebbe essere quella di permettere agli applicativi SMP di scegliere liberamente quanti e quali CPU utilizzare.

Lasciare sullo scheduler quest'onere (selezionando, ad esempio, prima le cpu pari e poi quelle dispari) può sembrare una buona soluzione, ma sicuramente non risolve il problema in generale.
Ad esempio, per alcune applicazioni può essere meglio far eseguire due thread all'interno della CPU fisica anziché su due CPU fisiche diverse, perché condividono buona parte delle risorse.

x MaxArt: fino a una ventina d'anni fa buona parte dei processori aveva un registro in cui veniva caricata l'istruzione da eseguire, o i primi byte...
cionci11 Marzo 2005, 12:51 #58

Re: x cionci

Originariamente inviato da Superboy
e se mi permetti questo fa proprio orrore !!!

Certo, ma volendo si può prevedere qualsiasi caso...sia questo che altri con altri quantitativi di core fisici e logici...
MaxArt11 Marzo 2005, 14:56 #59
Originariamente inviato da cdimauro
x MaxArt: fino a una ventina d'anni fa buona parte dei processori aveva un registro in cui veniva caricata l'istruzione da eseguire, o i primi byte...
Io ho giusto detto che non si tratta di uno dei registri GP che si diceva (e neppure i registri puntatori, o FLAGS).
Mi potresti approfondire questo punto?
cionci11 Marzo 2005, 15:43 #60
Diciamo che era simile ad una pipeline a due stadi...mentre si eseguiva l'istruzione corrente si caricava quella successiva in un registro e se ne faceva la fase di fetch... La così detta prefetch...

Devi effettuare il login per poter commentare
Se non sei ancora registrato, puoi farlo attraverso questo form.
Se sei già registrato e loggato nel sito, puoi inserire il tuo commento.
Si tenga presente quanto letto nel regolamento, nel rispetto del "quieto vivere".

La discussione è consultabile anche qui, sul forum.
 
^