Як встановити спорідненість процесора на OS X?


17

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


2
<snarky-comment> Запустіть OS X у віртуальній машині та встановіть спорідненість віртуальної машини </snarky-comment>
zildjohn01

Чому б ти хотів це зробити? Це взагалі погана ідея, якщо ви не намагаєтеся запустити старі програми, які так погано закодовані, що вони ламаються на багатоядерних системах.
jalf

2
@jalf: спорідненість процесора може підвищити продуктивність, оскільки в деяких випадках зменшує недійсність кешу та виведення з кошика.

1
Це невтішно. Схоже, Mac ніколи не буде ідеальною платформою для розробки програмного забезпечення в режимі реального часу.
Еван Плейс

1
@jweyrich Виняток у процесорах з QPI (Intel NUMA), як у Mac Pro, де встановлення афінності CPU вимикає спорідненість до пам’яті та знижує продуктивність. Це не стосується мобільних процесорів.
Яно

Відповіді:


14

OS X підтримує API спорідненості з потоком з версії 10.5. Ось релевантний матеріал із веб-сторінки, на яку я пов’язаний.

Набір прихильності

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

Набір спорідненості ідентифікується "тегом". Нитки присвоюються певному набору афінності, присвоюючи йому тег, що ідентифікує цей набір. Нитка може належати щонайменше одному набору афінності; тобто він має один тег спорідненості.

Ефект встановлення чітких тегів спорідненості

Наприклад, програма, яка хоче запустити 2 потоки в окремих кешах L2, встановила б потоки з різними тегами спорідненості. На двоядерній машині ця спорідненість буде ефективно ігноруватися. Однак на 4-ядерному MacPro планувальник буде намагатися запускати потоки на окремих пакетах. Аналогічно, у 8-ядерному MacPro планувальник намагатиметься запустити ці потоки на окремих плашках (які можуть бути, а можуть і не знаходитися в одному фізичному пакеті процесора).

Приклад використання

Додаток, який хоче розмістити потік на кожному доступному процесорі, зробить наступне:

  • Отримайте кількість процесорів у системі за допомогою sysctl (3).
  • Створіть цю кількість ниток.
  • Встановіть кожну нитку з чітким тегом спорідненості.
  • Почніть всі нитки.

Нитки з політикою спорідненості за замовчуванням плануються вільніше на будь-якому процесорі. Ці потоки будуть переважно перенесені для запуску в режимі очікування. Нитки з тегами спорідненості, як правило, залишаться на місці.

Зверніться до джерела щодо списків кодів та інформації про спільне використання тегів спорідненості між батьківськими та дочірніми процесами, отримання конфігурації кешу CPU тощо.


Чи є у доповнення до цього API утиліта командного рядка?
Віктор Ейхуут

11

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

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


2
OS X підтримує API спорідненості з потоком з версії 10.5. Детальну інформацію див. У моїй відповіді.
анульований покажчик

4

Досі планувальник XNU (1504.3.12) не реалізує спорідненість процесора до процесів і потоків.

Тож MacOSX не забезпечує жодних засобів для цього.


2

Від http://images.apple.com/macosx/docs/OSX_for_UNIX_Users_TB_July2011.pdf

• Ефективні нитки ядра. Кожен потік POSIX розміщується в черзі на певному процесорі, покращуючи спорідненість процесора та масштабованість, зменшуючи при цьому блокування. Нитки відповідають POSIX (1c), включаючи підтримку скасування та спільні мютекси.

Мені це здається рекламою, мій LM, який працює під управлінням iMac, виглядає, що більшу частину часу поважає, але це не "прив'язує до ядра".

Я не міг знайти жодного API, який би контролював спорідненість процесу до Дарвіна.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.