代码之家  ›  专栏  ›  技术社区  ›  Jay D

启用超标题的系统上的CPU编号

  •  7
  • Jay D  · 技术社区  · 16 年前

    我正试图找出一个操作系统(Windows、Linux)如何在支持超线程的环境中为逻辑CPU分配数字。?

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

    任何推荐信都将不胜感激。

    事先谢谢。

    问候,杰伊。

    编辑:回答艾伦的问题:我需要知道这一点,因为在我的工作中,我需要将不同的线程绑定到特定的CPU,以避免上下文切换,我希望确保某些任务(线程)绑定到 分离 物理CPU。谢谢

    2 回复  |  直到 11 年前
        1
  •  8
  •   Allon Guralnek    16 年前

    据我所知,这取决于CPU如何暴露他的核心。当启用了ht时,没有公开的物理CPU,而是每个物理CPU有两个逻辑CPU,所以如果您在任一个逻辑CPU上运行一个线程,就没有区别了。唯一重要的是,每个物理CPU所属的逻辑CPU对是什么。

    对于单核处理器(如带HT的奔腾4),它是非常直接的,因为您只有一对,所以它是(0,1)。对于四核处理器(如Nehalem),逻辑核心对是(0,4)、(1,5)、(2,6)和(3,7)。每对CPU的前半部分都有,后半部分都有舒尔德规模,未来的CPU甚至有更多的核心。

    真正的问题是,为什么你需要知道配对安排?让操作系统的调度器为正确的线程选择正确的核心——它做得相当不错。

        2
  •  4
  •   Hudson    16 年前

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