Astuces et optimisations : Différence entre versions
(Page créée avec « = Recompiler un noyau pour les domU (Debian Way) = == Kernel 2.6.26 == Ici, on va recompiler depuis le domU, installé en utilisant <code>pygrub</code><br /> Installation... ») |
(Aucune différence)
|
Version actuelle datée du 12 avril 2018 à 15:56
Recompiler un noyau pour les domU (Debian Way)
Kernel 2.6.26
Ici, on va recompiler depuis le domU, installé en utilisant pygrub
Installation des prérequis (on va se placer dans /usr/src
, les sources seront téléchargées dans le répertoire courant) :
aptitude install -y build-essential libncurses5 zlib1g-dev zlibc kernel-package libncurses-dev cd /usr/src/ apt-get source linux-image-2.6.26-2-xen-686
N.b. : apt-get source
n'est disponible que si le fichier /etc/apt/sources.list
contient les entrées deb-src
:
deb-src http://ftp2.fr.debian.org/debian/ lenny main deb-src http://security.debian.org/ lenny/updates main deb-src http://volatile.debian.org/debian-volatile lenny/volatile main
Vous devriez vous retrouver avec des éléments :
linux-2.6-2.6.26/ linux-2.6_2.6.26-26lenny2.diff.gz linux-2.6_2.6.26-26lenny2.dsc linux-2.6_2.6.26.orig.tar.gz
On va appliquer les patchs contenu dans le .diff (ils contiennent entre autre les patch pour Xen)
gzip -d linux-2.6_2.6.26-26lenny2.diff.gz cd linux-2.6-2.6.26/ patch -p0 < ../linux-2.6_2.6.26-26lenny2.diff
On passe à la compilation (avec copie préalable du .config)
cp /boot/config-2.6.26-2-xen-686 ./.config make menuconfig
Il FAUT penser à activer les options suivantes :
Processor type and features ---> [*] Paravirtualized guest support ---> [*] Xen guest support
Une fois que vous avez sélectionné les options souhaitées, il ne reste plus qu'à faire un
time env CONCURRENCY_LEVEL=`grep -c '^processor' /proc/cpuinfo` make-kpkg --initrd --revision=2.6.26-26lenny2 --append-to-version=-i386-bigmem-xenu kernel_image modules
Prenez un café (ou prenez préalablement le temps d'arrêter la VM et de la rebooter avec plus de vCPUs)
Une fois la compilation terminée un ls ../
doit remonter en plus linux-image-2.6.26-i386-bigmem-xenu_2.6.26-26lenny2_i386.deb
qu'il ne reste plus qu'à dpkg -i
pour installer le kernel, les modules, l'initrd, et regénérer grub en conséquence.
cd /usr/src/ dpkg -i linux-image-2.6.26-i386-bigmem-xenu_2.6.26-26lenny2_i386.deb
Répondez Oui
à la première question, OK
à la seconde, et Non
à la 3eme.
Il faut ensuite modifier le fichier /boot/grub/menu.lst
pour y ajouter le kernel précédemment compilé :
title Debian GNU/Linux 5.0 root (hd0,0) kernel /boot/vmlinuz-2.6.26-i386-bigmem-xenu root=/dev/xvda2 ro initrd /boot/initrd.img-2.6.26-i386-bigmem-xenu
(Pensez à modifier la valeur du default
en fonction de où vous avez placé le bloc ci-dessus)
reboot
Si tout c'est bien passé, ça reboot sur le bon kernel, et vous devriez avoir les nouvelles options compilées correctement.
Kernel 2.6.32
Cet exemple est réalisé à partir du dom0 (puisqu'on utilise le même kernel)
Installation des prérequis :
aptitude install -y build-essential libncurses5 zlib1g-dev zlibc linux-source-2.6.32 kernel-package libncurses-dev
On va ensuite détarer les sources :
cd /usr/src/ tar jxvf linux-source-2.6.32.tar.bz2 cd linux-source-2.6.32
Une configuration fonctionnelle pour un domU est fournie avec le kernel du dom0 (il y aura juste des options en moins, mais ces options ne sont pas nécessaires aux domU). On récupère le fichier de configuration du kernel précedemment installé :
cp /boot/config-2.6.32-5-xen-686 ./.config
Et on lance la partie de configuration visuelle du kernel
make menuconfig
Sélectionnez dans ce menu les options et optimisation souhaités.
Ex. : la configuration du 1000hz se trouve dans Processor type and features --->
puis il s'agit du paramètre de Timer frequency
.
C'est également dans ce menu que l'on peut désactiver le Tickless, modifier le Processor family
, activer ou pas le SMT (Hyperthreading)
ou encore choisir le Preemption Model
time env CONCURRENCY_LEVEL=`grep -c '^processor' /proc/cpuinfo` make-kpkg --initrd --revision=1 --append-to-version=-i386-bigmem-xenu kernel_image modules cd .. dpkg -i ...deb
Tunning
Mémoire du dom0
Dans certains cas, il peut être intéressant de mettre des quantités fixes de ram au dom0, et faire en sorte que les domU ne puissent pas lui en prendre.
On va pour celà modifier le fichier /etc/xen/xend-config.sxp
et indiquer :
(dom0-min-mem 256) (enable-dom0-ballooning no)
Ce qui aura pour effet d'indiquer à Xen que le dom0 ne peut aller en dessous de 256Mo de ram, et qu'on interdit le balooning du dom0 (le balooning c'est la possibilité d'ajouter ou de diminuer la ram à chaud d'un système)
Puis, pour parfaire la chose, et afin de booter le dom0 avec pile poil 256Mb de ram (ajuster bien sur cette valeur à vous souhaits), on va faire quelques modifs dans les fichiers de config de GRUB2 :
echo "" >> /etc/default/grub echo "GRUB_CMDLINE_XEN_DEFAULT="dom0_mem=256M"" >> /etc/default/grub
Suivi d'un petit update-grub2
pour que la modification soit prise en compte.
Boot au démarrage du serveur
Afin de faire booter une, ou plusieurs VM au démarrage de la machine physique, il suffit de créer un répertoire /etc/xen/auto
et d'y placer des liens symboliques :
mkdir /etc/xen/auto ln -s /etc/xen/mavm1.cfg /etc/xen/auto/mavm1.cfg ...
Toujours dans la section boot & reboot, si on veut que l'hyperviseur procède à un shutdown des VM avant extinction de la machine (au lieu d'un SAVE), il convient de modifier quelques options de /etc/default/xendomains
XENDOMAINS_SAVE= XENDOMAINS_RESTORE=false
Fixer le CPU du dom0
Pour diverses raisons, il est possible de n'attribuer qu'un seul CPU au dom0, dans le fichier /etc/xen/xend-config.sxp
# In SMP system, dom0 will use dom0-cpus # of CPUS # If dom0-cpus = 0, dom0 will take all cpus available (dom0-cpus 0)
Les CPU (en réalité les threads) sont comptés de 1 à N, 0 indique tous les CPU disponible.
Ressources IO du dom0
Il est possible donner plus de crédits pour l'allocation des IO du dom0, dans /etc/rc.local
:
/usr/sbin/xm sched-credit -d Domain-0 -w 512
Plusieurs bridges
Selon les cas, il peut être utile d'avoir à monter plusieurs bridges sur le dom0. Sans trop complexifier la chose, nous allons créer un script /etc/xen/scripts/network-multi-bridge
et y mettre dedans :
#!/bin/sh dir=$(dirname "$0") "$dir/network-bridge" "$@" vifnum=0 netdev=eth0 bridge=eth0 "$dir/network-bridge" "$@" vifnum=1 netdev=eth1 bridge=eth1
Ne pas oublier de rendre ce script exécutable chmod +x /etc/xen/scripts/network-multi-bridge
et de demander au démon Xen de prendre ce script plutôt qu'un autre, dans /etc/xen/xend-config.sxp
rechercher la ligne
(network-script network-bridge)
pour la remplacer par
(network-script network-multi-bridge)
Un redémarrage pour être certain que toutes les modifications sont bien prises en compte et fonctionnelles, et c'est OK.
Bridge sans IP sur l'interface
Dans certains cas, il peut être intéressant de ne pas avoir d'IP sur une interface du dom0 (genre, pas d'IP publique).
Problème, si l'interface n'est pas configurée, elle ne monte pas au démarrage
Voici un petit trick applicable dans /etc/network/interfaces
allow-hotplug eth0 iface eth0 inet manual pre-up ifconfig $IFACE up post-down ifconfig $IFACE down
Bridge sans interface physique
Dans certains cas, il est intéressant d'avoir un bridge sans interface physique reliée (communication interVM uniquement sur le même Dom0, ou simplement pour natter). Dans ce cas, il faut créer un bridge vide, puis y allouer les VMs : auto xenbr1
iface xenbr1 inet static address 10.10.0.1 netmask 255.255.255.0 bridge_stp off bridge_waitport 0 bridge_fd 0