如何在 OS X 上设置处理器关联?

19 cpu osx-snow-leopard affinity macos

你如何在 MacBook Pro 上的 Snow Leopard 中设置处理器关联?我知道在 Windows 中你可以在任务管理器中切换它。

voi*_*ter 16

OS X从 10.5 版开始支持线程关联 API。这是我链接到的网页中的一些相关材料。

亲和集

关联集是共享内存资源并希望共享 L2 缓存的线程集合。不同的亲缘关系集代表不同的亲缘关系——也就是说,属于不同集合的线程应该使用单独的 L2 缓存,因此在不同的逻辑处理器上运行。

关联集由“标签”标识。通过为特定关联集分配标识该关联集的标签,将线程分配给该关联集。一个线程最多可以属于一个关联集;也就是说,它有一个亲和标签。

设置不同亲和性标签的效果

例如,想要在单独的 L2 缓存上运行 2 个线程的应用程序将使用不同的亲和性标记设置线程。在双核机器上,这种亲和性将被有效地忽略。但是,在 4 核 MacPro 上,调度程序将尝试在单独的包上运行线程。类似地,在 8 核 MacPro 上,调度程序将尝试在不同的芯片上运行这些线程(可能在也可能不在同一个物理 CPU 包中)。

示例用法

想要在每个可用处理器上放置线程的应用程序将执行以下操作:

  • 使用 sysctl(3) 获取系统上的处理器数量。
  • 创建该数量的线程。
  • 为每个线程设置一个不同的亲和标签。
  • 启动所有线程。

具有默认关联策略的线程将在任何处理器上更自由地调度。这些线程将优先迁移到空闲处理器上运行。带有亲和标签的线程将倾向于保持原位。

请查阅源代码以获取代码清单,以及有关在父进程和子进程之间共享亲缘标记、获取 CPU 缓存配置等的信息。

  • 除了这个 API 之外,还有命令行实用程序吗? (2认同)

ta.*_*.is 11

http://developer.apple.com/mac/library/releasenotes/Performance/RN-AffinityAPI/

Mac OS X 不导出标识处理器或控制线程放置的接口——不支持显式线程到处理器绑定。相反,内核管理所有线程放置。应用程序期望调度程序在大多数情况下使用与缓存关联性相关的良好处理器放置来运行其线程。

  • OS X 从 10.5 版开始支持线程关联 API。详情请看我的回答。 (2认同)

jwe*_*ich 4

到目前为止,XNU (1504.3.12) 调度程序尚未实现进程或线程的处理器关联性。

所以 MacOSX 没有提供任何方法来做到这一点。