INSU (Meudon) et ENSTA (Paris)
Windows NT
et Linux
sur la machine Pentium Pro
Voilà donc enfin, côte à côte, les deux systèmes d'exploitation de prédilection des machines à base de Pentium Pro : Windows NT et Linux. Que vaut l'un par rapport à l'autre ?
C'est au niveau des performances que nous allons tâcher de répondre à cette question qui actuellement, et compte tenu des succès remportés à la fois par cette machine, et par ces deux systèmes d'exploitation, préoccupe bon nombre d'informaticiens et plus généralement d'usagers de l'informatique.
Conditions des essais
Les essais que nous allons présenter ont été réalisés sur une même machine Pentium PRO/200MHz, en y installant consécutivement Windows NT et Linux.
C'est Patrick Rougeau qui a assuré les deux installations ainsi que la conduite des tests qui ont suivi chacune d'entre elles.
La machine testée
Les deux systèmes d'exploitation ont donc fonctionné sur une même machine Pentium Pro 200. Il s'agit d'une machine KPC (Kit PC) construite par la société NewStep. Le processeur est un Pentium Pro cadencé à 200 MHz, avec 256 Ko de cache. La carte mère est une ASUSTEK avec 512 Ko de cache. La mémoire RAM de 128 Mo est de type EDO. Le disque est de type IDE d'une capacité de 850 Mo.
Le système d'exploitation Windows NT
C'est la version 4.0 de Microsoft de type Work Station. Le compilateur C est visual C++ (on l'appelle sous la forme : ``cl'') propre à cette version 4.0 de NT. Le compilateur Fortran est le Professionnal Edition 4.0 de Microsoft Power Station (on l'appelle sous la forme : ``fl32'').
Les options d'optimisation choisies en général pour ces deux compilateurs sont :
/g5 pour l'optimisation selon l'architecture Pentium,
/Ox pour l'optimisation en vitesse.
Après divers essais, il nous est apparu que dans la plupart des cas (voir après), c'est ce couple d'options qui conduit à une meilleure optimisation des temps d'exécution des programmes.
Les temps réels d'exécution ont été calculés par différences, à partir de la commande ``time'' de Windows NT qui donne un temps d'horloge réel absolu. C'est un script que nous avons conçu spécialement pour cette opération qui assure automatiquement ce calcul.
Pour faire exécuter des programmes en parallèle (test de tenue en charge), nous avons sélectionné les icones des programmes exécutables concernés, et avons lancé le tout, en actionnant la case ``Fichier ouvrir'' du menu.
Le système d'exploitation Linux
Il correspond à la distribution Red Hat 4.1, soit à la version du noyau de Linux 2.0.27.
Les compilateurs C et Fortran de Gnu qui ont été utilisés sont respectivement gcc et g77 de la version 2.7.2.1-5. Notons que ces compilateurs ne sont pas ceux inclus naturellement dans la Red Hat 4.1, mais qu'ils ont été introduits indépendamment et a posteriori dans le système.
Les essais avec Linux se sont déroulés selon notre technique habituelle. Les options de compilation sont celles que nous utilisons habituellement.
Le couple d'option généralement le plus favorable, que ce soit pour gcc ou f77 étant -funroll-all-loops -O2. Le temps d'exécution prélevé correspond au temps réel issu de la commande ``time''. Les programmes traités en parallèle (test de tenue en charge) sont tous lancés simultanément en arrière plan, comme à l'accoutumé. Dans les tableaux qui suivent, les résultats d'essais sont classés selon l'ordre croissant du temps réel d'exécution des programmes, exprimé en secondes. Dans chaque tableau, l'essai le plus performant apparaît donc en tête.
Comparaisons Windows NT - Linux
Puissance du processeur
Puissance intrinsèque du processeur
Programme m-permut.c
KPC PENTIUM-PRO-200MHz-128 Mo - Windows-NT 4.0 47
KPC PENTIUM-PRO-200MHz-128 Mo - Linux 2.0.27 52
Calculs en entier
Usage d'un compilateur FORTRAN
Programme m-comb.f
KPC PENTIUM-PRO-200MHz-128 Mo - Linux 2.0.27 89
KPC PENTIUM-PRO-200MHz-128 Mo - Windows-NT 4.0 102
Usage d'un compilateur C
Programme m-comb.c
KPC PENTIUM-PRO-200MHz-128 Mo - Linux 2.0.27 94
KPC PENTIUM-PRO-200MHz-128 Mo - Windows-NT 4.0 109
Calculs en virgule flottante
Usage d'un compilateur FORTRAN
Programme m-deriv.f
KPC PENTIUM-PRO-200MHz-128 Mo - Windows-NT 4.0 94
KPC PENTIUM-PRO-200MHz-128 Mo - Linux 2.0.27 101
Usage d'un compilateur C
Programme m-deriv.c
KPC PENTIUM-PRO-200MHz-128 Mo - Windows-NT 4.0 95
KPC PENTIUM-PRO-200MHz-128 Mo - Linux 2.0.27 100
Accès aux bytes (traitement des chaînes de caractères)
Programme m-carac.c
KPC PENTIUM-PRO-200MHz-128 Mo - Linux 2.0.27 59
KPC PENTIUM-PRO-200MHz-128 Mo - Windows-NT 4.0 128
Calculs matriciels
Usage d'un compilateur FORTRAN
Programme m-matr.f
KPC PENTIUM-PRO-200MHz-128 Mo - Linux 2.0.27 111
KPC PENTIUM-PRO-200MHz-128 Mo - Windows-NT 4.0 133
Usage d'un compilateur C
Programme m-matr.c
KPC PENTIUM-PRO-200MHz-128 Mo - Windows-NT 4.0 53
KPC PENTIUM-PRO-200MHz-128 Mo - Linux 2.0.27 58
Appels de fonction de la bibliothèque standard du C
(méthode de Monte-Carlo)
Programme m-moncar.c
KPC PENTIUM-PRO-200MHz-128 Mo - Windows-NT 4.0 74
KPC PENTIUM-PRO-200MHz-128 Mo - Linux 2.0.27 111
Traitement de grands tableaux en mémoire RAM
Accès séquentiel au tableau
En FORTRAN : on traite le tableau colonne par colonne, ce qui, pour ce langage, correspondant à l'ordre de rangement des éléments du tableau en mémoire.
Usage d'un compilateur FORTRAN
Programme m-nmemvir1.f
KPC PENTIUM-PRO-200MHz-128 Mo - Linux 2.0.27 219
KPC PENTIUM-PRO-200MHz-128 Mo - Windows-NT 4.0 220
En C : on traite le tableau ligne par ligne, ce qui, pour ce langage, correspond aussi à l'ordre de rangement des éléments du tableau en mémoire.
Usage d'un compilateur C
Programme m-nmemvir1.c
KPC PENTIUM-PRO-200MHz-128 Mo - Windows-NT 4.0 90
KPC PENTIUM-PRO-200MHz-128 Mo - Linux 2.0.27 92
Dans le programme suivant, on traite le tableau ligne par ligne, ce qui, pour le langage FORTRAN, ne correspond pas à l'ordre de rangement des éléments du tableau en mémoire.
Programme m-vir.f
KPC PENTIUM-PRO-200MHz-128 Mo - Linux 2.0.27 59
KPC PENTIUM-PRO-200MHz-128 Mo - Windows-NT 4.0 107
Accès aléatoire au tableau
Programme m-vir4.c
KPC PENTIUM-PRO-200MHz-128 Mo - Windows-NT 4.0 53
KPC PENTIUM-PRO-200MHz-128 Mo - Linux 2.0.27 77
Les entrées/sorties sur disque
En accès aléatoire
Usage d'un compilateur FORTRAN
Accès direct dans un fichier disque de 1 200 x 1 200 entiers, avec
1 440 000 d'opérations d'écriture suivies par 1 200
opérations de lecture/écriture.
Programme m-stadis1.f
KPC PENTIUM-PRO-200MHz-128 Mo - Windows-NT 4.0 23
KPC PENTIUM-PRO-200MHz-128 Mo - Linux 2.0.27 29
Usage d'un compilateur C
Accès aléatoire dans un fichier de 64 Mo avec 100 000 opérations d'écriture/lecture. Soulignons que chaque écriture est immédiatement suivie d'une lecture.
Programme m-nnstadis.c
KPC PENTIUM-PRO-200MHz-128 Mo - Linux 2.0.27 39
KPC PENTIUM-PRO-200MHz-128 Mo - Windows-NT 4.0 1695
En accès séquentiel
Programme m-debi.c
KPC PENTIUM-PRO-200MHz-128 Mo - Linux 2.0.27 76
KPC PENTIUM-PRO-200MHz-128 Mo - Windows-NT 4.0 99
La tenue en charge
La mesure de la tenue en charge a consisté pour nous à lancer l'exécution simultanée de quinze des seize programmes précédents (tous les programmes sauf ``m-carac.c''), déjà testés individuellement, et à noter le temps nécessaire à l'exécution de cet ensemble, c'est-à-dire le temps séparant la lancée simultanée de tous les programmes, de la fin de l'exécution du dernier terminé.
Tenue en charge
KPC PENTIUM-PRO-200MHz-128 Mo - Linux 2.0.27 1866
KPC PENTIUM-PRO-200MHz-128 Mo - Windows-NT 4.0 2806
Analogies avec les machines de DEC :
WINDOWS NT et DIGITAL UNIX
Il est intéressant d'examiner à présent, sur une station de DEC, ici la DEC 2100-5/250, une comparaison de Windows NT et de Digital Unix qui est le système Unix de DEC.
Les versions des systèmes d'exploitations et des compilateurs utilisés sont :
Windows NT 3.51
Visual C++ (Microsoft) F77 VI.1 (DEC)
Digital Unix 3.7
C standard F77 pour la 3.7
Puissance du processeur
Programme m-permut.c
DEC 2100-5/250 - Digital-Unix 32
DEC 2100-5/250 - Windows-NT 32
Calculs en entier
Programme m-comb.f
DEC 2100-5/250 - Windows-NT 50
DEC 2100-5/250 - Digital-Unix 53
Calculs en flottant
Programme m-deriv.f
DEC 2100-5/250 - Windows-NT 96
DEC 2100-5/250 - Digital-Unix 101
Les entrées/sorties
Programme m-nnstadis.c
DEC 2100-5/250 - Digital-Unix 24
DEC 2100-5/250 - Windows-NT 273
La tenue en charge
DEC 2100-5/250 - Digital-Unix - 1 proc 1168
DEC 2100-5/250 - Windows-NT - 1 proc 1344
Importance des options de compilation avec NT
Afin de montrer l'importance des options de compilation avec Windows NT, nous présentons ici les résultats obtenus avec et sans options de compilation. Rappelons qu'avec options de compilation, on a appelé les compilateurs avec les deux options suivantes qui nous sont apparues comme étant généralement les plus favorables.
cl /g5 /Ox prog.c
fl32 /g5 /Ox prog.f
Puissance du processeur
Puissance intrinsèque du processeur
Programme m-permut.c
KPC PENTIUM-PRO-200MHz - NT 4.0 avec options 47
KPC PENTIUM-PRO-200MHz - NT 4.0 sans option 102
Calculs en entier
Programme m-comb.f
KPC PENTIUM-PRO-200MHz - NT 4.0 avec options 102
KPC PENTIUM-PRO-200MHz - NT 4.0 sans option 182
Programme m-comb.c
KPC PENTIUM-PRO-200MHz - NT 4.0 avec options 109
KPC PENTIUM-PRO-200MHz - NT 4.0 sans option 208
Calculs en virgule flottante
Programme m-deriv.f
KPC PENTIUM-PRO-200MHz - NT 4.0 avec options 94
KPC PENTIUM-PRO-200MHz - NT 4.0 sans option 196
Programme m-deriv.c
KPC PENTIUM-PRO-200MHz - NT 4.0 avec options 95
KPC PENTIUM-PRO-200MHz - NT 4.0 sans option 146
Accès aux bytes (traitement des chaînes de caractères)
Programme m-carac.c
KPC PENTIUM-PRO-200MHz - NT 4.0 avec options 128
KPC PENTIUM-PRO-200MHz - NT 4.0 sans option 307
Calculs matriciels
Programme m-matr.f
KPC PENTIUM-PRO-200MHz - NT 4.0 avec options 133
KPC PENTIUM-PRO-200MHz - NT 4.0 sans option 173
Programme m-matr.c
KPC PENTIUM-PRO- 200MHz - NT 4.0 avec options 53
KPC PENTIUM-PRO- 200MHz - NT 4.0 sans option 344
Appels de fonction de la bibliothèque standard du C
Programme m-moncar.c
KPC PENTIUM-PRO-200MHz - NT 4.0 avec options 74
KPC PENTIUM-PRO-200MHz - NT 4.0 sans option 111
Traitement de grands tableaux en mémoire RAM
Accès séquentiel au tableau
Programme m-nmemvir1.f
KPC PENTIUM-PRO-200MHz - NT 4.0 avec options 220
KPC PENTIUM-PRO-200MHz - NT 4.0 sans option 227
Programme m-nmemvir1.c
KPC PENTIUM-PRO-200MHz - NT 4.0 avec options 90
KPC PENTIUM-PRO-200MHz - NT 4.0 sans option 102
Programme m-vir.f
KPC PENTIUM-PRO-200MHz - NT 4.0 sans option 107
KPC PENTIUM-PRO-200MHz - NT 4.0 avec options 108
Accès aléatoire au tableau
Programme m-vir4.c
KPC PENTIUM-PRO-200MHz - NT 4.0 avec options 53
KPC PENTIUM-PRO-200MHz - NT 4.0 sans option 70
Les entrées/sorties sur disque
En accès aléatoire
Programme m-stadis1.f
KPC PENTIUM-PRO-200MHz - NT 4.0 sans option 23
KPC PENTIUM-PRO-200MHz - NT 4.0 avec options 26
Programme m-nnstadis.c
KPC PENTIUM-PRO-200MHz - NT 4.0 sans option 1695
KPC PENTIUM-PRO-200MHz - NT 4.0 avec options 1705
En accès séquentiel
Programme m-debi.c
KPC PENTIUM-PRO-200MHz - NT 4.0 sans option 99
KPC PENTIUM-PRO-200MHz - NT 4.0 avec options 103
Au delà des fluctuations que l'on constate dans le cas général entre les différents résultats obtenus respectivement avec Windows NT et Linux, le point essentiel qui distingue ces deux systèmes d'exploitation fonctionnant sur Pentium Pro est sans aucun doute la gestion du cache dynamique en mémoire RAM mise en évidence avec le programme ``m-nnstadis.c''.
Comme nous l'avions déjà signalé par ailleurs, la gestion du cache dynamique par Linux est excellente, bien que sa bonne réalisation soit exigeante en mémoire RAM.
En effet, ainsi que nous l'avions montré antérieurement, si Linux mémorise parfaitement les fichiers d'entrées/sorties en mémoire et en assume correctement le contrôle, il entraîne par contre la création, toujours en mémoire RAM, de buffers supplémentaires fort encombrants, et tels que si la capacité de la mémoire est insuffisante pour contenir ces buffers, on assiste en ce cas à une forte dégradation des performances due au swap des fichiers qui ne sont plus alors que partiellement mémorisés.
Le problème concernant la gestion du cache dynamique par Windows NT est tout autre.
Si les buffers de Windows NT sont effectivement gérés dynamiquement, comme le déclare Microsoft, ils ne peuvent toutefois empêcher les lectures/écritures sur disque pendant l'exécution du programme, ce qui entraîne les dégradations que l'on a observées.
Et malheureusement, il n'y aurait aucun moyen d'ajustement possible, contrairement à ce qui se fait par exemple avec le système Digital Unix qui peut, à condition d'initialiser en conséquence un paramètre du noyau, forcer les lectures/écritures à se faire en mémoire RAM.
Avec Windows NT, et selon la documentation de Microsoft (Guide des ressources techniques - Windows NT Workstation 4.0), on ne pourrait pas faire grand chose pour remédier à cet état de choses.
Toujours par cette même documentation, et avec la version serveur de NT 4 exclusivement, on a seulement la possibilité d'agir sur certaines priorités : le gestionnaire de mémoire virtuelle pouvant attribuer une plus forte priorité à l'espace du cache, priorité par rapport à celle des processus.
Mais, selon nous, ce n'est pas cette priorité qui résoudrait ce problème inhérent à Windows NT qui est, dans le cas par exemple de notre programme test, celui de la non mémorisation des opérations de lectures/écritures sur disque.
Pour la version Workstation de NT 4, et d'après cette même documentation, les mécanismes d'optimisation seraient fixés et ne toléreraient donc aucune modification.
Seuls conseils donnés par Microsoft, conseils qui de toutes façons sont, à notre avis, hors du sujet qui nous préoccupe présentement, et que nous citons seulement pour mémoire : regrouper les références aux données dans son application, ce qui reviendrait à répartir astucieusement ses données dans des tableaux, et donc à recomposer son programme, ou bien répandre le travail sur plusieurs stations et ajouter de la mémoire, ce qui reviendrait alors à recomposer son installation.
Il est remarquable de constater que l'on retrouve avec les machines du constructeur DEC cette même lacune quant à la gestion du cache dynamique par Windows NT.
C'est à dessein que nous avons rappelé dans cet article les résultats que nous avions obtenus précédemment, sur une machine de DEC, en faisant intervenir le système Digital Unix en comparaison avec Windows NT.
Sur cette machine DEC, on constate globalement les mêmes tendances principales que sur une machine Pentium.
Cependant, avec la machine DEC, l'effet des entrées/sorties sur disque, avec le programme test ``m-nnstadis.c'', et par contre coup de la tenue en charge, est moins catastrophique, parce qu'on disposait sur cette machine de disques rapides, alors que la machine Pentium ayant servi aux tests de comparaisons présents ne disposait que de disques de type IDE aux performances modestes. Ce qui n'a pas arrangé les choses pour cette dernière machine.
En conclusion, ce qu'il est curieux de constater, c'est que Windows NT est plus performant pour ce qui concerne les applications monopolisant la puissance du CPU, en particulier pour le calcul flottant, et l'on pense évidemment aux applications de calcul scientifique.
Par contre, pour ce qui est de la gestion de gros fichiers en langage C, ou encore du traitement des caractères (applications à caractère habituellement non scientifique), les résultats obtenus sont moins satisfaisants.
On pourrait d'ailleurs faire exactement les mêmes remarques avec les machines de DEC, en mettant en opposition Windows NT et cette fois le système d'exploitation Digital Unix, avec leurs compilateurs respectifs.
En définitive, et compte tenu de toutes les informations recueillies à l'occasion de ces essais, on peut considérer que, dans le cadre de leurs versions respectives actuelles, à savoir Linux 2.0.27 et Windows NT 4.0, les performances des applications traitées par un Pentium Pro sont globalement meilleures sous Linux que sous Windows NT.
Ajoutons aussi, en nous cantonnant strictement à l'aspect performance des essais, et au risque d'en surprendre plus d'un, que Windows NT se distingue surtout pour les applications de calcul numérique, tandis que Linux se révèle plus efficace pour ce qui concerne les applications à caractère non calcul scientifique, comme par exemple la gestion de bases de données.
Références au LMB
Décembre 1995 - Numéro 61
Windows NT chez DEC
Les récapitulatifs de la totalité des essais effectués sont disponibles sur :
http://www.dsi.cnrs.fr/~lmb/ServeurLeon/HomePage.html