VDI, la 3D et les cartes graphiques

Bonjour

J’ai eu l’occasion pour un important projet avec un gros bureau d’ingénieurs, de décortiquer et d’approfondir au maximum la problématique des cartes graphiques dans des desktops virtuels. Les tests étant en cours, et le projet pas encore commencé, je me dois de garder pour moi certains détails. Mais je me propose ici de vous faire un petit topo des technologies et de comment elles fonctionnent.

A l’origine, un desktop virtuel fourni une qualité et des performances graphiques tout juste dignes d’un Amiga 500. Mais VMware propose une émulation 3D, via un driver appelé le soft3D.  Celui-ci s’active simplement en passant soit par les propriété d’une VM (activer la 3D sur la carte graphique) ou directement dans le pool View.

Quelques bases : une carte graphique a des processeurs intégrés, qui se nomment des GPU. VMware supporte dans ses ESX, des cartes NVIDIA et ATI. NVIDIA (les seules que j’ai testé) propose différentes cartes, avec plus ou moins de GPU, de puissance et de mémoire. La plus performante est la NVIDIA Grid K2, qui dispose de 2 GPU Kepler (les plus performants). Chaque GPU offre 1536 cœurs (si si), est cadencé à 745 MHz et utilise 4 GB de RAM GDDR5. La suivante, la NVIDIA Grid K1, offre 192 cœurs “seulement” par GPU, mais comporte 4 GPU et 16 GB de RAM DDR3 au total.

vdigputabDonc de prime abord, la K1 semble offrir une meilleure densité, car 4 GPU donc plus de users par serveur, mais il ne faut pas s’y tromper, la K2 est bien plus performante et permet donc une meilleure densité.

VMware aujourd’hui permet de choisir entre 3 niveaux de performance graphique :

  • Soft3D : ce mode utilise uniquement le driver software soft3D de VMware, il n’utilise aucune carte graphique.
  • vSGA : virtual Shared Graphical Adapter. Ce mode utilise une carte graphique physique, installée dans le serveur ESX, et chaque GPU de la carte graphique est partagé entre les différent desktops tournants sur cet ESX.
  • vDGA : virtual Dedicated Graphical Adapter. Un GPU de la carte graphique est dédié à un desktop virtuel.

Le vSGA et le Soft3D only, utilisent tout les deux le driver VMware Soft3D. C’est pourquoi ce sont les deux seuls modes configurables depuis le pool View (image ci-dessous). Le mode Software active uniquement le Soft3D, le mode Hardware active le vSGA. La grosse limitation de ces deux modes est le Soft3D. Le driver de VMware permet un bon niveau de performance quand il est utilisé conjointement à une carte graphique (mode vSGA) mais il ne supporte que le DirectX 9.0 et l’OpenGL 2.1, ce qui limite passablement les performances lorsque l’on fait de la pure 3D. Pour le mode vSGA, un driver NVIDIA est nécessaire, mais non pas au niveau des desktops, mais dans l’ESX (le driver utilisé par les desktop est le Soft3D de VMware).

vdigpu1

 

Le mode vDGA est quand à lui bien différent. Il n’utilise pas le driver VMware Soft3D, mais permet de donner un GPU à une VM en pass-thru. Pour cela, nous utilisons une fonctionnalité assez peu connue de VMware, le DirectPath I/O. Les cartes NVIDIA présentent un device PCI par GPU, il suffit donc de sélectionner le ou les devices (GPU) sur lesquels activer le DirectPath I/O, puis redémarrer l’ESX, ensuite les Devices PCI sont disponibles pour être ajoutés dans le hardware d’une VM. Ce GPU lui sera donc exclusivement alloué, comme un périphérique dédié. En conséquence de quoi, la VM ne pourra plus bouger, car attachée à l’ESX, donc plus de vMotion ni HA. Et le driver NVIDIA devra être installé dans le desktop et non plus dans l’ESX. L’avantage est que le Soft3D n’est plus utilisé et les limitations DirectX et OpenGL tombent. C’est donc comme si chaque desktop avait sa carte graphique bien à lui.

vdigpu2

vdigpu3

Pour avoir beaucoup testé les 3 modes, mon sentiment est le suivant :

–       Il y a une différence énorme entre le Soft3D only et le vSGA.

–       Pour peu que le DirectX ou OpenGL ne soit pas bloquant, il y a assez peu de différence entre le vSGA et le vDGA

–       Le vDGA permet de générer beaucoup plus de frame par seconde dans les outils de benchmark

–       Le mode VDGA dédiant un GPU par Desktop, il doit être réservé à des cas particuliers, car offre une densité très faible (2 utilisateurs par carte K2 ou 4 par K1) et fait monter drastiquement le prix par desktop.

–       Le mode vSGA, offre une meilleure densité, mais un niveau de performance variant selon cette dernière. Il n’existe pas de priorisation (share, limite ou réservation) donc plus on aura de desktops par GPU, plus les performances vont baisser. Dans mes tests, en chargeant au maximum un desktop avec un outil de benchmark graphique, celui-ci utilisait 30% d’un GPU d’une K1 et 12% d’un GPU d’une K2. Donc je dirais, pour une utilisation moyenne, environ 20 utilisateurs par carte graphique.

–       Il faut compter une marge de RAM dans les ESX pour les modes vSGA et Soft3D, car on alloue de la RAM aux VM (max : 512 MB, recommandé : 512 MB). Le Soft3D prend toute cette RAM dans celle de l’ESX, le vSGA uniquement la moitié (l’autre moitié étant prise dans la RAM de la carte graphique).

Conclusion : avec beaucoup de fine tuning, différentes optimisations tant dans les desktops que dans les settings du PCoIP (primordiaux !!) nous sommes arrivé à un niveau de performance tout à fait acceptable pour la plupart des applications notamment le redouté et très utilisé Autocad. Ces différents tests me laissent à penser, qu’avec ces technologies presque tout est possible. La seule limite étant le prix, si il faut dédié un GPU K2 par user.  Pour l’anecdote, j’ai beaucoup ris lorsque Autodesk, suite à un ticket que nous avons ouvert chez eux, nous a informé…  ou plutôt intimé même, de ne pas utiliser Autocad en VDI sous peine de perdre le support. Or deux jours avant, j’ai vu en Webex le PDG de Autodesk serrer la main à celui de VMware lors de l’annonce de Horizon 6… Bref l’idée doit suivre son chemin, même chez Autodesk (n’ayez crainte pour le support… un coup de bluff d’un ingénieur support niveau 1 paresseux).

Le futur : Pour vous remercier de m’avoir lu jusqu’au bout, je vous offre une petite annonce de VMware. Ils travaillent actuellement sur un nouveau mode : le virtual GPU. A priori, nous devrions être capable d’utiliser le mode vSGA (Shared) tout en présentant un virtual GPU NVIDIA dans chaque desktop. Ce qui permettra d’utiliser le driver NVIDIA dans les desktops et non plus le Soft3D, s’affranchissant donc des limitations DirectX et OpenGL.

Pour conclure, je voudrais profiter de cet article pour remercier chaleureusement les experts que NVIDIA et VMware, nous ont mis à disposition et qui se sont beaucoup investit pour m’aider à mener à bien cette étude. Je ne me permettrai pas de dévoiler toutes les astuces et les options cachées qu’ils m’ont transmises, mais je les en remercie.

Alors ? Toujours pas de VDI chez vous ?

Merci de votre lecture, n’hésitez pas à commenter, je répondrai avec grand plaisir.

A propos de 

http://ch.linkedin.com/in/sgrimbuhler

Stéphane GRIMBUHLER 

Virtualization & Storage Architect (VCP / VCAP-DCA)
VMware Instructor (VCI)
vExpert 2012 to 2014

twitter : @sgrimbuhler
sgrimbuhler@virtualgeek.ch

  1. Super synthèse et merci pour ce retour.
    Pour info, l’annonce faite conjointement entre VMware et NVidia n’est pas comparable à du vSGA mais plutot à du vDGA sur un partitionnement matériel d’une carte, c’est à dire du pass-throught avec un meilleur taux de consolidation.

  2. Stéphane Grimbuhler

    Merci beaucoup pour ces précisions Jérémie (flatté que des gens de VMware nous lisent).
    VMware semble communiquer bien peu sur le sujet depuis l’annonce du 25 mars au GPU Tech Conference. Mais Brian Madden (encore lui) fourni une explication plus détaillée : ici

    Pour résumer : mêmes avantages que le vDGA (meilleures performances et pas de limitations OpenGL et DirectX) et meilleure densité en partageant les GPU (8 users par GPU selon Brian, donc 16 sur une K2 et 32 sur une K1) mais, oui, sur le mécanisme, totalement d’accord avec toi Jérémie, la technologie est du vDGA évolué.

    Merci pour ton com.
    Stéphane.

  3. Stéphane Grimbuhler

    Bonjour.
    Quelques précisions:

    – Bien sur, sauf si vous vivez dans une grotte en Appenzell Rhodes-Intérieures, vous avez vu que VMware et NVIDIA ont lancé il y a quelques semaines le vGPU! http://www.nvidia.com/object/virtual-gpus.html pas de grosses surprises par rapport à ce qui était annoncé, si ce n’est que l’allocation de ressources GPU se fera via des profiles et semble pouvoir se passer de View (en tout les cas en être indépendante). J’espère pouvoir tester bientôt.

    – J’ai pu constaté que l’un des software de DAO les plus répandu au monde, j’ai nommé le géant Autocad, ne consommait pas tant de GPU que cela mais était bien plus sensible à la performance CPU. Et, choses qui m’a laissé pantois: Autocad n’est par défaut pas multi-thread! Oui monsieur! il existe une commande pour le forcer à répartir ses process sur plusieurs thread (WHIPTHREAD puis tapez 3) mais bien que cela répartisse la charge sur plusieurs coeurs, un process n’est pas pour autant multi-threadé. Donc privilégiez des CPU rapides pour un VDI Autocad.

    Bonne journée.
    Stéphane.

  4. Bonjour,

    A partir de quelle version d’ESX peut-on faire de la virtualisation de GPU ?

    Par avance merci

Laisser un commentaire


NOTE - Vous pouvez utiliser les éléments et attributs HTML tags and attributes:
<a href="" title="" rel=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>