Exécution d'une simulation sur Ubuntu pur vs sur Ubuntu dans Windows (WSL)

15

Je voudrais poser une question sur le test d'une grande simulation CAE sur le même ordinateur dans les deux situations suivantes.

  1. Système Ubuntu pur
  2. Système Ubuntu dans Windows 10 (WSL)

Les vitesses de calcul sont-elles presque identiques dans les deux cas ou sont-elles différentes?

ABCDEMMM
la source
4
Sans connaître la nature de la simulation, il est impossible de répondre.
muru
1
@muru: Ce n'est pas si vague. Une "simulation" est vraisemblablement un travail d'arrière-plan intensif en calcul, ce qui le rend lié au processeur ou à la mémoire. (Les E / S disque ou réseau peuvent également être un goulot d'étranglement, mais c'est quelque chose que les gens qui écrivent de tels programmes ont tendance à éviter, et certains codes de simulation modernes peuvent même utiliser le GPU pour le calcul parallèle.) On pourrait assez facilement écrire (ou télécharger) une référence qui teste tous ces 2 à 5 goulots d'étranglement possibles et vérifie s'il y a une différence significative entre WSL et Ubuntu natif pour l'un d'eux. Je le ferais, mais je n'ai pas WSL (ou Windows 10) disponible.
Ilmari Karonen
3
@IlmariKaronen "vraisemblablement". En fonction des données croquantes, cela pourrait tout aussi bien être intensif en E / S, même s'il est lié au processeur. Et le reste de votre commentaire est une très bonne raison de fermer ceci - nous n'avons aucune idée de la combinaison possible de goulots d'étranglement ici.
muru
1
Eh bien, j'ai posté une réponse, car il se trouve que des repères appropriés sont déjà en ligne . Évidemment, je ne peux pas dire avec certitude si le code de simulation spécifique de l'OP fonctionnera plus lentement sur WSL ou non; mais en tout cas, une réponse à cette question ne sert à personne d'autre que le PO de toute façon. Ce à quoi je peux répondre, sur la base des benchmarks, c'est à quels types de code de simulation on peut raisonnablement s'attendre à avoir des différences de performances entre WSL et Linux natif.
Ilmari Karonen
@muru, c'est une simulation CAE (Abaqus CAE).
ABCDEMMM

Réponses:

18

Votre logiciel de simulation est probablement lié au processeur ou à la mémoire . Pour de telles charges de travail, on ne ferait que constater une différence significative entre l'exécution du code sur du "bare metal" ou à l'intérieur de WSL (ou de toute autre couche de compatibilité ou machine virtuelle qui utilise l'exécution native), car dans les deux cas, le système d'exploitation est principalement en attente tandis que le code de simulation s'exécute directement sur le CPU.

Cependant, il est également possible que votre simulation soit au moins partiellement liée aux E / S, et c'est là que des différences peuvent apparaître. Apparemment, WSL (actuellement) possède une couche d'interface de système de fichiers assez lente qui peut ralentir considérablement les E / S de disque. * Cela dit, alors que les E / S de disque peuvent être le principal goulot d'étranglement pour de nombreux types de tâches de traitement de données en masse, une "simulation" ne devrait généralement pas passer la majorité de son temps à lire et à écrire des fichiers. Si c'est le cas, vous pouvez envisager de l'exécuter à partir d'un disque RAM (par exemple tmpfs sur Linux ** natif) pour éviter un accès inutile au disque physique.

Dans tous les cas, la seule façon d'être sûr est de tester votre simulation dans les deux environnements et de déterminer le temps d'exécution. Avant de faire cela, cependant, vous voudrez peut-être jeter un œil aux benchmarks existants, comme ce benchmark de performance WSL vs Docker vs VirtualBox vs Linux natif par Phoronix de février 2018 , et examiner les résultats de tous les tests qui mettent l'accent sur les mêmes composants du système comme le fait votre simulation.

(FWIW, les résultats de Phoronix semblent correspondre principalement aux principes généraux que j'ai décrits ci-dessus, bien qu'il y ait quelques bizarreries notables comme VirtualBox surpassant apparemment Linux natif dans quelques benchmarks liés aux E / S, apparemment en raison de son disque virtuel qui ne synchronise pas toujours immédiatement les données sur le disque physique. Un problème potentiellement pertinent que je n'ai pas noté ci-dessus est que les tests de performances montrent des différences significatives dans les performances OpenMP multithread à la fois entre les différents environnements hôtes et également entre les différentes distributions Linux, même lors de l'exécution sur du matériel nu. ce n'est pas trop surprenant, car le threading et l'IPC sont gérés par le noyau. Je suppose qu'une grande partie de la différence entre les distributions peut résulter de différents paramètres de réglage du noyau d'exécution et / ou de compilation.)


*) Selon ce billet de blog MSDN de 2016, il y a en fait deux composants d'interface du système de fichiers dans WSL: VolFs, qui émule étroitement la sémantique du système de fichiers Linux natif sur NTFS et est utilisé pour monter par exemple /et /home, et DrvFs, qui fournit principalement une sémantique de type Windows et est utilisé pour accéder aux lecteurs Windows hôtes via /mnt/cetc. Si votre logiciel ne nécessite pas spécifiquement des fonctionnalités natives du système de fichiers Linux comme plusieurs liens durs vers le même fichier, sa configuration pour stocker ses fichiers de données dans un dossier DrvFs peut améliorer les performances d'accès aux fichiers sur WSL.

**) Selon ce fil Reddit de mai 2017, "tmpfs est actuellement émulé en utilisant le disque" sur WSL. À moins que quelque chose n'ait changé au cours de la dernière année, cela signifie probablement que l'utilisation de tmpfs sur WSL n'apporte aucun avantage en termes de performances par rapport à l'utilisation d'un système de fichiers sur disque normal.

Ilmari Karonen
la source
Peut-être pas seulement le réglage des paramètres, mais les options du compilateur (par exemple -O3 -march=haswellou quelque chose. Je ne sais pas ce que Clear Linux utilise réellement pour construire leurs noyaux, mais peut-être que BMI2 / popcnt/ quoi que ce soit pourrait faire une différence mesurable dans la glibc et le noyau. (Le noyau a gagné ne bénéficient pas d'AVX, car le noyau évite de toucher aux registres FPU, sauf dans un code spécifique comme les données de correction d'erreur RAID5 / 6.)
Peter Cordes
12

Ubuntu sous Windows (WSL - Mise à jour des créateurs d'automne 2017) est nettement plus lent que Ubuntu «pur» dans l'environnement Linux.

Par exemple, la peinture d'écran prend beaucoup plus de temps dans Windows 10 que dans Ubuntu 16.04, c'est-à-dire que vous pouvez réellement voir le curseur se déplacer dans Windows 10:

WSL bash startup.gif

Il faut environ 5 secondes pour que l'écran de démarrage WSL Bash se peigne. En comparaison, il faut environ 1 1/2 secondes pour le même écran de démarrage dans Ubuntu 16.04:

Terminal Ubuntu splash.gif


Analyse comparative du processeur

La première section montre à quel point les E / S d'écran sont lentes, mais qu'en est-il de l'analyse comparative du processeur?

A partir de cette Ask Ubuntu Q&A: utilitaire de benchmarking CPU pour Linux , j'ai effectué des tests sur Ubuntu 16.04 sous Linux et Windows. Sur Linux environ 24 secondes sur Windows 10 version 1709 environ 31 secondes. Linux est 6 secondes plus rapide ou environ 25% plus rapide. Cependant, je viens de mettre à niveau Windows 10 vers la version 1803 (Redstone 4 aka Spring Creators, mise à jour d'avril 2018) et cela a pris 24 secondes, ce qui est le même que Linux.

Ubuntu 16.04 sur Linux

$ sysbench --test=cpu --cpu-max-prime=20000 run
sysbench 0.4.12:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1

Doing CPU performance benchmark

Threads started!
Done.

Maximum prime number checked in CPU test: 20000


Test execution summary:
    total time:                          23.5065s
    total number of events:              10000
    total time taken by event execution: 23.5049
    per-request statistics:
         min:                                  2.13ms
         avg:                                  2.35ms
         max:                                  8.52ms
         approx.  95 percentile:               2.76ms

Threads fairness:
    events (avg/stddev):           10000.0000/0.00
    execution time (avg/stddev):   23.5049/0.00

Ubuntu 16.04 sur Windows 10 build 1709

$ sysbench --test=cpu --cpu-max-prime=20000 run
sysbench 0.4.12:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1

Doing CPU performance benchmark

Threads started!
Done.

Maximum prime number checked in CPU test: 20000


Test execution summary:
    total time:                          30.5350s
    total number of events:              10000
    total time taken by event execution: 30.5231
    per-request statistics:
         min:                                  2.37ms
         avg:                                  3.05ms
         max:                                  6.21ms
         approx.  95 percentile:               4.01ms

Threads fairness:
    events (avg/stddev):           10000.0000/0.00
    execution time (avg/stddev):   30.5231/0.00

Ubuntu 16.04 sur Windows 10 build 1803

$ sysbench --test=cpu --cpu-max-prime=20000 run
sysbench 0.4.12:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1

Doing CPU performance benchmark

Threads started!
Done.

Maximum prime number checked in CPU test: 20000


Test execution summary:
    total time:                          23.7223s
    total number of events:              10000
    total time taken by event execution: 23.7155
    per-request statistics:
         min:                                  2.21ms
         avg:                                  2.37ms
         max:                                  4.53ms
         approx.  95 percentile:               2.73ms

Threads fairness:
    events (avg/stddev):           10000.0000/0.00
    execution time (avg/stddev):   23.7155/0.00

REMARQUE: la mise à jour de printemps de Windows 10 pour 2018 (baptisée Redstone 4 ) est sortie le 9 mai (il y a 4 jours) et je l'installerai bientôt pour vérifier les améliorations. Il y en a sans doute beaucoup. Celui que je connais qui m'intéresse est la possibilité d'exécuter des crontravaux au démarrage. J'en ai besoin pour les sauvegardes quotidiennes automatiques sur gmail.com.

REMARQUE 2: Je viens d'installer Windows 10 Build 1803 (avril 2018 Spring Creators Update AKA Redstone 4) et la peinture d'écran est beaucoup plus rapide. Il ne reste plus que 3 secondes au lieu de 5 secondes pour afficher l'écran de démarrage Bash. Le benchmark CPU est à égalité avec Linux maintenant.

WinEunuuchs2Unix
la source
8
Notez que cela est trompeur - cela ne distingue pas les performances d'E / S et les autres performances de calcul. WSL est connu pour être lent pour les E / S (voir par exemple, les tests de performances Phoronix). Cela ne veut pas dire si les calculs d'OP peuvent être effectués aussi rapidement dans WSL.
muru
6
Je suis honnêtement surpris que dessiner l'écran de démarrage ne soit pas instantanément efficace dans les deux cas. Votre ordinateur est (vraisemblablement) heureux de faire des mises à jour d'écran beaucoup plus complexes en quelques millisecondes, par exemple lors de la lecture de vidéos. Et la dernière fois que j'ai vu un terminal aussi lent que lors de votre premier enregistrement, c'était au début des années 90, lors de la numérotation d'un BBS sur mon modem 2400 bps.
Ilmari Karonen
Que voulez-vous dire par «Ubuntu sous Linux»?
Jon Bentley
3
Honnêtement, ce type de benchmark est complètement inutile pour tout type de programme réaliste, comme tout benchmark qui mesure essentiellement la vitesse de peinture de la console. Soit votre goulot d'étranglement de programme est une E / S de console (qui est notoirement lente même sur Linux avec la plupart des émulateurs de terminal), soit ce n'est pas une mesure fiable de quoi que ce soit d'utile.
Matteo Italia
2
@ WinEunuuchs2Unix D'après ce que je peux voir, il y a peu de calcul. mais beaucoup d'E / S: chercher la météo de quelque part, lire la date et l'heure, et l'imprimer dans un format, lire les informations du système, etc. Quoi qu'il en soit, avez-vous déjà utilisé Abaqus? Les logiciels de simulation comme celui-ci ou Ansys ou Simulink ne sont pas liés aux E / S d'écran lors de l'exécution de la simulation réelle, sauf si vous forcez la simulation à l'être. Il est parfaitement possible pour ceux-ci d'afficher les résultats finaux en fonction de la simulation effectuée.
muru
7

Pensez-y - dans WSL, votre ordinateur exécute le système graphique Windows complet (qui est un horrible porc de ressources en premier lieu) plus le sous-système Ubuntu. Dans Ubuntu natif, il ne fonctionne qu'avec Ubuntu.

JimDeadlock
la source
1
@JimDeadlock Je ne pense vraiment pas que cela tue le bureau, il ne l'affiche tout simplement pas. Chaque application gui fonctionne toujours en arrière-plan, n'est-ce pas?
Eric Duminil
2
L'interface graphique de Windows consomme de la mémoire, mais pas beaucoup d'utilisation du processeur lorsque vous ne faites rien. Je ne vois pas pourquoi cela aurait un impact significatif?
vidarlo
1
Le basculement de la console vers un autre VT ne tue aucun processus; @EricDuminil est correct. Cela peut mettre en pause des choses qui utilisaient le temps CPU pour effectuer des mises à jour graphiques, car le serveur X sait qu'il n'est plus affiché (et ne peut donc pas perdre de temps sur le traitement OpenGL ou autre). Mais si vous exécutez pstreeou ps auxw, il est évident que tous les processus sont toujours en vie. (Ou topet appuyez sur M pour trier par consommation de mémoire).
Peter Cordes
2
@MichaelEricOberlin: Le passage à un autre VT n'affecte pas le niveau d'exécution! C'est juste que les consoles de texte sont toujours disponibles dans un niveau d'exécution qui démarre GDM. (Et BTW, les niveaux d'exécution sont fondamentalement une chose du passé; systemdne fonctionne pas comme SysV init. La première partie de ce commentaire prétend que vous exécutiez une distribution Linux de 5 ou 10 ans avec une initconfiguration old-school .) Mais oui , la déconnexion de votre session X et l'arrêt de X11 / GDM libéreront des ressources, surtout si vous n'avez pas d'espace de swap, ou si votre bureau a de la merde qui se réveille fréquemment même lorsqu'il est "inactif".
Peter Cordes
1
@MichaelEricOberlin: Votre commentaire est tout simplement faux. Pourriez-vous s'il vous plaît envisager de le supprimer?
Eric Duminil
1

Je ne sais pas si cela affectera votre simulation en particulier, mais cela pourrait:

WSL n'utilise PAS de RAM pour la mémoire partagée! Il utilise le disque!

Cela signifie que si votre simulation utilise la mémoire partagée (pensez /dev/shm), cela peut être lent et / ou épuiser votre périphérique de stockage! Et la pénalité de performance vient de plusieurs couches:

  • Le pilote du système de fichiers

  • Le pilote de stockage

  • Le support de stockage

Mais s'il ne le fait pas, les performances devraient être similaires à celles sur Ubuntu bare-metal (en supposant qu'aucune autre E / S, comme d'autres l'ont mentionné).

user541686
la source
vraiment bon de le savoir!
ABCDEMMM