启用超线程的系统上的CPU编号

时间:2009-11-16 18:56:44

标签: windows linux-kernel cpu-architecture hyperthreading

我试图了解操作系统(Windows,Linux)如何在启用超线程的环境中为逻辑cpus分配数字。 ?

两个操作系统是否首先将数字串行分配给物理CPU,然后开始编号逻辑cpus,或者是否遵循其他规则?例如在具有超线程的2个物理cpu系统中,OS是否将数字0,2分配给第一个物理cpu然后1,3分配给第二个物理cpu ..?

任何引用都会非常感激。

提前致谢。

问候,-Jay。

编辑:回应Alan的问题:我需要知道这一点因为,在我的工作中,我需要将各种线程绑定到特定的CPU以避免上下文切换,并且我想确保某些任务(THreads)绑定到分开物理cpu。感谢

2 个答案:

答案 0 :(得分:8)

据我所知,这取决于CPU如何暴露他的内核。启用HT时,没有公开的物理CPU,而是每个物理CPU有两个逻辑CPU,因此如果在任一逻辑CPU上运行线程,则没有区别。唯一重要的是成对的逻辑CPU属于每个物理CPU。

对于单核处理器(如带有HT的Pentium 4),它非常直接,因为你只有一对 - 所以它是(0,1)。对于四核处理器(如Nehalem),逻辑核心对为(0,4),(1,5),(2,6)和(3,7)。所有前半部分的所有前半部分都具有所有后半部分的模式,以及具有更多内核的未来CPU。

真正的问题是为什么你需要知道这对安排?让操作系统的调度程序为正确的线程选择合适的内核 - 它做得非常不错。

答案 1 :(得分:4)

您可以查看/sys/devices/system/cpu/以查找有关CPU的信息。核心及其超线程对的布局可以在/sys/devices/system/cpu/cpuN/topology/thread_siblings_list中找到。