2009-11-16 3 views
7

J'essaie de découvrir comment un système d'exploitation (Windows, Linux) affecte des numéros à un processeur logique dans un environnement Hyper-Threading activé. ?Numérotation de CPU sur un système activé par l'hypertonie

Est-ce que les deux systèmes d'exploitation assignent d'abord en série les numéros aux processeurs physiques, puis commencent à numéroter le processeur logique ou est-ce qu'une autre règle est suivie? par exemple. dans 2 système de processeur physique avec hyper threading, un système d'exploitation attribue-t-il le numéro 0,2 au premier CPU physique et ensuite au processeur physique 1,3 à la seconde?

Toutes les références seraient vraiment appréciées.

Merci d'avance.

Cordialement, -Jay. Edit: Réponse à la question d'Alan: J'ai besoin de le savoir parce que, dans mon travail, j'ai besoin de lier différents threads à des processeurs spécifiques pour éviter les changements de contexte et je veux m'assurer que certaines tâches sont liées à séparé cpus physique. Merci

Répondre

8

D'après ce que je sais, cela dépend de la façon dont le processeur expose ses cœurs. Lorsque HT est activé, il n'y a pas de CPU physiques exposées, mais plutôt deux CPU logiques par CPU physique, donc il n'y a pas de différence si vous exécutez un thread sur l'un ou l'autre CPU logique. La seule chose qui importe est quelles paires de processeurs logiques appartiennent à chaque CPU physique.

Avec les processeurs à un seul cœur (comme le Pentium 4 avec HT), c'est assez simple, puisque vous n'avez qu'une paire - donc c'est (0, 1). Avec les processeurs quad core (comme Nehalem), les paires de noyaux logiques sont (0,4), (1,5), (2,6) et (3,7). Le schéma consistant à faire en sorte que toutes les premières moitiés de chaque paire aient alors toutes les secondes moitiés en échelle avec les futurs processeurs qui ont encore plus de cœurs. La vraie question est pourquoi avez-vous besoin de connaître l'arrangement des paires? Laissez le planificateur du système d'exploitation choisir les bons coeurs pour les bons threads - il fait un travail assez décent.

+1

Je veux le savoir parce que je veux lier différentes tâches (Threads) à différents processeurs logiques. –

+0

Mais pourquoi? Le programmateur de thread prendra soin d'équilibrer correctement la charge entre les cœurs. Il n'est généralement pas nécessaire de le faire manuellement (cela peut même nuire aux performances) et peut provoquer des effets secondaires inattendus dans les cas de bords. –

+0

Certains des algorithmes que nous utilisons ont des contraintes de temps en micro secondes. Donc, si nous n'appliquons pas l'affinité du CPU sur ces multiples threads qui traitent ces algos, les changements de contexte rendent ces délais impossibles à atteindre. . –

4

Vous pouvez rechercher dans /sys/devices/system/cpu/ les informations sur les processeurs. La disposition des noyaux et de leurs paires hyperthreaded peut être trouvée dans /sys/devices/system/cpu/cpuN/topology/thread_siblings_list.

Questions connexes