Comment fonctionne Windows Processor Affinity avec des processeurs hyperthraires? Utilisons un exemple (photo) d'un système avec quatre noyaux, chacun avec un noyau virtuel hyper-fileté.
C'est tout très vague et me déroutant pour moi. HT est génial, mais il semble certainement de réduire la transparence de l'allocation des ressources.
Quels cœurs correspondent à chaque "processeur" ci-dessous?
En supposant que nous disposons de noyau 1, 2, 3 et 4, CPU4 et CPU5 représentent le noyau 3.
Le CPU 6 et la CPU 7 ci-dessous représentent-ils un noyau; le HT et le vrai noyau?
Il n'y a pas de distinction entre les deux - ils ont toutes deux des interfaces matérielles physiques à la CPU, l'interface logique est implémentée dans du matériel (voir la touche Fiche technique du processeur Intel Core, Volume 1 pour plus de détails). Fondamentalement, chaque noyau comporte deux unités d'exécution séparées, mais elle partage des ressources communes entre elles. C'est pourquoi, dans certains cas, l'hyperthreading peut réellement réduire les performances.
Si, par exemple, la CPU 6 représente un noyau réel et une CPU 7 un noyau HT, un fil sera-t-il attribué juste à Just CPU7 obtenir uniquement la gauche sur les ressources d'un véritable noyau? (en supposant que le noyau exécute d'autres tâches)
Voir au dessus. Un fil affecté à seulement CPU6 ou uniquement CPU7 exécutera exactement la même vitesse (en supposant que le thread fonctionne le même travail, et les autres noyaux du processeur sont au ralenti). Windows connaît les processeurs compatibles HT et le planificateur de processus prend en compte ces éléments.
L'hyperthread est-il entièrement géré dans le processeur de sorte que les fils soient jonges en interne? Si oui, est-ce que, à la portée de la CPU ou à la portée centrale? Exemple: si la CPU 6 et 7 représentent un noyau, cela n'a-t-il pas d'importance qu'un processus est attribué, car la CPU attribuera des ressources nécessaires à un thread en cours d'exécution?
Tous les deux. Le matériel actuel lui-même est pas Calendrer les noyaux pour exécuter des programmes, c'est le travail du système d'exploitation. La CPU elle-même est toutefois responsable du partage des ressources entre les unités d'exécution réelles et Intel dicte la manière dont vous pouvez écrire du code pour le rendre aussi efficace que possible.
Je remarque que les processus à filetage unique à long terme sont un peu rebondés autour des noyaux, au moins au moins en fonction du gestionnaire de tâches. Cela signifie-t-il que l'attribution d'un processus à un noyau unique améliorera les performances d'un peu (en évitant les commutateurs de contexte et les invalidations de cache, etc.)? Si oui, puis-je savoir que je ne cessions pas à "juste un noyau virtuel"?
C'est un comportement normal et non, l'affectant à un seul noyau sera non améliore les performances. Cela étant dit, si pour une raison quelconque, vous voulez vous assurer qu'un seul processus n'est exécuté que sur un seul noyau physique, attribuez-le à tout processeur logique.
La raison pour laquelle le processus "rebondit" est due au planificateur de processus. C'est un comportement normal et vous rencontrerez probablement une réduction des performances en limitant les cœurs que le processus peut exécuter (quel que soit le nombre de threads qu'il a), car le planificateur de processus doit maintenant travailler plus fort pour que tout fonctionne avec vos restrictions imposées. Oui, cette pénalité peut être négligeable dans la plupart des cas, mais l'essentiel est à moins que vous ayez une raison de le faire, ne !
La mise en page du processeur est censée être organisée de sorte qu'un système d'exploitation qui ne puisse pas reconnaître que tous vos CPU reçoivent la performance maximale possible. Cela signifie qu'un noyau virtuel de chaque noyau physique sera répertorié avant qu'un deuxième noyau virtuel de tout noyau physique est répertorié.
Par exemple, dites que vous avez quatre noyaux hyper-threads, appelés A, B, C et D. Si vous supposez A et B partagent un cache L2 et C et D partagent un cache L2, la commande devrait être quelque chose comme:
0 = A1 1 = C1 2 = B1 3 = D1 4 = A2 5 = C2 6 = B2 7 = D2
De cette façon, un système d'exploitation qui saisit seulement deux CPU devient utiliser tout le cache L2. En outre, un système d'exploitation qui saisit uniquement quatre CPU devient utiliser toutes les unités d'exécution.
Encore une fois, c'est la façon dont il est censé être.
Bien sûr, si vous utilisez un système d'exploitation qui comprend votre topologie de la CPU, cela n'a pas d'importance. Le BIOS remplit une table qui explique quels cœurs partagent des unités d'exécution, qui partagent des caches, etc. Tous les systèmes d'exploitation modernes que vous êtes susceptibles d'utiliser qui soutient pleinement votre CPU comprend la topologie complète du processeur.