Как установить сходство процессора на OS X?

23006
Troggy

Как настроить привязку процессора в Snow Leopard на MacBook Pro? Я знаю, что в Windows вы можете просто переключить его в диспетчере задач.

15
Запустите OS X на виртуальной машине и установите соответствие виртуальной машины zildjohn01 14 лет назад 1
Зачем тебе это делать? Как правило, это плохая идея, если вы не пытаетесь запустить старые программы, которые настолько плохо закодированы, что ломаются в многоядерных системах. jalf 14 лет назад 0
@jalf: сродство процессора может улучшить производительность, так как в некоторых случаях оно уменьшает недействительность кэша и его удаление. 14 лет назад 2
Это разочаровывает. Похоже, Mac никогда не станет идеальной платформой для разработки программного обеспечения в реальном времени. Evan Plaice 13 лет назад 1
@jweyrich Исключения в процессорах с QPI (Intel NUMA), как в Mac Pro, где настройка соответствия процессоров [отключает соответствие памяти] (http://frankdenneman.nl/2011/01/beating-a-dead-horse-using- cpu-affinity /) и снижает производительность. Это не относится к мобильным процессорам, хотя. Jano 12 лет назад 1
В нашем случае многие приложения не поддерживают ограничение количества ядер при обработке жестких данных, поэтому наивным подходом к поддержанию отзывчивости системы на других платформах было запретить доступ различных приложений ко всем ядрам. RandomInsano 8 лет назад 0

4 ответа на вопрос

12
void-pointer

OS X has supported a thread affinity API since version 10.5. Here is some relevant material from the webpage I linked to.

Affinity Set

An affinity set is a collection of threads which share memory resources and wish to share an L2 cache. Distinct affinity sets represent separate affinities—that is, threads belonging to a different set should use a separate L2 cache and hence be run on a different logical processors.

An affinity set is identified by a "tag". Threads are assigned to a particular affinity set by assigning it the tag identifying that set. A thread can belong to at most one affinity set; that is, it has one affinity tag.

Effect of Setting Distinct Affinity Tags

For example, an application wanting to run 2 threads on separate L2 caches would set the threads with different affinity tags. On a dual core machine, this affinity will effectively be ignored. However, on a 4-core MacPro, the scheduler will try to run threads on separate packages. Similarly, on an 8-core MacPro, the scheduler will try to run these threads on separate dies (which may or may not be in the same physical CPU package).

Example Usage

An application that wants to place a thread on every available processor would do the following:

  • Obtain the number of processors on the system using sysctl(3).
  • Create that number of threads.
  • Set each thread with a distinct affinity tag.
  • Start all threads.

Threads with default affinity policy will be scheduled more freely on any processor. These threads will be preferentially migrated to run on an idle processor. Threads with affinity tags will tend to remain in place.

Consult the source for code listings, and information about the sharing of affinity tags between parent and child processes, obtaining the CPU cache configuration, and more.

11
ta.speot.is

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

Mac OS X не экспортирует интерфейсы, которые идентифицируют процессоры или управляют размещением потоков - явная привязка потоков к процессорам не поддерживается . Вместо этого ядро ​​управляет размещением всех потоков. Приложения ожидают, что планировщик в большинстве случаев будет запускать свои потоки, используя хорошее размещение процессора в отношении сродства кеша.

OS X поддерживает API схожести потоков с версии 10.5. Смотрите мой ответ для деталей. void-pointer 10 лет назад 2
4
jweyrich

До сих пор планировщик XNU (1504.3.12) не реализовывал привязку процессора к процессам и потокам.

Так что MacOSX не предоставляет никаких средств для этого.

2
Alan Baldo

От http://images.apple.com/macosx/docs/OSX_for_UNIX_Users_TB_July2011.pdf

• Эффективные потоки ядра. Каждый поток POSIX ставится в очередь на конкретном процессоре, улучшая сродство процессора и масштабируемость, одновременно уменьшая конфликт блокировки. Потоки соответствуют POSIX (1c), включая поддержку отмены и общих мьютексов.

Похоже на объявление, мой iMac, на котором работает Lion, большую часть времени уважает это, но это не «закрепляет» процесс до ядра.

В любом случае я не смог найти API для управления сродством процесса к Дарвину.