Louis Léon et Patrick Rougeau

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