2009-11-16 7 views
7

Sto cercando di scoprire come un sistema operativo (Windows, Linux) assegna numeri a cpus logici in un ambiente abilitato per Hyper Threading. ?Numerazione CPU su un sistema abilitato per hypertheading

Entrambi i sistemi operativi assegnano in serie i numeri alle CPU fisiche e quindi iniziano a numerare la CPU logica o sono seguite altre regole ..? per esempio. in 2 sistemi di cpu fisici con hyper threading, un sistema operativo assegna il numero 0,2 alla prima CPU fisica e quindi da 1,3 a seconda CPU fisica ..?

Qualsiasi riferimento sarebbe molto apprezzato.

Grazie in anticipo.

Saluti, -Jay.

Modifica: Rispondendo alla domanda di Alan: Devo saperlo perché, nel mio lavoro ho bisogno di legare vari thread a CPU specifiche per evitare i commutatori di contesto e voglio assicurarmi che determinati Task (THread) siano legati a separata cpus fisico. Grazie

risposta

8

Da quello che so, dipende da come la CPU espone i suoi core. Quando HT è abilitato, non ci sono CPU fisiche esposte, ma due CPU logiche per CPU fisica, quindi non c'è differenza se si esegue un thread su una CPU logica. L'unica cosa che importa è che coppie di CPU logiche appartengono a ciascuna CPU fisica.

Con processori single core (come il Pentium 4 con HT), è piuttosto semplice, poiché si ha solo una coppia, quindi è (0, 1). Con processori quad core (come Nehalem), le coppie di core logici sono (0,4), (1,5), (2,6) e (3,7). Lo schema di avere tutte le prime due parti di ciascuna coppia e poi avere tutte le seconde metà della scala con future CPU che hanno ancora più core.

La vera domanda è: perché è necessario conoscere la disposizione delle coppie? Lascia che lo scheduler del SO scelga i core giusti per i thread giusti: fa un lavoro abbastanza decente.

+1

Voglio farlo perché voglio associare compiti diversi (Thread) a differenti cpus logici. –

+0

Ma perché? Lo scheduler dei thread si occuperà di bilanciare correttamente il carico tra i core. Di solito non c'è bisogno di farlo manualmente (potrebbe anche danneggiare le prestazioni) e può causare effetti collaterali inaspettati per i casi limite. –

+0

Alcuni degli algoritmi che utilizziamo hanno i vincoli temporali in microsecondi. Quindi, se non applichiamo l'affinità della CPU su questi thread multipli che elaborano questi algos, gli switch di contesto rendono impossibile rispettare queste scadenze temporali. . –

4

È possibile cercare in /sys/devices/system/cpu/ per trovare le informazioni sulle CPU. Il layout dei nuclei e le loro coppie hyperthreaded possono essere trovati in /sys/devices/system/cpu/cpuN/topology/thread_siblings_list.