Je suis simplement curieux de savoir pourquoi le planificateur déplace constamment une application entre les processeurs, plutôt que de la garder sur une. Il semble un peu ridicule d’avoir 4 noyaux à 25% au lieu d’un à 100%.
Est-ce que cela a à voir avec la chaleur, ou est-ce plus efficace en quelque sorte? Est-ce que les autres OS le font différemment?
Des idées ou des liens vers des informations détaillées seraient utiles. (Impossible de trouver beaucoup moi-même.)
Mettre à jour:
Par "étalé", je ne veux pas dire qu'il s'exécute sur plusieurs processeurs à la fois, mais qu'il est déplacé de l'un à l'autre plusieurs fois par seconde, ce qui donne l'impression qu'il est étalé.
windows
performance
cpu
Macke
la source
la source
Réponses:
je pense
wierob
a assez bien décrit le problème.Voici un article plus ancien discuter
processor affinity
paramètres avec un quad-core QX6800 .(le lien pointe vers la deuxième page de cet article).
Si vous ne forcez pas l'affinité de processus avec un noyau, perdez-vous de la performance ?
la conception du processeur lui-même considère également de telles choses.
a un 8Mo
L3
cache partagé sur ses 4 cœurs .Il convient de noter que, même si vous avez peut-être choisi de n'exécuter que ce processus mono-threadé sur le système, le système d'exploitation lui-même exécute plusieurs autres tâches à exécuter. Le planificateur équilibre toute cette activité entre le pool de processeurs (ou les cœurs) disponible.
À l'avenir, avec le Nehalem architecture et NUMA ,
processeurs sur plusieurs sockets sera également en mesure de mieux répondre à l'accès thrash.
Voici une image rapide d'un Page ArsTechnica sur NUMA .
Si Nehalem et
i7
vous intéresse, j'en ai plus liens à cette réponse .la source
Le planificateur exécute simplement le prochain thread prêt à être exécuté sur un core / CPU "libre".
Vous pouvez affecter un processus à une CPU spécifique via le gestionnaire de tâches Windows.
Avoir 4 cœurs à 25% signifie que 4 threads sont exécutés simultanément. Considérant que, un noyau à x% signifie qu'un seul thread est exécuté. Donc, le premier est plus efficace dans certains cas.
Mais lors de son exécution, le cache de la CPU est rempli de données accessibles par le thread. Ainsi, si le thread est exécuté sur un autre processeur, il manquera davantage de données manquantes dans le cache, ce qui est coûteux, car les données ne se trouvent pas dans le cache de ce processeur.
Que fait votre fil? Si le thread "dort" pendant un temps très court, le noyau sur lequel il a été exécuté peut être occupé par une autre menace et votre thread est donc exécuté sur le prochain noyau disponible. Que se passe-t-il si vous ne spécifiez qu'un seul cœur à utiliser par votre processus (par exemple, un gestionnaire de tâches)?
la source
Le système d'exploitation migre le thread entre les cœurs de la CPU (rapidement, plusieurs fois par seconde). Il est plus efficace de l’utiliser tout le temps sur le même noyau. Cela peut être appliqué par l'élément de menu contextuel "Définir l'affinité" dans le Gestionnaire des tâches.
Notez que généralement (utilisation domestique typique) la différence est de l'ordre de quelques pourcents.
Le "4 cœurs chacun à 25% d'utilisation" signifie, comme le montre le Gestionnaire des tâches l'utilisation moyenne, que chaque cœur a été utilisé au maximum un quart du temps et a libéré le reste du temps.
La description concerne Windows, mais elle est similaire sur d’autres systèmes d’exploitation.
la source
Ce n'est pas. Un thread ne peut fonctionner que sur un seul processeur. Cependant, certains les processus avoir plusieurs threads, qui peuvent être répartis.
Croyez-le ou non, le raisonnement n’a jamais tenu compte de ce à quoi il ressemble. Le système essaie de répartir les threads car il ne dispose d'aucun moyen de savoir quand on va piquer.
la source
Si quelqu'un lit encore ceci, j'ai aussi remarqué cela et effectué plusieurs tests pour voir s'il ne s'agissait pas d'un simple coup de chance. Il s'avère que ce n'est pas le cas! Je pense que la diffusion d'un seul thread sur tous les cœurs est plus efficace pour plusieurs raisons:
De plus, à cause des deux observations ci-dessus, j'ai fini par croire que Turbo Boost et IDA étaient inefficaces. Ils sont peut-être utiles sur les anciens systèmes d'exploitation, mais Linux et Windows 7 répartissent tout le contenu dans tous les cœurs de manière assez efficace. Ainsi, un Core 2 Quad q9100 à 2,26 GHz sera presque toujours plus rapide qu'un Core 2 Duo X9100 à 3,06 GHz, et je l'ai rarement vu utiliser IDA (essentiellement le prédécesseur du Turbo boost, augmente la fréquence sur un ou deux cœurs uniquement pour les applications à un seul thread).
la source