Les machines virtuelles sur Proxmox VE

Guide pour comprendre comment fonctionnent les machines virtuelles sur Proxmox VE.

Les machines virtuelles sur Proxmox VE
pve proxmox proxmoxve virtual machines virtuelles

Au sommaire :

  • 1-Approfondir ses connaissances
  • 2-Les options des machines virtuelles

1-Approfondir ses connaissances

Nous allons voir ensemble les différentes options proposés par Proxmox VE pour configurer les machines virtuelles.

Pour vous familiariser sur QEMU, KVM et la virtualisation sous Linux, lisez mes articles précédents sur le sujet.

Virtual machine, full virtualization, paravirtualization, HAV, QEMU, KVM, késako ?
Un peu de vulgarisation pour les rookies
Comprendre la virtualisation sous Linux
Leçon d’histoire de la virtualisation sous Linux
A quel point KVM est-il performant ?
Traduction d’un post sur les performances d’une machine virtuelle KVM face à du bare metal.

2-Les options des machines virtuelles

General

  • Node : si vous avez un cluster, choisir le nœud qui accueillera la machine virtuelle
  • Resource Pool : ajout de la machine virtuelle dans un groupe de ressources (groupe base de données, kubernetes, docker, etc)
  • VM ID : l'identifiant de chaque machine virtuelle
  • Name : le nom que vous souhaitez donné à la machine virtuelle

On remarquera quatre options qui sont souvent laissés par défaut :

  • Start at boot : comme son nom l'indique, permet de démarrer la machine virtuelle au démarrage du serveur (utile par exemple dans le cas d'une machine virtuelle bureautique avec passthrough par exemple),
  • Startup/Shutdown delay : délai d'allumage ou d'extinction,
  • Start/Shutdown order : ordre d'allumage des machines virtuelles

OS

  • Use CD/DVD disc image file (iso) : indiquez l'endroit où sont stockés vos ISO
  • Use physical CD/DVD Drive : si vous avez un lecteur physique, cochez cette option
  • Do no use any media : aucun média ne sera chargé au démarrage
  • Guest OS : veillez bien à sélectionner dans "Type" et "Version" le système et la version adéquate pour de meilleures performances et une plus grande stabilité

System

  • Graphic card : je vous conseille de laissez par défaut ou bien d'utiliser SPICE qui apporte de meilleures performances que NoVNC et apporte des options comme le "drag'n drop", la connexion de périphériques distants et le son audio (nécessite l'installation de SPICE sur le système invité)
  • Machine : deux choix sont proposés. i440fx ou Q35. Q35 (combiné à OVMF) est obligatoire pour Windows si on souhaite utilisé le PCI passthrough, sinon il n'y a pas de raison de l'utiliser. Le choix par défaut est suffisant pour Linux et BSD
  • BIOS : Seabios est l'équivalent du mode "Legacy" (choix par défaut) et OVMF est l'équivalent de l'UEFI. Ce dernier est un portage du firmware tianocore d'Intel pour QEMU. Utilisez OVMF pour Windows, surtout si vous souhaitez lui attribué une carte graphique via le PCI passthrough
  • SCSI Controller : VirtIO SCSI est le meilleur choix possible (VirtIO Block est déprécié) et apporte les meilleures performances
  • Qemu Agent : récupère les informations du client Qemu installé sur le système invité. Il nécessite d'être installé au préalable sur le système invité (inclus dans les pilotes VirtIO)
  • Add TPM : puce de chiffrement. PVE propose une option de contournement pour faire fonctionner Windows 11 sans avoir de puce TPM physique

Disks

  • Bus/Device : vous avez comme choix SCSI, IDE, SATA. Privilégiez SCSI qui offre les meilleures performances sous VirtIO (Virtio est déprécié) et utilisez SATA ou IDE si vous souhaitez utiliser de vieux systèmes
  • Storage : le type de stockage que vous souhaitez utiliser. Par défaut, vous avez le choix entre stocker votre machine virtuelle dans la partition local (format .qcow2) ou bien dans local-lvm (format .raw)
  • Disk size (Gib) : c'est là que vous allouerez l'espace disque nécessaire à la machine virtuelle. Pour WIndows par exemple, pensez à lui allouer 50 à 100 Go minimum car en cas d'augmentation du volume, vous ne pourrez pas le fusionner avec le volume précédent
  • Cache : c'est une option qu'on laisse par défaut mais il est recommandé sur Windows de choisir l'option "write back"
  • Discard : active le mode FSTRIM qui permet de récupérer de l'espace disque lorsque vous supprimer des données, très utile sur un volume LVM-thin ou ZFS. Si vous utilisez le contrôleur virtio ou virtio-scsi, activez le
  • SSD emulation : indique au système virtualisé qu'il tourne sur un SSD et non pas sur un disque mécanique. Inutile si vous utilisez le contrôleur virtio ou virtio-scsi car déjà intégré à ces derniers
  • IO thread : permet d'attribuer un thread à la machine virtuelle au lieu d'attendre dans une file d'attente, ce qui améliore les performances. C'est une fonctionnalité assez récente à tester avant de la mettre en place
  • Read-only : indiquez si ce volume sera en lecture/écrirture ou en lectuere seule
  • Backup : indique si vous voulez oui ou non ajouter ce volume lorsque vous faites une sauvegarde de la machine virtuelle

CPU

  • Sockets : laissez le choix par défaut (1) si vous avez qu'un seul processeur
  • Cores : le nombre de cores que vous souhaitez allouer à la machine virtuelle. La meilleure pratique est de réduire le nombre de cores au minimum pour voir quel est le nombre idéal à allouer à la machine virtuelle puis d'augmenter graduellement,
  • VCPUs :
  • Type : Pour un accès aux instructions du processeur, sélectionner le type de CPU sur “Host”. Ce mode est obligatoire pour Windows car si vous la laissez en “kvm64”, les applications ne fonctionneront pas. Si vous souhaitez une meilleure portabilité de vos machines virtuelles (Linux, BSD), “kvm64” assure une compatibilité maximale. Que le processeur soit du AMD ou du Intel, que le serveur soit vieux ou ancien, la machine virtuelle n'y verra que du feu car ce qu'elle vois, c'est l'hyperviseur avec lequel elle communique (la couche d’abstraction) et pas le matériel sous-jacent
  • CPU units : permet de définir la quantité minimale de temps processeur. Dans le terminal, tapez "vzcpucheck" pour vérifier combien vous en avez
  • Enable NUMA : utilise uniquement sur des cartes méres multi-processeurs donc n'activez pas le NUMA si vous avez qu'un seul socket. Vous pouvez vérifier le statut NUMA avec la commande suivante "numastat"

Ces options sont généralement jamais utilisés et désactivés par défaut. Je vous ferait une description détaillé en temps voulu.

Memory

  • Memory (Mib) : c'est là que vous allez allouer la mémoire vive de la machine virtuelle. Ne jamais sur-provisionné au risque de faire tomber le serveur
  • Ballooning Device : le mécanisme de "ballooning" est concu pour éviter de sur-provisionné en mémoire vive les machines virtuelles. La mémoire non utilisé est détaché de la machine virtuelle par l'hyperviseur pour la rendre disponible dans un pool de partage accessibles aux autres machines virtuelles. Le ballooning est activé à partir du moment où 80% de la mémoire vive du serveur est monopolisé.
  • Minimum memory : en lien avec l'option "Ballooning Device". Vous devez indiqué la quantité minimum qui puisse permettre au système invité de fonctionné correctement avec ou sans ballooning. Par exemple si vous avez mis 8192 Mib dans "Memory" et que vous mettez 4096 Mib dans "Minimum memory", KSM (Kernel same-page merging) pourra puisser 4096 Mib pour la redistribuer dans un pool de partage accessible aux autres machines virtuelles. Par contre, si vous mettez 8192/8192, le ballooning est désactivé. Désactivez le ballonning pour les machines virtuelles sous Windows car il est notoire que cette option est facteur d'instabilité et pose des soucis de performance (pour Linux, la mémoire dynamique ne pose aucun soucis).
Memory ballooning - Wikipedia
Dynamic Memory Management - Proxmox VE
Kernel same-page merging - Wikipedia
[SOLVED] Hyper-Threading vs No Hyper-Threading; Fixed vs Variable Memory
After reading countless discussions, articles, whitepapers and not finding suitable answer, I decided to take matter in hand and do some testing to come to conclusion, if i should be using Hyper-Threading or not. While trying to find this answer, i also found the answer of using Fixed or…

Network

  • Bridge : le mode “Bridge” permet à la machine virtuelle de se connecté au réseau à travers un pont (vmbr0 par défaut)
  • VLAN tag : si vous souhaitez isolé la machine virtuelle dans un sous réseau, indiquez le numéro de ce dernier (voir mon article "Guide du réseau sur Proxmox Virtual Environment")
  • Firewall : si activé, il se base sur iptable, le parefeu par défaut des distributions Linux. Désactivez le si vous virtualisez pfSense ou OPNsense car sinon il y aura un double traitement des paquets. Idem lorsque vos machines virtuelles sont connectés aux vlans de pfSense/OPNsense, désactivez le pare-feu sinon laissez le activé si ce n'est pas le cas, cela appliquera les règles de pare-feu du serveur aux machines virtuelles. Enfin, si vous souhaitez isoler la machine virtuelle,
  • Disconnect : déconnecte la carte réseau de la machine virtuelle
  • Model : vous avez à disposition plusieurs types de carte réseaux. PVE propose d'émuler des cartes de marque Realtek ou Intel ainsi que vmware. Le plus performant et plus utilisé est Virtio (nécessite l'installation des pilotes sous Windows, déjà installé sur Linux et BSD). Utilisez le model Intel e1000 pour les machines virtuelles qui n'ont pas accès aux pilotes VirtIO (comme Batocera par exemple) mais dans tout les cas, utilisez le model “VirtIO”
  • Mac address : indique l'adresse MAC de la carte réseau virtuelle. Par défaut elle est sur automatique mais vous pouvez les créé vous même de manière fixe, surtout si vous avez des applications qui gère les accès par l'adresse MAC
  • Rate limit (Mb/s) : vous pouvez limiter la bande passante des machines virtuelles avec l'option “Rate Limit”, utile si vous avez plusieurs machines virtuelles dont certaines qui font du téléchargement,
  • Multiqueue : Les machines virtuelles sont de base en "single-queued", c'est à dire quelles reçoivent les paquets un par un et non en parallèle. Vous pouvez activer le mode "multiqueue" qui permettra aux machines virtuelles de recevoir les paquets en parallèle au prix d'une plus grosse charge côté processeur (plus de travail pour la parallélisation). C'est recommandé pour les machines virtuelles qui servent de base de données, les serveurs web et tout ce qui nécessite un gros trafic. Par contre, il est déconseillé de sur-allouer, par exemple si une machine virtuelle a 4 cores, mettez la valeur du multiqueues à 4. Cela augmentera la performance réseau de la machine virtuelle donc mieux vaut avoir une bande passante suffisante.

Sources :

Mastering Proxmox - Third Edition | Packt
Discover real world scenarios for Proxmox troubleshooting and become an expert cloud builder