Comment définir l'affinité du processeur dans Snow Leopard sur un MacBook Pro? Je sais que dans Windows, vous pouvez simplement le basculer dans le Gestionnaire des tâches.
Comment définir l'affinité du processeur dans Snow Leopard sur un MacBook Pro? Je sais que dans Windows, vous pouvez simplement le basculer dans le Gestionnaire des tâches.
Réponses:
OS X prend en charge une API d'affinité de thread depuis la version 10.5. Voici quelques éléments pertinents de la page Web à laquelle j'ai lié.
Un ensemble d'affinités est une collection de threads qui partagent des ressources mémoire et souhaitent partager un cache L2. Des ensembles d'affinités distincts représentent des affinités distinctes, c'est-à-dire que les threads appartenant à un ensemble différent doivent utiliser un cache L2 distinct et donc être exécutés sur des processeurs logiques différents.
Un ensemble d'affinité est identifié par une "étiquette". Les threads sont affectés à un ensemble d'affinités particulier en lui attribuant la balise identifiant cet ensemble. Un thread peut appartenir à au plus un ensemble d'affinités; c'est-à-dire qu'il a une balise d'affinité.
Par exemple, une application souhaitant exécuter 2 threads sur des caches L2 distincts définirait les threads avec des balises d'affinité différentes. Sur une machine à double cœur, cette affinité sera effectivement ignorée. Cependant, sur un MacPro 4 cœurs, le planificateur tentera d'exécuter des threads sur des packages distincts. De même, sur un MacPro à 8 cœurs, le planificateur tentera d'exécuter ces threads sur des matrices distinctes (qui peuvent ou non être dans le même package CPU physique).
Une application qui souhaite placer un thread sur chaque processeur disponible ferait ce qui suit:
- Obtenez le nombre de processeurs sur le système à l'aide de sysctl (3).
- Créez ce nombre de threads.
- Définissez chaque thread avec une balise d'affinité distincte.
- Démarrez tous les threads.
Les threads avec une politique d'affinité par défaut seront planifiés plus librement sur n'importe quel processeur. Ces threads seront préférentiellement migrés pour s'exécuter sur un processeur inactif. Les discussions avec des balises d'affinité auront tendance à rester en place.
Consultez la source pour les listes de codes et des informations sur le partage de balises d'affinité entre les processus parent et enfant, l'obtention de la configuration du cache du processeur, etc.
http://developer.apple.com/mac/library/releasenotes/Performance/RN-AffinityAPI/
Mac OS X n'exporte pas les interfaces qui identifient les processeurs ou contrôlent le placement des threads - la liaison explicite du thread au processeur n'est pas prise en charge . Au lieu de cela, le noyau gère tout le placement des threads. Les applications s'attendent à ce que le planificateur exécute, dans la plupart des cas, ses threads en utilisant un bon placement de processeur en ce qui concerne l'affinité du cache.
Depuis http://images.apple.com/macosx/docs/OSX_for_UNIX_Users_TB_July2011.pdf
• Fils de noyau efficaces. Chaque thread POSIX est mis en file d'attente sur un processeur particulier, améliorant l'affinité et l'évolutivité du processeur tout en réduisant les conflits de verrouillage. Les threads sont conformes à POSIX (1c), y compris la prise en charge de l'annulation et des mutex partagés.
Cela ressemble à une annonce pour moi, mon iMac exécutant Lion cherche à respecter cela la plupart du temps, mais il n'épingle pas un processus à un noyau.
De toute façon, je n'ai trouvé aucune API pour contrôler l'affinité des processus pour Darwin.