您如何在MacBook Pro的Snow Leopard中设置处理器亲和力?我知道在Windows中您可以在“任务管理器”中进行切换。
您如何在MacBook Pro的Snow Leopard中设置处理器亲和力?我知道在Windows中您可以在“任务管理器”中进行切换。
Answers:
自10.5版以来,OS X支持线程相似性API。这是我链接到的网页上的一些相关材料。
相似性集是共享内存资源并希望共享L2缓存的线程的集合。不同的相似性集表示不同的相似性-也就是说,属于不同集的线程应使用单独的L2高速缓存,因此应在不同的逻辑处理器上运行。
亲和力集由“标签”标识。通过为线程指定特定的相似性集,将其分配给标识该相似性集的标签,即可将线程分配给该特定的相似性集。一个线程最多可以属于一个亲和力集合;也就是说,它具有一个亲和标签。
例如,想要在单独的L2缓存上运行2个线程的应用程序将为这些线程设置不同的相似性标签。在双核计算机上,这种亲和力将被有效忽略。但是,在4核MacPro上,调度程序将尝试在单独的程序包上运行线程。同样,在8核MacPro上,调度程序将尝试在单独的管芯上运行这些线程(它们可以或可以不在同一物理CPU包中)。
想要在每个可用处理器上放置线程的应用程序将执行以下操作:
- 使用sysctl(3)获取系统上的处理器数量。
- 创建该数量的线程。
- 为每个线程设置不同的相似性标签。
- 启动所有线程。
具有默认相似性策略的线程将在任何处理器上更自由地进行调度。这些线程将优先迁移以在空闲处理器上运行。具有相似性标签的线程将倾向于保留在原处。
请查阅源代码中的代码清单,以及有关父子进程之间共享亲和力标签,获取CPU缓存配置等的信息。
http://developer.apple.com/mac/library/releasenotes/Performance/RN-AffinityAPI/
Mac OS X不导出用于标识处理器或控制线程位置的接口-不支持显式线程到处理器的绑定。相反,内核管理所有线程的放置。应用程序期望,在大多数情况下,调度程序将在缓存相似性方面使用良好的处理器位置来运行其线程。
来自http://images.apple.com/macosx/docs/OSX_for_UNIX_Users_TB_July2011.pdf
•高效的内核线程。每个POSIX线程都排队在特定的CPU上,从而提高了处理器的亲和力和可伸缩性,同时减少了锁争用。线程符合POSIX(1c),包括对取消和共享互斥的支持。
对我来说,这似乎是广告,我运行iMac的iMac大部分时间都在尊重这一点,但是并没有将进程“固定”到核心。
无论如何,我找不到任何API来控制与darwin的进程亲和力。