Jak ustawić koligację procesora w systemie OS X?

17

Jak ustawić koligację procesora w systemie Snow Leopard na MacBooku Pro Wiem, że w systemie Windows można po prostu przełączyć go w Menedżerze zadań.

Troggy
źródło
2
<snarky-comment> Uruchom OS X na maszynie wirtualnej i ustaw powinowactwo maszyny wirtualnej </snarky-comment>
zildjohn01
Dlaczego chcesz to zrobić? Jest to ogólnie zły pomysł, chyba że próbujesz uruchomić stare programy, które są tak źle zakodowane, że psują się w systemach wielordzeniowych.
jalf
2
@jalf: koligacja procesora może poprawić wydajność, ponieważ w niektórych przypadkach zmniejsza unieważnienie pamięci podręcznej i koszowanie.
1
To rozczarowujące. Wygląda na to, że Mac nigdy nie będzie idealną platformą do tworzenia oprogramowania w czasie rzeczywistym.
Evan Plaice,
1
@jweyrich Z wyjątkiem procesorów z QPI (Intel NUMA), takich jak te na Mac Pro, gdzie ustawienie powinowactwa procesora wyłącza powinowactwo pamięci i zmniejsza wydajność. Nie dotyczy to jednak procesorów mobilnych.
Jano

Odpowiedzi:

14

OS X obsługuje API powinowactwa wątków od wersji 10.5. Oto kilka istotnych materiałów ze strony, do której linkuję.

Zestaw powinowactwa

Zestaw koligacji to zbiór wątków, które współużytkują zasoby pamięci i chcą dzielić pamięć podręczną L2. Odrębne zestawy koligacji reprezentują osobne koligacje - to znaczy wątki należące do innego zestawu powinny używać osobnej pamięci podręcznej L2, a zatem działać na różnych procesorach logicznych.

Zestaw powinowactwa jest identyfikowany przez „znacznik”. Wątki są przypisywane do określonego zestawu koligacji, przypisując mu znacznik identyfikujący ten zestaw. Wątek może należeć do co najwyżej jednego zestawu koligacji; to znaczy ma jeden znacznik powinowactwa.

Efekt ustawienia odrębnych znaczników powinowactwa

Na przykład aplikacja, która chce uruchomić 2 wątki na osobnych pamięciach podręcznych L2, ustawiłaby wątki o różnych znacznikach powinowactwa. Na maszynie dwurdzeniowej to powinowactwo zostanie skutecznie zignorowane. Jednak na czterordzeniowym MacPro program planujący spróbuje uruchomić wątki na osobnych pakietach. Podobnie na 8-rdzeniowym MacPro program planujący spróbuje uruchomić te wątki na osobnych matrycach (które mogą, ale nie muszą znajdować się w tym samym fizycznym pakiecie procesora).

Przykładowe użycie

Aplikacja, która chce umieścić wątek na każdym dostępnym procesorze, wykonałaby następujące czynności:

  • Uzyskaj liczbę procesorów w systemie za pomocą sysctl (3).
  • Utwórz taką liczbę wątków.
  • Ustaw każdy wątek za pomocą odrębnego znacznika powinowactwa.
  • Rozpocznij wszystkie wątki.

Wątki z domyślną polityką koligacji będą planowane bardziej swobodnie na dowolnym procesorze. Te wątki będą preferencyjnie migrowane do działania na bezczynnym procesorze. Wątki ze znacznikami powinowactwa będą miały tendencję do pozostawania na miejscu.

Skorzystaj ze źródła, aby uzyskać listę kodów oraz informacje na temat udostępniania znaczników powinowactwa między procesami nadrzędnymi i podrzędnymi, uzyskiwania konfiguracji pamięci podręcznej procesora i nie tylko.

wskaźnik pustki
źródło
Czy oprócz tego interfejsu API jest narzędzie wiersza polecenia?
Victor Eijkhout
11

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

Mac OS X nie eksportuje interfejsów, które identyfikują procesory lub kontrolują umieszczenie wątku - jawne powiązanie wątku z procesorem nie jest obsługiwane . Zamiast tego jądro zarządza rozmieszczaniem wszystkich wątków. Aplikacje oczekują, że harmonogram w większości przypadków będzie uruchamiał swoje wątki przy użyciu dobrego umiejscowienia procesora w odniesieniu do koligacji pamięci podręcznej.

ta.speot.is
źródło
2
OS X obsługuje API powinowactwa wątków od wersji 10.5. Zobacz moją odpowiedź, aby poznać szczegóły.
void-pointer
4

Do tej pory program planujący XNU (1504.3.12) nie implementuje powinowactwa procesorów do procesów ani wątków.

MacOSX nie zapewnia na to żadnych środków.

Jweyrich
źródło
2

From http://images.apple.com/macosx/docs/OSX_for_UNIX_Users_TB_July2011.pdf

• Wydajne wątki jądra. Każdy wątek POSIX jest umieszczony w kolejce na określonym procesorze, co poprawia powinowactwo i skalowalność procesora, jednocześnie zmniejszając rywalizację o blokadę. Wątki są zgodne z POSIX (1c), w tym obsługują anulowanie i wspólne muteksy.

Wygląda mi to na reklamę, mój iMac z systemem Lion wygląda na to, że szanuje to przez większość czasu, ale nie „przypina” do rdzenia.

W każdym razie nie mogłem znaleźć interfejsu API do kontrolowania powinowactwa procesu dla darwina.

Alan Baldo
źródło