Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CPU Numbering on a hypertheading enabled system

I am trying to find out how an OS (Windows, linux) assigns numbers to logical cpus in a Hyper threading enabled environment. ?

Does both the OSs first serially assign numbers to the Physical CPUs and then start numbering the logical cpus or is there some other rule followed.. ? e.g. in 2 physical cpu system with hyper threading , does an OS assign number 0,2 to the first physical cpu and then 1,3 to second physical cpu .. ?

Any references would be really appreciated.

Thanks in advance.

Regards, -Jay.

Edit: Responding to Alan's question : I need to know this because, In my work I need to bind various threads to specific CPUs to avoid context switches and I want to make sure that certain Tasks( THreads ) are bound to separate physical cpus. Thanks

like image 415
Jay D Avatar asked Nov 16 '09 18:11

Jay D


1 Answers

From what I know, it depends on how the CPU exposes his cores. When HT is enabled, there are no exposed physical CPUs, but rather two logical CPUs per physical CPU, so there is no difference if you run a thread on either logical CPU. The only thing that does matter is what pairs of logical CPUs belong to each physical CPU.

With single core processors (like the Pentium 4 with HT), it's pretty straight forward, since you only have one pair - so it's (0, 1). With quad core processors (like Nehalem), the logical cores pairs are (0,4), (1,5), (2,6) and (3,7). The pattern of having all the first halves of each pair then having all the second halves shuold scale with future CPUs that have even more cores.

The real question is why do you need to know the pair arrangement? Let the OS's scheduler pick the right cores for the right threads - it does a pretty decent job.

like image 61
Allon Guralnek Avatar answered Oct 02 '22 00:10

Allon Guralnek