Bernard Ourghanlian, responsable technologies et sécurité de Microsoft France, nous a écrit à la suite de la publication de l'article Windows incapable d'exploiter les derniers processeurs. Nous publions ci-dessous, en italiques, son courrier, ainsi que notre réponse. Selon l'article publié par le Monde Informatique il semblerait que Windows serait incapable d'exploiter les derniers processeurs et serait, en particulier, incapable de gérer plus de 16 threads. Fort heureusement, il n'en est rien, ainsi que le démontre un examen rapide de l'affichage du gestionnaire de tâche sur un simple PC portable qui permet de visualiser 67 threads rien que pour le processus OUTLOOK.EXE, 37 pour explorer.exe, etc. Autrement dit, Windows Vista - ainsi que d'ailleurs toutes les versions successives de Windows NT depuis sa version initiale - est un système d'exploitation qui est parfaitement capable de gérer un nombre extrêmement important de threads. En fait, il n'y a pas de d'autre limite au nombre de threads qu'il est possible de créer sur un système Windows que la quantité de mémoire adressable par un processus utilisateur. Ce que veut dire M. Ty Carlson dont le nom est cité dans cet article, c'est qu'avec l'avènement et la généralisation des processeurs multi-coeurs, la plupart des applications qui tournent aujourd'hui sur un PC n'ayant pas été conçues à l'origine pour s'exécuter dans un environnement multiprocesseur, celles-ci ne pourront pas nécessairement profiter de l'ensemble des coeurs disponibles pour s'exécuter plus rapidement car elles n'ont pas été pensées pour s'exécuter en parallèle. Autrement dit, dans la mesure où les processeurs sont en train de devenir massivement multi-coeurs, il va falloir faire évoluer les techniques de programmation pour en tirer parti mais cela n'a absolument rien à voir avec le fait que Windows ne puisse pas tirer parti de 4 processeurs ou utiliser plus de 16 threads. Dernière remarque : l'article fait également référence au fait « qu'en configuration standard, XP est toujours limité à n'exploiter que 128 Ko de la mémoire cache des processeurs Intel » ; fort heureusement, ce n'est pas Windows XP (ni un quelconque système d'exploitation d'ailleurs, qu'il soit d'origine Microsoft ou non) qui gère la mémoire cache des processeurs Intel mais bien les processeurs eux-mêmes. Pour rappel, un cache est le nom donné au premier niveau de hiérarchie mémoire que l'on rencontre lorsque les adresses quittent le CPU. Quand le CPU trouve l'élément demandé dans le case, on a ce que l'on appelle un succès cache. Quand il ne le trouve pas, on parle alors de défaut de cache (ou échec cache). Un ensemble de données de taille fixe, appelé bloc, contenant le mot demandé est obtenu à partie de la mémoire principale et placé par le cache. Le principe dit de localité temporelle nous dit qu'il y a des chances que l'on ait besoin à nouveau de ce mot dans un futur proche : il est donc utile de le placer dans le cache où il peut être obtenu rapidement. A cause du principe dit de localité spatiale, il y a aussi une grande probabilité que les autres données du bloc soient bientôt nécessaire. Le temps d'acquisition lors d'un défaut de cache dépend à la fois de la latence et de la bande passante mémoire : la latence détermine le temps pour récupérer le premier mot du bloc et la bande passante détermine le temps pour récupérer le reste de ce bloc. Un échec cache est traité par matériel et oblige les processeurs avec une exécution dans l'ordre à s'arrêter (suspension) jusqu'à ce que la donnée soit disponible. [[page]] Dans tous les cas, ces dispositifs de cache, qu'ils soient de niveau 1, 2 ou 3, unifiés ou séparés, données ou instructions, associatifs ou directs, etc. sont gérés directement par le matériel (certaines architectures RISC comme l'architecture Alpha permettaient de pré-charger grâce à une instruction machine particulière un cache à partir de données contenues en mémoire mais, même dans ce cas-là, c'était bien au processeur de gérer les remplissages et les extractions depuis le cache sur instruction du programmeur - de telles fonctionnalités n'existent pas sur un processeur x86). En résumé, Windows XP comme n'importe quel autre système d'exploitation est donc parfaitement capable d'exploiter plus de 128 Ko de mémoire cache sur les processeurs Intel (x86, x64 ou Itanium) pour la bonne et simple raison qu'il n'est pas vraiment concerné par la taille de ce cache. Notre réponse, point par point : OS multitâche et processeur multi-threads Dans son droit de réponse (bien plus long que l'article originel...), Microsoft France conteste le fait que Windows soit "incapable de gérer plus de 16 threads". Nous invitons l'auteur de ces lignes à se rapprocher de Ty Carlson, « director of technical strategy » chez Microsoft US afin qu'ils accordent leurs violons. Le 23 mai dernier, Ty Carlson a déclaré que Windows Vista "est conçu pour tourner sur un, deux, trois, voire quatre processeurs" (faisant allusion aux coeurs des processeurs multi-coeurs) avant de préciser que Vista avait été conçu pour tirer profit des threads des processeurs, "mais pas jusqu'à 16". Une citation de Ty Carlson se trouve sur le blog de Tom Krazit. Soyons certains que Ty Carlson embellit plus la réalité des produits Microsoft qu'il ne minore leurs mérites. Nous confirmons donc notre propos et nous étonnons que Microsoft France mélange allègrement les threads propres à Windows - qui existent depuis que cet OS est multitâche - et ceux des processeurs. Dans le premier cas, il s'agit de découpages des processus (les threads se succédant dans le processeur), dans le second, des files d'exécution que les processeurs peuvent gérer. La limitation de la mémoire cache Cette limitation à 128 Ko de mémoire cache est inscrite dans la base de registre de Windows XP, à l'adresse suivante : [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Memory Management] "SecondLevelDataCache". Mais, effectivement, cette variable fait partie du tribut que Windows paye à la compatibilité ascendante. Elle ne concerne que les processeurs d'ancienne génération. Outlook 2007 et ses 67 threads Contrairement à l'auteur qui se rengorge des 67 "threads" d'Outlook 2007 - soit le record des threads pour les logiciels actifs sur sa machine - nous serions plutôt enclin à considérer cela comme la confirmation d'un problème de conception d'Outlook. Problème qui conduit les utilisateurs de ce logiciel à se plaindre de son extrême lenteur, soulignait en avril dernier notre confrère Computerworld UK.