我试图了解操作系统(Windows,Linux)如何在启用超线程的环境中为逻辑cpus分配数字。 ?
两个操作系统是否首先将数字串行分配给物理CPU,然后开始编号逻辑cpus,或者是否遵循其他规则?例如在具有超线程的2个物理cpu系统中,OS是否将数字0,2分配给第一个物理cpu然后1,3分配给第二个物理cpu ..?
任何引用都会非常感激。
提前致谢。
问候,-Jay。
编辑:回应Alan的问题:我需要知道这一点因为,在我的工作中,我需要将各种线程绑定到特定的CPU以避免上下文切换,并且我想确保某些任务(THreads)绑定到分开物理cpu。感谢
答案 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
中找到。