Chargement...

Retour

Gestion avancée des ressources dans Proxmox : Tutoriel sur l’optimisation des performances

Proxmox VE (Virtual Environment) est une solution de virtualisation et de conteneurisation très appréciée pour sa flexibilité, sa facilité de gestion et sa base solide (Debian). Cependant, pour exploiter pleinement son potentiel et garantir des performances optimales, en particulier en production, il est essentiel de maîtriser et d’appliquer des techniques avancées de gestion des ressources. Cet article vous guide à travers les meilleures pratiques pour optimiser votre environnement Proxmox.

Dans cet article, nous allons couvrir :

  • Affinité CPU et NUMA
  • Gestion de la mémoire (Ballooning)
  • Vidage du cache
  • Choix du format de disque virtuel : raw, qcow2, vmdk
  • Choix du backend de stockage : LVM, ZFS, LVM-Thin, etc.
  • Tiering de stockage
  • Réduction des I/O pendant les backups
  • Snapshots avec ZFS
  • Paramétrage des cartes réseau virtuelles (VirtIO)
  • Utilisation des réseaux virtuels
  • Erreurs de téléchargement et fichiers stockés dans /var/...
  • Rotation des journaux et nettoyage des répertoires temporaires
  • Mise à jour régulière de Proxmox
  • Optimisations spécifiques aux workloads
  • Vérification des vitesses de transfert des disques

1. Fondamentaux de l’optimisation

1.1 Affinité CPU et NUMA

L’affinité CPU consiste à attribuer des cœurs de processeur physiques spécifiques à une machine virtuelle (VM). Cela permet d’améliorer la prévisibilité des performances en réduisant les déplacements de processus et en minimisant la latence. Cette affinité peut être configurée en assignant des cœurs spécifiques à une machine virtuelle.

Comment configurer l’affinité CPU dans Proxmox ?

  1. Ouvrez l’interface web Proxmox.
  2. Sélectionnez la VM concernée, puis allez dans Hardware.
  3. Cliquez sur Processors.
  4. Dans la zone Advanced (ou “Options avancées”), définissez l’affinité CPU en spécifiant les cœurs attribués (par exemple 1,2 pour associer la VM aux cœurs 1 et 2 de l’hyperviseur).

Vous pouvez également utiliser la commande qm set en ligne de commande :

qm set [VMID] --cpulist 1-2

(Où [VMID] est l’identifiant de la machine virtuelle.)

NUMA (Non-Uniform Memory Access) est une architecture où chaque socket physique possède sa propre banque de mémoire. Pour les serveurs multi-sockets, activer NUMA dans Proxmox peut améliorer les performances en réduisant les accès à la mémoire distantes.

  • Quand NUMA est activé pour une VM, le système tente de faire correspondre les cœurs de CPU et la mémoire de la même zone NUMA physique.
  • Cela réduit la latence en minimisant les accès à la mémoire “à distance” (d’un autre socket).

Comment activer NUMA dans Proxmox ?

  1. Dans l’interface web, sélectionnez votre VM.
  2. Allez dans HardwareProcessors.
  3. Cochez l’option NUMA.

En CLI, utilisez :

qm set [VMID] --numa 1

1.2 Gestion de la mémoire (Ballooning)

Le Ballooning permet à Proxmox de réaffecter dynamiquement la mémoire entre l’hôte et les VMs en fonction des besoins. En cas de manque de mémoire, Proxmox « gonfle » un ballon virtuel dans la VM pour récupérer de la mémoire inutilisée et la redistribuer.
Le ballooning est plus visible sur les systèmes Linux que sur les systèmes Windows. En effet, Windows aura tendance à allouer toute la mémoire disponible alors que Linux est plus économe en ressources.

  • Avantage principal : L’hôte peut potentiellement réutiliser la mémoire allouée, mais non utilisée par une VM.
  • Inconvénient potentiel : Le ballooning peut être imprévisible si la mémoire de l’hôte est totalement utilisée. Il est donc plutôt conseillé pour les environnements de laboratoire ou de tests. Il est déconseillé d’utiliser cette fonctionnalité en environnement de production.

Pour activer le Ballooning :

  1. Dans l’interface web Proxmox, sélectionnez la VM.
  2. Rendez-vous dans HardwareMemory.
  3. Activez l’option Ballooning Device et définissez un Minimum Memory et un Maximum Memory adaptés.

En CLI, configurez :

qm set [VMID] --balloon 

(Où est la limite de mémoire maximale autorisée, en Mo.)

1.3 Vidage du cache

Sous Linux, le cache (page cache) accélère les accès disques en mémoire. Cependant, il peut être utile de libérer manuellement le cache pour des tests de performance ou des mises à jour critiques.

Pour vider le cache sur l’hyperviseur Proxmox :

sync; echo 3 > /proc/sys/vm/drop_caches

Attention : Vider le cache trop fréquemment peut nuire à la performance globale du système. Utilisez cette commande avec parcimonie et uniquement en cas de besoin.

2. Stockage

2.1 Formats de disque virtuel

Proxmox supporte plusieurs formats de disque virtuel, chacun avec des avantages et des inconvénients spécifiques :

  • raw :

    • Avantages : Performances optimales, simple, faible overhead. Idéal pour les workloads exigeants en I/O.
    • Inconvénients : Taille fixe, pas de snapshots internes.
  • qcow2 :

    • Avantages : Snapshots internes, compression, allocation à la demande, chiffrement. Bon pour une utilisation quotidienne avec snapshots.
    • Inconvénients : Moins performant que raw, peut se fragmenter avec de nombreux snapshots.
  • vmdk :

    • Avantages : Compatibilité avec VMware.
    • Inconvénients : Moins flexible que qcow2.

2.2 Backends de stockage

Le choix du backend de stockage dépend des besoins en performance, en snapshots, et en intégrité des données. Certains backends de stockage peuvent ne pas être utilisés en fonction des formats des disques virtuelles. Le backend ZFS n’est pas conseillé, voir fortement déconseillé sur du matériel ayant déjà du raid matériel car ayant besoin d’accès direct aux disques. Les backends peuvent aussi permettre d’héberger seul certains éléments, des iso, les fichiers de disques des vm, etc de par leurs conceptions.

Voici les types d’éléments que chaque backend peut stocker :

  • LVM :

    • Avantages : Bonnes performances générales.
    • Inconvénients : Snapshots gourmands en ressources.
    • Peut stocker : Disk images, Container
  • LVM-Thin :

    • Avantages : Snapshots rapides et allocation dynamique.
    • Inconvénients : Complexité additionnelle par rapport à LVM.
    • Peut stocker : Disk images, Container
  • ZFS :

    • Avantages : Snapshots performants, robustesse, compression en temps réel, vérification des données.
    • Inconvénients : Gourmand en RAM, configuration plus complexe, non compatible avec du RAID matériel.
    • Peut stocker : Disk images, Container
  • Directory (via SMB/CIFS ou NFS) :

    • Avantages : Flexibilité d’utilisation, utilisation via partage réseau.
    • Inconvénients : Performance peut être affecté par le réseau.
    • Peut stocker : Disk images, Container, Snippets, Import, Container Templates, ISO Image, VZDUMP (backups)

2.3 Tiering de stockage

Le tiering consiste à organiser les données sur différents types de stockage selon leur criticité et leur fréquence d’utilisation. Les types de stockages sont différents et ont des spécificités différentes. Les HDD sont généralement utilisés pour le stockage de masse, mais avec un bon RAID, peuvent égaler en performance des disques SSD. Il est important de connaître les particularités de chaque stockage.

  • SSD NVMe : Pour les VM nécessitant des performances élevées (bases de données, services critiques).
  • SSD SATA : Pour des VM moins gourmandes, comme des serveurs applicatifs.
  • HDD en RAID : Pour le stockage de masse (archives, backups) mais aussi pour les VMs en fonction du type de RAID.

En RAID, privilégiez le RAID 10 pour un bon équilibre entre performance et redondance, ou le RAID 5 ou 6 pour une meilleure capacité de stockage avec tolérance aux pannes minimale. Le choix dépendra de votre budget et vos besoins en performance et en redondance. Le RAID 0 est purement axé sur la performance mais n’offre aucune redondance. Le RAID 1 (miroir) offre de la redondance : si un disque tombe en panne, l’autre continue de fonctionner. Il est vrai que le RAID 1 n’offre aucun gain de capacité (puisque les données sont dupliquées) ni de performances marquées sur l’écriture, mais il apporte une sécurité en cas de panne disque.

Attention : Une utilisation intensive des I/O (par exemple, plusieurs VM Windows sur un disque HDD) peut ralentir l’ensemble du système, y compris les conteneurs et autres VM. Il est important de savoir que le disque a des capacités maximales en lecture/écriture et le partage entre plusieurs os windows sur des disque de faible qualité impactera énormément l’ensemble de l’hôte et les VMs. De plus, si l’hôte Proxmox subit des temps d’IO trop important, il est possible de limiter individuellement les transferts des VMs. Par exemple, on peut limiter les transferts d’une VM Windows à quelques Mo/s.
Il faut aussi prendre en compte que les disques lents ou ayant des secteurs défectueux vont impacter les transferts. Plus le temps de traitement car le HDD a des secteurs défectueux ou que le SSD a trop été écrit pour avoir des secteurs défectueux peut donner un temps de traitement long et ralentir le système. Les disques impactés ainsi peuvent montrer le signe suivant. L’IO delay oscillera de temps en temps parfois a des intervalles qui peuvent être les mêmes et pendant des temps plus ou moins court.

2.4 Réduction des I/O pendant les backups

Les sauvegardes peuvent engendrer une forte charge d’I/O, impactant les performances des VMs. Pour minimiser cet effet, vous pouvez :

  • Planifier les backups pendant les heures creuses.
  • Limiter la bande passante avec l’option bwlimit (par exemple dans Proxmox Backup Server).
  • Utiliser des disques dédiés pour le stockage des sauvegardes.

Exemple de configuration dans Proxmox Backup Server : Définir une limite de 50 Mo/s pour un job de sauvegarde.

2.5 Snapshots avec ZFS

Les snapshots ZFS permettent de créer des points de sauvegarde rapides et peu gourmands en ressources. Ils sont idéaux pour des tests ou des mises à jour critiques. Ils sont intégrés à Proxmox et s’exécutent rapidement.

Par exemple, avant une mise à jour système, vous pouvez créer un snapshot pour pouvoir revenir en arrière rapidement en cas de problème.

2.6 Vérification des vitesses de transfert des disques

Il est crucial de vérifier les vitesses de lecture et d’écriture maximales supportées par vos disques, surtout si plusieurs VMs sont en activité simultanément. Des disques lents peuvent devenir un goulot d’étranglement, affectant globalement les performances de votre système. Utilisez des outils comme hdparm ou fio pour tester les performances de vos disques.

3. Réseau

3.1 Paramétrage des cartes réseau virtuelles (VirtIO)

Le pilote VirtIO optimise les performances réseau des VMs en réduisant l’émulation matérielle, particulièrement adapté pour Linux et Windows. Cependant, sur Windows, VirtIO est particulièrement utile pour les connexions supérieures à 1 Gbps.
Si vous n’avez pas besoin de telles performances, ou si vous souhaitez éviter l’installation de pilotes supplémentaires, vous pouvez utiliser le pilote e1000, qui est pris en charge nativement par Windows. Le pilote e1000e, plus récent, est pris en charge à partir de Windows Server 2012.

Sous Windows : Si vous utilisez VirtIO, il est impératif d’installer les pilotes VirtIO via l’ISO virtio-win, téléchargeable depuis le site officiel de Proxmox ou Fedora. Ces pilotes doivent être installés après l’installation de l’OS pour une prise en charge correcte des périphériques VirtIO.

Cas d’utilisation : Les environnements avec un trafic réseau élevé, tels que serveurs web ou bases de données, bénéficieront grandement de VirtIO si le lien dépasse le Gbps.

3.2 Utilisation des réseaux virtuels

Proxmox offre des réseaux virtuels via Linux Bridge ou Open vSwitch (OVS). Les deux ont leurs spécificités :

  • Linux Bridge : Facile à configurer, adapté pour les configurations simples et les environnements peu exigeant.
  • Open vSwitch (OVS) : Plus complexe, mais offre des fonctionnalités avancées (QoS, VLANs), plus adaptés aux environnements d’entreprises ou les environnements plus importants.

Pour l’hôte, utilisez de préférence OVS, qui offre une meilleure flexibilité et des fonctionnalités supplémentaires pour la gestion de vos réseaux.

4. Maintenance et gestion

4.1 Erreurs de téléchargement et fichiers dans /var/...

Les téléchargements avortés (ISO, templates) peuvent laisser des fichiers partiels dans /var/tmp, /var/lib/vz/template/cache, ou des fichiers nommés /var/tmp/pveupload*. Ces derniers sont habituellement supprimés après un transfert réussi ou échoué, mais peuvent persister en cas de coupure de courant, de crash système ou d’erreur inattendue. Nettoyez régulièrement ces répertoires pour libérer de l’espace.

Pour les logs, s’ils ne sont pas nécessaires à vos analyses, configurez une rotation automatique pour éviter un remplissage excessif de l’espace disque. Utilisez des outils comme logrotate pour gérer efficacement ces fichiers.

4.2 Rotation des journaux et nettoyage des répertoires temporaires

La rotation des journaux est essentielle pour éviter la saturation du stockage. logrotate est l’outil idéal pour automatiser cette tâche.

Voici un exemple de configuration de base dans un fichier `/etc/logrotate.d/mon_log`:

/var/log/mon_application/*.log {
    weekly
    rotate 4
    compress
    delaycompress
    missingok
    notifempty
}

Ce fichier indique de faire une rotation chaque semaine, de garder 4 fichiers, de les compresser et de ne pas signaler d’erreurs si les fichiers n’existent pas. Adaptez les options selon vos besoins.

Nettoyez régulièrement les répertoires temporaires comme /var/tmp, /var/lib/vz/template/cache et supprimez les fichiers `/var/tmp/pveupload*` après des téléchargements avortés ou des problèmes.

4.3 Mise à jour régulière de Proxmox

Maintenez votre instance Proxmox à jour pour profiter des dernières améliorations et correctifs. Avant chaque mise à jour, créez des snapshots des VMs critiques pour pouvoir revenir en arrière rapidement en cas de problème.

5. Optimisations spécifiques aux Workloads

Selon vos besoins, vous pouvez appliquer ces optimisations :

  • Bases de données : Préférer le format raw, désactiver le cache, affinité CPU et NUMA. Utiliser un stockage rapide pour le logs.
  • Serveurs web : Utiliser VirtIO pour le réseau (si supérieur à 1Gbps), SSD pour minimiser la latence, configurer un cache web, et un équilibreur de charge si nécessaire.
  • Applications critiques : Configurer NUMA et affinité CPU, prévoir un monitoring, activer les alertes en cas de problème et utiliser des solutions de haute disponibilité.

6. Avertissements et conclusion

Les conseils fournis sont à titre indicatif et doivent être adaptés à votre environnement. Une mauvaise configuration, que ce soit au niveau de l’hôte ou des VMs, peut avoir un impact négatif sur les performances. Il est important de tester chaque optimisation dans un environnement de test avant de les appliquer en production. N’hésitez pas à consulter la documentation officielle de Proxmox et les forums de discussion pour une assistance technique et des conseils spécifiques.