2017-06-11 1 views
0

Je trouve la citation suivante d'une autre réponse (Performance difference for multi-thread and multi-process):Les deux threads d'un core virtuel (hyperthreading) peuvent-ils exécuter différents processus OS?

Ensuite, vous pouvez avoir des CPU avec « hyperthreading », qui peuvent fonctionner (à moins ) deux fils sur un noyau très rapidement - mais, pas de processus (puisque les threads "hyperthreaded" ne peuvent pas utiliser des espaces adresse distincts) - encore un autre cas dans lequel les threads peuvent gagner en performances.

Est-ce exact? Les deux threads d'un noyau virtuel (hyperthreading) ne peuvent pas exécuter différents processus de système d'exploitation? Sur une machine hyperthreaded, si j'ai une architecture de programme qui utilise des processus "worker" qu'un processus "supervor" communique avec les sockets, est-ce que je verrais une augmentation des performances en déplaçant ces processus de travail dans le processus superviseur en tant que fils (laissant les prises et tout le reste pareil)?

Répondre

0

Première partie de la question peut être répondue rapidement, vous pouvez le tester sur votre système si c'est pareil.

Sur mon ancien système Windows avec un processeur Intel, je peux depuis le gestionnaire de tâches régler l'affinité de différents programmes (ou processus) sur chacun des 2 HT d'un noyau, vu qu'ils fonctionneront tous les deux là. Sur la deuxième question avec les travailleurs et les superviseurs, vous pouvez obtenir un petit gain de performance (au moins sur Linux) en les ayant dans le même processus. En effet, lorsque vous faites une basculez vous aussi faire définir la page Table (intel CR3-registre), et le code ressemble à ceci lors de changement de tâche:

if (newProcess != oldProcess) 
    CR3 = new page table 

Réglage CR3 invalident efficacement le TLB comme la page les tables diffèrent. La conséquence est que le processeur doit effectuer une marche de table de page pour trouver les traductions correctes. Sur un processeur 64 bits, une marche de page prendra typiquement 5 promenades de mémoire coûtant quelque chose de 5 * accès TLB 2 (chaque ~ 3 cycles) à 5 * accès à la mémoire (chaque ~ 300 cycles).