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 Paolo Corsini pubblicata il 08 Marzo 2005, alle 14:17 nel canale ProcessoriWindowsMicrosoft
61 Commenti
Gli autori dei commenti, e non la redazione, sono responsabili dei contenuti da loro inseriti - infoimho 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).
Re: x MaxArt
La prima cpu pipelined x86 è stata il 386 (pipe di 4 stage).
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...
Re: x cionci
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...
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 !!!Re: Re: x MaxArt
Hai ragione, ho fatto un po' di confusione. Resta il fatto che il Pentium è il primo processore superscalare x86.
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
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...
Re: x cionci
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...
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...
Mi potresti approfondire questo punto?
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".