Sysadmin Wiki : openvz
OpenVZ est une technique de virtualisation noyau, qui permet de partager le noyau entre plusieurs systèmes. Il est équivalent à Vserver.
Voici quelques commande d’exploitation utiles :
vzctl set 107 –diskspace 6G:7G –save #définir les quotas disques à 6Go soft et 7Go hard
vzctl set 106 –save –tcprcvbuf 17203200 #augmenter le quotas de reception tcp
cat /proc/user_beancounters #Visiualiser l’état de chaque limitations par serveurs
vzdump –suspend –mailto adresseEmail 105 #sauvegarde un vz
Openvz contrôle les ressources systèmes grâce à UBC ( User Beancounter ), les valeurs définies pour chaques VZ sont visibles dans /proc/user_beancounters. Virtuozzo, la version commerciale d’openvz propose quand à lui une alternative qui s’apelle slm (on ne va pas en parler ici).
Limitations mémoire :
Il n’y a pas de notion de swap pour le container, la swap se trouve sur le host on choisit la quantité de ram qui va apparaitre sur le container.
Par exemple un host avec 2 Go de ram et 2 Go de swap qui aurait 4 container avec 1Go de RAM(vmguarpages*4Ko). Si chaque container utilise sa RAM, alors ils vont faire swapper le RAM pourtant du point de vue du container on ne swappera pas, on aura juste des perfs de merde.
Dans le cas où on allouerait plus que la mémoire allouable sur notre host alors les containers vont se faire killer des process (c’est la qu’intervient le parametre oomguarpages).
Détaillons les paramètres :
* kmemsize : représente en la valeur en octet utilisé par le kernel pour garder des informations sur les process, cette mémoire ne peut pas être swappée.
* privvmpages : représente la valeur de la mémoire alloué cela peut représenter les allocation en mémoire vive et les allocation qui se trouve en swap. Attention c’est une mémoire alloué (malloc en C) elle n’est pas forcément utilisé. L’unité est en nombre de pages, une page fait 4KB ( donc 4096 octets ). La valeur barrier représente la limite que l’ont veut poser alors que la valeur limit n’est pas définie et doit être positionnée à la valeur maximale (9223372036854775807 pour un système 64 bits).
* physpages : représente la mémoire réellement utilisée (généralement inférieur), généralement les valeurs ici correspondent à la moitié des valeurs de privvmpages. On ne peut pas poser de limites sur ce paramètre c’est juste un indicateur. A priori la mémoire swappé n’en fait pas partie.
* vmguarpages : permet de définir les valeurs garanties sur lesquelles notre vz va pouvoir compter, concretement cela se traduit par la taille de la mémoire allouable même si le host est à cours de mémoire.
* oomguarpages : définit un seuil d’utilisation mémoire à partir duquel les process vont pouvoir se faire tuer par OOMKILLER, si cette valeur n’est pas dépassée le container ne se fera pas killer sauvagement de process. En fait pour qu’un container se fasse killer des process il faut que la somme oomguarpages (valeur actuelle) + sockets buffer + kmemsize soit supérieur à la valeur limite de vmguarpages. Si les kills sauvage font peur la solution est de mettre cette valeur au dessus de privvmpages pour être tranquille.
* swappages : certaines applications doivent obligatoirement voir quelle quantité de swap est disponible, limit permet de définir combien de swap est visible depuis le container, la valeur held permet de voir quelle quantité de swap est effectivement utilisé par el container.
La mémoire visible dans le container est par défaut la valeur de vmguarpages, mais on peut définir explicitement la valeur visible avec l’option MEMINFO. Par exemple dans la configuration suivante on utilisera plutot la veleur de privvmpages :
MEMINFO= »privvmpages:1″
Limitations cpu
Il y a deux paramètres principaux pour la limitation cpu :
* cpuunits permet de définir un poid dans la distribution cpu offerte au container, plus le poid est important plus il aura de la patate lorsque le cpu sera déjà consommé par d’autres container. Si le cpu est libre de toute utilisation meme un container avec un poid faible pourra l’utiliser à 100%.
* cpulimit permet de brider l’utilisation d’un container à un certain pourcentage de la puissance cpu, attention pour calculer le pourcentage de la puissance totale il faut penser à le multiplier par le nombre total de cpu. Par exemple sur un système avec 16 coeurs, il faut fixer la limite à 1600% pour pouvoir tout utiliser (16*100%).
* Définir une utilisation cpu de 15% pour un host avec 8 coeurs:
cpulimit=15*8
* Définir un temps cpu avec cpuunit par vz, les valeurs agissent comme un poid, chaque vz aura un pourcentage du temps cpu qui correspond au ratio entre son poid et le poid total définit sur tous les vz.
Pour connaitre la répartition actuelle des poids :
vzcpucheck -v
Comment calculer le nombre de page à paramétrer
Toutes les parametres qui se terminent par pages, utilisent comme unités les pages. Une page représente pour les système 32 bits et amd64 une taille de 4ko, cette valeur varie pour des architectures particulière comme intel IA64 (attention rien à voir avec les processeurs intel 64 bits récents qui utilisent une architecture amd64).
Un raccourcis mathématique pratique permet de faire la correspondance entre le nombre de pages et le nombre de Mo.
Valeur en Mo = Nombre de page / 256
Nombre de page = 256 * Valeur en Mo
Par exemple pour définir une mémoire garantie à 2048Mo pour le container 101, on peut s’y prendre de la manière suivante :
vzctl set 101 –vmguarpages $((2048*256)) –save
Le futur d’openvz
OpenVZ et Vserver seront bientot obsolètes et bientot remplacés par LXC, lorsque ce dernier aura suffisament de maturité.