web-dev-qa-db-fra.com

Combien de frais généraux x86 / x64 la virtualisation de x86 / x64 a-t-il?

Combien de frais généraux la virtualisation x86/x64 (je vais probablement utiliser VirtualBox, Postilement VMware, définitivement non pas la pararétualisation) ont pour chacune des opérations suivantes: hôte Win64 hôte et Linux64 utilise la virtualisation de Intel Hardware?

  • Code purement lié à la CPU, code utilisateur 64-bit

  • Code purement lié à la CPU, code utilisateur 32 bits

  • Fichier I/O sur le disque dur (je me soucie principalement de débit, pas de latence)

  • I/O réseau

  • Synchronisation de fil Primitives (mutiles, sémaphores, variables de condition)

  • Interrupteurs de contexte de fil

  • Opérations atomiques (en utilisant le préfixe lock, des choses comme la comparaison-and-swap)

Je suis principalement intéressé par l'affaire Hardware Assistée sur X64 (à la fois Intel et AMD), mais cela ne vous dérangerait pas d'entendre parler de la traduction binaire sans assistance et des cas d'hôte et d'hôte 32 bits 32 bits). Je ne suis pas intéressé par la paravirtualisation.

24
dsimcha

Il y a trop de variables dans votre question, mais je pourrais essayer de le réduire. Supposons que vous alliez avec VMware ESX, vous faites tout droit - Dernière CPU avec prise en charge de la virtualisation, VMware Tools avec des pilotes de stockage et de réseau paravirtualisé, de nombreuses mémoire. Supposons maintenant que vous exécutez une seule machine virtuelle sur cette configuration. De mon expérience, vous devriez avoir environ 90% de la vitesse de la CPU pour la charge de travail liée à la CPU. Je ne peux pas vous en dire beaucoup sur les vitesses de réseau, car nous utilisons des liens de 1Gbps et je peux la saturer sans problème, cela peut être différent avec une liaison de 10 Gbps, mais nous n'en avons aucun de ceux-ci. Le débit de stockage dépend du type de stockage, je peux obtenir environ environ 80% du débit de stockage avec le stockage local, mais pour 1GBPS NFS, il est proche de 100% puisque la mise en réseau est un goulot d'étranglement. Ne peut pas parler d'autres métriques, vous devrez faire une expérimentation avec votre propre code.

Ces chiffres sont très approximatifs et dépend fortement de votre type de charge, de votre matériel, de votre réseau. Il devient même fuzzier lorsque vous exécutez plusieurs charges de travail sur le serveur. Mais ce que je traverse de dire ici, c'est que, dans des conditions idéales, vous devriez pouvoir obtenir aussi près que 90% des performances natives.

De plus, de mon expérience, le problème beaucoup plus important pour les applications de haute performance est la latence et il est particulièrement vrai pour les applications clienter. Nous avons un moteur de calcul qui reçoit la demande de plus de 30 clients, exécute des courts numérisements et renvoie des résultats. Sur le métal nu, il pousse généralement la CPU à 100%, mais le même serveur sur VMware ne peut que charger CPU à 60-80%, ce qui est principalement à cause de la latence dans la manutention des demandes/réponses.

4
dtoubelis

Je n'ai pas reculé à la performance des primitives de base telles que la commutation de contexte et les opérations atomiques, mais voici mes résultats d'un test de force brute que j'ai effectué récemment avec des hyperviseurs différents. Cela devrait indiquer ce que vous pourriez vous attendre si vous êtes surtout CPU et RAM Bande passante limitée.

https://web.archive.org/web/20160321041041/http://www.altechnative.net/2012/08/04/Virtual-Performance-Part---vmware/

0
Gordan