Translate In English / Traduire en Anglais
Le temps est aux investigations poussées et en voici une autre. On le sait maintenant depuis quelques jours : Le Pentium Extreme Edition basé sur le dual-core Smithfield sera bientôt annoncé et disposera de l'Hyper-Threading. Pour cette raison, nous avons voulu vérifier le comportement de Windows XP dans le cas d'un Dual Core avec HyperThreading activé. La raison est simple : Personne n'a oublié qu'au lancement de l'HT, le scheduler (composant chargé de repartir les taches sur les différents CPUs) de Windows 2000 ne supportait pas l'Hyperthreading et faisait chuter les performances dans certains cas.
Avec l'arrivée des processeurs Dual Core disposant de l'HT, une nouvelle configuration va arriver sur le marché grand public : Deux processeurs physiques et quatre processeurs logiques. Nous avons ainsi effectué quelques tests avec un Dual Xeon doté de l'HyperThreading. Les résultats sur l'efficacité de l'HyperThreading sont surprenant et méritait d'être mis à jour avant les tests imminents des processeurs Dual Core. Pour cette série de tests, nous avons utilisés deux Xeon 3.0 GHz FSB800, 1 Go de DDR400 et une Asus NCCH-DL, basée sur le chipset E7210 (i875-ES).
Afin de mettre en évidence les résultats obtenus par le scheduler de Windows XP (SP2) avec l'HyperThreading, nous avons utilisé des tests d'encodage vidéo, qui tirent généralement très bien parti de cette technologie. Voyons par exemple les résultats avec un encodage sous Windows Media Encoder 9, du 100% Microsoft donc :
Comme on le constate, avec un seul CPU, on obtient un gain important d'environ 20% lorsqu'on active l'HyperThreading. Le passage de un à deux CPUs physiques permet même de gagner 65% ! Par contre, l'activation de l'HyperThreading sur une configuration à deux cores physiques entraîne une perte de 3.5%. Nous avons reproduit ce test, mais cette fois avec un codec DivX 5.2.1 et le logiciel VirtualDub en version 1.6.3. Le résultat est identique :
Alors que le gain, lorsqu'on active l'HT, est sensible avec un CPU, il provoque ici aussi une légère perte de performances avec deux cores physiques. Tentons maintenant d'expliquer d'ou vient le problème. Un CPU à deux cores physiques et quatre CPUs logiques (qui apparaissent comme des CPUs dans le gestionnaire des tâches de Windows) peut être représenté de cette façon :
Le premier thread vient logiquement se positionner sur CPU#1. Par contre, le second thread doit aller se positionner sur le premier CPU logique du SECOND core (et pas sur le second CPU logique du premier core). En effet, si une application utilisant deux threads utilisent, comme sur un système SMP classique, CPU#1 et CPU#2, un seul core physique ne fonctionne, ce qui fait chuter les performances ! Ainsi, il faut d'abord utiliser les deux cores physiques avant de commencer à utiliser les cores logiques. Nous avons ainsi utilisé l'application Multi-Thread Benchmark de Franck, qui calcule un simple whetstone, et qui permet d'obtenir le gain pratique maximal en fonction des cores. En utilisant le schéma si dessus, voici les résultats obtenus :
Comme on le voit, si les deux threads sont répartis sur les CPU #1 et #2, le gain de performances n'est du qu'à l'HyperThreading et un des deux CPUs se tourne les pouces alors qu'il pourrait être utilisé pour offrir de meilleures performances. Or visiblement, c'est sur ce point que le scheduler de Windows XP pêche. Il semble gérer assez mal la répartition des threads sur les CPUs logiques et ne définirait pas l'affinité optimale dans le cadre d'un CPU Dual Core avec HT. Heureusement, l'application en elle même peut gérer l'affinité (la répartition des threads sur les CPUs) et donc, corriger le problème. C'est par exemple le cas de TMPGEnc en version 2.524 qui ne laisse pas cette gestion à Windows. Nous avons ainsi testé la compression de la même vidéo avec ce logiciel :
HT activé, on constate bien ici un gain avec deux CPUs quasiment identique à celui qu'on observe avec un seul CPU. TMPGEnc ne pose donc pas de problème avec une gestion des threads qui n'est pas déléguée à Windows.
Bref, au moment de la sortie de ces CPUs Dual Core avec HT activé, il faudra étudier attentivement le comportement des applications multithreads. En effet, il semble que Windows XP ait beaucoup de mal à gérer quatre CPUs logiques répartis sur deux cores physiques. Si Microsoft ne daigne pas corriger ce problème, ce qui est malheureusement probable (le bug du scheduler sous 2000 avec l'HT n'a jamais été réglé, et les développements sur le kernel d'XP sont probablement déjà stoppé au profit de Longhorn), il ne restera plus aux développeurs que le choix d'adapter leurs logiciels pour une gestion interne de l'affinité et des threads...