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

17

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

Troggy
источник
2
<snarky-comment> Запустите OS X на виртуальной машине и установите
привязку
Почему вы хотите это сделать? Обычно это плохая идея, если вы не пытаетесь запустить старые программы, которые настолько плохо закодированы, что ломаются в многоядерных системах.
Джалф
2
@jalf: сродство процессора может повысить производительность, поскольку в некоторых случаях оно уменьшает недействительность кэша и его удаление.
1
Это разочаровывает. Похоже, Mac никогда не станет идеальной платформой для разработки программного обеспечения в реальном времени.
Эван Плейс
1
@jweyrich Исключения в процессорах с QPI (Intel NUMA), как в Mac Pro, где настройка соответствия CPU отключает соответствие памяти и снижает производительность. Это не относится к мобильным процессорам, хотя.
Яно

Ответы:

14

OS X поддерживает API схожести потоков с версии 10.5. Вот некоторые соответствующие материалы с веб-страницы, на которую я ссылался.

Affinity Set

Набор сходства - это набор потоков, которые совместно используют ресурсы памяти и хотят совместно использовать кэш L2. Наборы различного сходства представляют отдельные сходства, то есть потоки, принадлежащие другому набору, должны использовать отдельный кэш L2 и, следовательно, работать на разных логических процессорах.

Набор сходства идентифицируется с помощью «тега». Потоки присваиваются определенному набору сходства, назначая ему тег, идентифицирующий этот набор. Поток может принадлежать не более чем одному набору сходства; то есть у него есть один тег сродства.

Эффект установки различных тегов сходства

Например, приложение, желающее запустить 2 потока на отдельных кэшах L2, установило бы потоки с разными тегами сходства. На двухъядерной машине это сходство будет эффективно игнорироваться. Однако на 4-ядерном MacPro планировщик попытается запустить потоки в отдельных пакетах. Точно так же на 8-ядерном MacPro планировщик попытается запустить эти потоки на разных матрицах (которые могут быть или не быть в одном и том же физическом пакете ЦП).

Пример использования

Приложение, которое хочет разместить поток на каждом доступном процессоре, сделает следующее:

  • Получите количество процессоров в системе, используя sysctl (3).
  • Создайте это количество потоков.
  • Установите каждый поток с отдельным тегом сходства.
  • Начать все темы.

Потоки с политикой соответствия по умолчанию будут более свободно планироваться на любом процессоре. Эти потоки будут преимущественно перенесены для работы на свободном процессоре. Потоки с тегами сходства будут стремиться оставаться на своих местах.

Обратитесь к источнику за списками кода и информацией о совместном использовании тегов сходства между родительскими и дочерними процессами, получении конфигурации кэша ЦП и многом другом.

недействительная указка
источник
Есть ли утилита командной строки, в дополнение к этому API?
Виктор Эйххоут
11

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

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

ta.speot.is
источник
2
OS X поддерживает API схожести потоков с версии 10.5. Смотрите мой ответ для деталей.
указатель на пустоту
4

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

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

jweyrich
источник
2

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

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

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

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

Алан Бальдо
источник