Wie kann ich die Prozessoraffinität unter OS X einstellen?

23087
Troggy

Wie lässt sich die Prozessoraffinität in Snow Leopard auf einem MacBook Pro einstellen? Ich weiß, dass Sie in Windows die Taskleiste einfach umstellen können.

15
Führen Sie OS X in einer virtuellen Maschine aus und legen Sie die Affinität der virtuellen Maschine fest zildjohn01 vor 13 Jahren 1
Warum möchtest du das tun? Dies ist im Allgemeinen eine schlechte Idee, wenn Sie nicht versuchen, alte Programme auszuführen, die so schlecht codiert sind, dass sie auf Multicore-Systemen beschädigt werden. jalf vor 13 Jahren 0
@jalf: Die Prozessoraffinität kann die Leistung verbessern, da in einigen Fällen die Cache-Inaktivierung und der Papierkorb verringert werden. vor 13 Jahren 2
Das ist enttäuschend. Es sieht so aus, als ob Mac nie eine ideale Plattform für Echtzeit-Softwareentwicklung sein wird. Evan Plaice vor 13 Jahren 1
@jweyrich Ausnahmen bei CPUs mit QPI (Intels NUMA) wie bei Mac Pro, bei denen die Einstellung der CPU-Affinität [die Speicheraffinität deaktiviert] (http://frankdenneman.nl/2011/01/beating-a-dead-horse-using- CPU-Affinität /) und verringert die Leistung. Dies gilt jedoch nicht für mobile Prozessoren. Jano vor 11 Jahren 1
In unserem Fall unterstützen viele Anwendungen nicht die Beschränkung der Anzahl von Kernen, während harte Daten verarbeitet werden. Daher besteht der naive Ansatz, ein System auf den anderen Plattformen ansprechend zu halten, darin, den verschiedenen Apps den Zugriff auf alle Kerne zu verweigern. RandomInsano vor 7 Jahren 0

4 Antworten auf die Frage

12
void-pointer

OS X unterstützt seit Version 10.5 eine Thread-Affinitäts-API . Hier ist relevantes Material von der Webseite, auf die ich verlinkt habe.

Affinity-Set

Eine Affinitätsgruppe ist eine Sammlung von Threads, die Speicherressourcen gemeinsam nutzen und einen L2-Cache gemeinsam nutzen möchten. Eindeutige Affinitätssätze stellen separate Affinitäten dar. Das heißt, Threads, die zu einem anderen Satz gehören, sollten einen separaten L2-Cache verwenden und daher auf einem anderen logischen Prozessor ausgeführt werden.

Ein Affinitätssatz wird durch ein "Tag" identifiziert. Threads werden einem bestimmten Affinitätssatz zugewiesen, indem ihm das Tag zugewiesen wird, das diesen Satz identifiziert. Ein Thread kann höchstens zu einem Affinitätssatz gehören. das heißt, es hat ein Affinitäts-Tag.

Auswirkung der Einstellung unterschiedlicher Affinitäts-Tags

Beispielsweise würde eine Anwendung, die zwei Threads in separaten L2-Caches ausführen möchte, die Threads mit verschiedenen Affinitäts-Tags festlegen. Auf einer Dual-Core-Maschine wird diese Affinität effektiv ignoriert. Bei einem 4-Core-MacPro versucht der Scheduler jedoch, Threads in separaten Paketen auszuführen. Auf einem 8-Core-MacPro versucht der Scheduler auf ähnliche Weise, diese Threads auf separaten Dies auszuführen (die sich möglicherweise im selben physischen CPU-Paket befinden oder nicht).

Verwendungsbeispiel

Eine Anwendung, die auf jedem verfügbaren Prozessor einen Thread platzieren möchte, führt Folgendes aus:

  • Ermitteln Sie die Anzahl der Prozessoren im System mit sysctl (3).
  • Erstellen Sie diese Anzahl von Threads.
  • Legen Sie für jeden Thread ein eindeutiges Affinitäts-Tag fest.
  • Starten Sie alle Threads.

Threads mit Standard-Affinitätsrichtlinie werden auf jedem Prozessor freier geplant. Diese Threads werden vorzugsweise zur Ausführung auf einem Prozessor im Leerlauf migriert. Threads mit Affinitäts-Tags bleiben an der richtigen Stelle.

In der Quelle finden Sie Codelisten und Informationen zur gemeinsamen Nutzung von Affinitäts-Tags zwischen übergeordneten und untergeordneten Prozessen, zum Abrufen der CPU-Cache-Konfiguration und mehr.

11
ta.speot.is

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

Mac OS X does not export interfaces that identify processors or control thread placement—explicit thread to processor binding is not supported. Instead, the kernel manages all thread placement. Applications expect that the scheduler will, under most circumstances, run its threads using a good processor placement with respect to cache affinity.

OS X unterstützt seit Version 10.5 eine Thread-Affinitäts-API. Sehen Sie meine Antwort für Details. void-pointer vor 9 Jahren 2
4
jweyrich

Until now, the XNU (1504.3.12) scheduler doesn't implement processor affinity for processes nor threads.

So MacOSX doesn't provide any means to do that.

2
Alan Baldo

Über http://images.apple.com/macosx/docs/OSX_for_UNIX_Users_TB_July2011.pdf

• Effiziente Kernel-Threads. Jeder POSIX-Thread wird in einer bestimmten CPU in eine Warteschlange gestellt, wodurch die Prozessoraffinität und Skalierbarkeit verbessert wird, während die Sperrenkonflikte reduziert werden. Threads entsprechen POSIX (1c), einschließlich Unterstützung für Abbruch und gemeinsame Mutexe.

Es sieht aus wie eine Werbung für mich, mein iMac, auf dem Lion läuft, scheint dies die meiste Zeit zu respektieren, aber es hängt nicht von einem Prozess an einen Kern.

Ich konnte ohnehin keine API zur Steuerung der Prozessaffinität für Darwin finden.