views:

161

answers:

2

Hi,

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 advanced.

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

+3  A: 

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.

Allon Guralnek
I want to konw this because I want to bind different tasks (Threads ) to different logical cpus.
Jay D
But why? The thread scheduler will take care of correctly balancing the load between the cores. There's usually no need to do this manually (it may even hurt performance), and may cause unexpected side effects for edge cases.
Allon Guralnek
Some of the Algorithms we use have the timing constraints in micro seconds. So if we don't enforce the CPU affinity on these multiple threads that process these algos , the context switches make this timing deadlines impossible to achieve. .
Jay D
Huh, I guess it's just one of those edge cases. Good luck with that, I hope it works out for you.
Allon Guralnek
+1  A: 

You can look in /sys/devices/system/cpu/ to find the information about the CPUs. The layout of the cores and their hyperthreaded pairs can be found in /sys/devices/system/cpu/cpuN/topology/thread_siblings_list.

Hudson