Rapport d'installation de l'hyperviseur libvirt » Historique » Version 1

Bruno STEVANT, 02/10/2018 22:18

1 1 Bruno STEVANT
h1. Rapport d'installation de l'hyperviseur libvirt
2 1 Bruno STEVANT
3 1 Bruno STEVANT
*  Date
4 1 Bruno STEVANT
* 2012/09/06
5 1 Bruno STEVANT
* Utilisation du paquet debian-installer-6.0-netboot-amd64 version 20110106.squeeze4.b1 pour démarrer l'install en TFTP
6 1 Bruno STEVANT
7 1 Bruno STEVANT
h2. Prérequis
8 1 Bruno STEVANT
9 1 Bruno STEVANT
* Trouver un nom à la machine
10 1 Bruno STEVANT
** Utile pour l'identification lors de l'inventaire, etc.
11 1 Bruno STEVANT
* Trouver un adressage
12 1 Bruno STEVANT
** Afin de lui trouver une « place » dans le réseau
13 1 Bruno STEVANT
14 1 Bruno STEVANT
h2. Réseau
15 1 Bruno STEVANT
16 1 Bruno STEVANT
Il faut d'abord préparer la configuration réseau qu'aura chaque hyperviseur :
17 1 Bruno STEVANT
18 1 Bruno STEVANT
* Réserver une/des IPv4 + IPv6
19 1 Bruno STEVANT
* Configurer le switch pour que la machine soit sur le(s) VLAN(s) adéquat
20 1 Bruno STEVANT
* Configuration DNS et gateway par défaut
21 1 Bruno STEVANT
22 1 Bruno STEVANT
h2. Spécifique à chaque machine
23 1 Bruno STEVANT
24 1 Bruno STEVANT
25 1 Bruno STEVANT
Dell R610
26 1 Bruno STEVANT
27 1 Bruno STEVANT
A besoin d'un firmware spécifique pour la carte réseau (Broadcom NetXtreme II) contenu dans le paquet firmware-bnx2, disponible dans non-free, à cette adresse par exemple : http://ftp.fr.debian.org/debian/pool/non-free/f/firmware-nonfree/firmware-bnx2_0.28+squeeze1_all.deb
28 1 Bruno STEVANT
29 1 Bruno STEVANT
Le mettre sur une clé USB, ou alors utiliser la méthode décrite ici pour l'ajouter à l'initrd : http://wiki.debian.org/DebianInstaller/NetbootFirmware
30 1 Bruno STEVANT
31 1 Bruno STEVANT
'''ATTENTION''' bien retirer la clé ''juste'' après que les interfaces réseau aient été détectées, afin qu'elle ne perturbe pas l'ordre de détection des disques. Ça ne pose pas de problème pour Linux qui utilise maintenant des UUID, mais c'est important pour GRUB, qui va s'installer sur le premier disque trouvé. Si vous ne l'avez pas fait, rebootez en mode « rescue », montez la racine puis le /boot, adaptez le /boot/grub/grub.cfg si besoin, et lancez :
32 1 Bruno STEVANT
33 1 Bruno STEVANT
<pre>
34 1 Bruno STEVANT
# grub-install /dev/sdX
35 1 Bruno STEVANT
</pre>
36 1 Bruno STEVANT
37 1 Bruno STEVANT
h2. Configuration de l'installeur
38 1 Bruno STEVANT
39 1 Bruno STEVANT
Commencer l'installation par le réseau.
40 1 Bruno STEVANT
41 1 Bruno STEVANT
Rentrer le nom, le domaine (?).
42 1 Bruno STEVANT
43 1 Bruno STEVANT
Ne pas mettre de mot de passe root, ainsi sudo sera utilisé et se logger en root sera interdit.
44 1 Bruno STEVANT
45 1 Bruno STEVANT
Partitionnement manuel :
46 1 Bruno STEVANT
47 1 Bruno STEVANT
* Le RAID est géré par le contrôleur hard
48 1 Bruno STEVANT
* Créer une partition primaire de 1Go en ext2 pour /boot
49 1 Bruno STEVANT
* Créer un volume physique (partition primaire) pour LVM de 20Go
50 1 Bruno STEVANT
* Éventuellement créer un volume physique pour LVM sur le reste
51 1 Bruno STEVANT
* Créer un groupe de volumes sur le premier PV, qui sera le VG du système (donc avec le nom « system » c'est pas mal)
52 1 Bruno STEVANT
* Créer un volume logique dessus pour /
53 1 Bruno STEVANT
* Éventuellement séparer /var (genre 10Go/10Go)
54 1 Bruno STEVANT
* Ne ''pas'' mettre de swap (un avertissement ultérieur demandera explicitement de confirmer que vous ne voulez vraiment pas de swap), ou alors en mettre met préciser plus tard au kernel de ne l'utiliser qu'en dernier recours
55 1 Bruno STEVANT
* Mettre / (et éventuellement /var) sur les LV correspondant, en ext3
56 1 Bruno STEVANT
* Si on utilise un /var séparé, prévoir une taille conséquente pour le stockage de la RAM des VMs qui seront mises en pause sur le disque, par exemple 1,5× le volume de RAM minimum
57 1 Bruno STEVANT
58 1 Bruno STEVANT
Lors de la sélection des packages, choisir « Serveur SSH » et « Utilitaires standard du système »
59 1 Bruno STEVANT
60 1 Bruno STEVANT
Faire attention à l'installation de GRUB si c'est bien sur le bon périphérique qu'il est installé ; une clé USB peut faire changer l'ordre des périphériques par rapport à un boot « normal ».
61 1 Bruno STEVANT
62 1 Bruno STEVANT
h2. Après l'installation
63 1 Bruno STEVANT
64 1 Bruno STEVANT
Mettre un getty sur le port série, toujours utile pour dépanner. Décommenter/ajouter la ligne suivante dans /etc/inittab :
65 1 Bruno STEVANT
66 1 Bruno STEVANT
<pre>
67 1 Bruno STEVANT
T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100</pre>
68 1 Bruno STEVANT
Pour recharger la configuration :
69 1 Bruno STEVANT
70 1 Bruno STEVANT
<pre># telinit q</pre>
71 1 Bruno STEVANT
== Administration de base ==
72 1 Bruno STEVANT
73 1 Bruno STEVANT
Afin de garder l'hyperviseur à l'heure, il faut installer un démon NTP :
74 1 Bruno STEVANT
75 1 Bruno STEVANT
<pre># apt-get install ntp</pre>
76 1 Bruno STEVANT
Notez qu'il n'est pas nécessaire, voire néfaste, d'installer un tel démon sur les machines virtuelles : elles n'ont pas de référence assez précise au niveau CPU (qui est virtualisé) pour calculer la dérive de l'horloge « temps réel ». On doit plutôt utiliser un OS qui a un pilote pour le périphérique d'horloge « exacte » qu'exporte l'hyperviseur à l'invité.
77 1 Bruno STEVANT
78 1 Bruno STEVANT
Pour des raisons de sécurité, il est mieux de désactiver l'authentification SSH par mot de passe. Pour cela, ajouter dans /etc/ssh/sshd_config la ligne :
79 1 Bruno STEVANT
80 1 Bruno STEVANT
<pre>PasswordAuthentication no</pre>
81 1 Bruno STEVANT
(commenter PasswordAuthentication yes ne suffit pas !)
82 1 Bruno STEVANT
83 1 Bruno STEVANT
Si vous avez mis du swap lors du partitionnement, vous devez indiquer au kernel de ne l'utiliser qu'au minimum. Pour cela, nous allons ajouter à /etc/sysctl.d/local.conf (par exemple) :
84 1 Bruno STEVANT
85 1 Bruno STEVANT
<pre># bcama: set swap usage to the minimum; it's just here in case of emergency
86 1 Bruno STEVANT
vm.swappiness=0</pre>
87 1 Bruno STEVANT
Profitez-en pour activer les sysrq, qui peuvent aider en cas d'urgence si la machine « déconne » ; attention, ces commandes autorisent des choses dangereuses à qui contrôle le clavier local de la machine, comme un reboot immédiat par exemple (Alt+PrintScreen+b ; voir Documentation/sysrq.txt pour les autres) :
88 1 Bruno STEVANT
89 1 Bruno STEVANT
<pre># bcama: allow sysrq
90 1 Bruno STEVANT
kernel.sysrq=1</pre>
91 1 Bruno STEVANT
Et l'activer :
92 1 Bruno STEVANT
93 1 Bruno STEVANT
<pre># service procps restart</pre>
94 1 Bruno STEVANT
95 1 Bruno STEVANT
h2. Installation de libvirt
96 1 Bruno STEVANT
97 1 Bruno STEVANT
On utilise le libvirt de squeeze-backports, la version d'origine de squeeze étant un peu vieille. Pour cela, on ajoute d'abord le repository de backports dans le fichier /etc/apt/sources.list.d/squeeze-backports.list qui contient :
98 1 Bruno STEVANT
99 1 Bruno STEVANT
<pre>deb http://backports.debian.org/debian-backports squeeze-backports main</pre>
100 1 Bruno STEVANT
Puis on installe libvirt :
101 1 Bruno STEVANT
102 1 Bruno STEVANT
<pre># apt-get install -t squeeze-backports libvirt0 libvirt-bin</pre>
103 1 Bruno STEVANT
Il faut également ajouter les utilisateurs qui voudront avoir accès y l'hyperviseur au groupe libvirt :
104 1 Bruno STEVANT
105 1 Bruno STEVANT
<pre># adduser un_utilisateur libvirt</pre>
106 1 Bruno STEVANT
On peut également installer virtinst, qui contient quelques utilitaires pratique pour l'installation de VM :
107 1 Bruno STEVANT
108 1 Bruno STEVANT
<pre># apt-get install --no-install-recommends virtinst
109 1 Bruno STEVANT
# apt-git install pm-utils</pre>
110 1 Bruno STEVANT
(nous n'installons pas les paquets recommandées car ils ont trop de dépendances inutiles ; et pm-utils est une dépendance non-indiquée dans les vieux paquets libvirt)
111 1 Bruno STEVANT
112 1 Bruno STEVANT
h2. Configuration de libvirt
113 1 Bruno STEVANT
114 1 Bruno STEVANT
On va configurer deux réseaux : un NATé et un bridgé, en fonction du type de connectivité qu'on souhaite pour les VMs.
115 1 Bruno STEVANT
116 1 Bruno STEVANT
Pour définir le réseau NATé, on utilise le XML suivant avec la commande virsh
117 1 Bruno STEVANT
net-define :
118 1 Bruno STEVANT
119 1 Bruno STEVANT
<pre><network>
120 1 Bruno STEVANT
  <name>routed-nat</name>
121 1 Bruno STEVANT
  <forward mode='nat'/>
122 1 Bruno STEVANT
  <bridge name='virbr0' stp='on' delay='0' />
123 1 Bruno STEVANT
  <ip address='192.168.122.1' netmask='255.255.255.0'>
124 1 Bruno STEVANT
    <dhcp>
125 1 Bruno STEVANT
      <range start='192.168.122.2' end='192.168.122.254' />
126 1 Bruno STEVANT
    </dhcp>
127 1 Bruno STEVANT
  </ip>
128 1 Bruno STEVANT
</network></pre>
129 1 Bruno STEVANT
Et pour le bridgé (ça serait mieux d'utiliser macvtap mais ça n'est pas disponible sur squeeze) :
130 1 Bruno STEVANT
131 1 Bruno STEVANT
<pre><network>
132 1 Bruno STEVANT
  <name>bridged</name>
133 1 Bruno STEVANT
  <forward mode='bridge'/>
134 1 Bruno STEVANT
  <bridge name='br0'/>
135 1 Bruno STEVANT
</network></pre>
136 1 Bruno STEVANT
Qui utilisera br0 configuré comme suit dans /etc/network/interfaces (après avoir commenté/effacé la configuration pour eth0) :
137 1 Bruno STEVANT
138 1 Bruno STEVANT
<pre>allow-hotplug br0
139 1 Bruno STEVANT
iface br0 inet dhcp
140 1 Bruno STEVANT
    bridge_ports    eth0</pre>
141 1 Bruno STEVANT
Nous allons également les démarrer automatiquement au démarrage de la machine :
142 1 Bruno STEVANT
143 1 Bruno STEVANT
<pre>$ virsh net-autostart routed-nat
144 1 Bruno STEVANT
$ virsh net-autostart bridged</pre>
145 1 Bruno STEVANT
Pour le stockage, nous créons un volume group LVM dédié aux VMs :
146 1 Bruno STEVANT
147 1 Bruno STEVANT
<pre># vgcreate vm-group /dev/sda3</pre>
148 1 Bruno STEVANT
Et le pool libvirt associé, avec virsh pool-define :
149 1 Bruno STEVANT
150 1 Bruno STEVANT
<pre><pool type='logical'>
151 1 Bruno STEVANT
    <name>vm</name>
152 1 Bruno STEVANT
    <source>
153 1 Bruno STEVANT
        <name>vm-group</name>
154 1 Bruno STEVANT
        <device path='/dev/sda3' />
155 1 Bruno STEVANT
    </source>
156 1 Bruno STEVANT
    <target>
157 1 Bruno STEVANT
        <path>/dev/vm-group</path>
158 1 Bruno STEVANT
    </target>
159 1 Bruno STEVANT
</pool></pre>
160 1 Bruno STEVANT
On peut également faire un pool réservé aux images qui peuvent être « creuses », et donc mieux stockées dessus :
161 1 Bruno STEVANT
162 1 Bruno STEVANT
<pre><pool type='dir'>
163 1 Bruno STEVANT
    <name>images</name>
164 1 Bruno STEVANT
    <target>
165 1 Bruno STEVANT
        <path>/var/lib/libvirt/images</path>
166 1 Bruno STEVANT
        <permissions>
167 1 Bruno STEVANT
            <mode>0700</mode>
168 1 Bruno STEVANT
        </permissions>
169 1 Bruno STEVANT
    </target>
170 1 Bruno STEVANT
</pool></pre>
171 1 Bruno STEVANT
Ces deux pools seront automatiquement démarrés :
172 1 Bruno STEVANT
173 1 Bruno STEVANT
<pre>$ virsh pool-autostart vm
174 1 Bruno STEVANT
$ virsh pool-autostart images</pre>
175 1 Bruno STEVANT
Nous pouvons aussi indiquer que nous souhaitons suspendre les machines lors de l'arrêt de l'hyperviseur, et les redémarrer automatiquement à son démarrage, en indiquant dans /etc/default/libvirt-guests les options suivantes :
176 1 Bruno STEVANT
177 1 Bruno STEVANT
<pre>URIS=qemu:///system
178 1 Bruno STEVANT
ON_BOOT=start # toutes les machines allumées à l'extinction sont redémarrées
179 1 Bruno STEVANT
ON_SHUTDOWN=suspend</pre>
180 1 Bruno STEVANT
181 1 Bruno STEVANT
h2. Configuration du SAN iSCSI
182 1 Bruno STEVANT
183 1 Bruno STEVANT
On configure d'abord le VLAN utilisé par le SAN, en ajoutant dans /etc/network/interfaces le paragraphe suivant :
184 1 Bruno STEVANT
185 1 Bruno STEVANT
<pre>auto eth0.501
186 1 Bruno STEVANT
iface eth0.501 inet static
187 1 Bruno STEVANT
    address 10.35.21.66
188 1 Bruno STEVANT
    netmask 255.255.255.0</pre>
189 1 Bruno STEVANT
On installe le paquet adéquat :
190 1 Bruno STEVANT
191 1 Bruno STEVANT
<pre># apt-get install open-iscsi</pre>
192 1 Bruno STEVANT
Le nom de l'initiateur est créé lors du premier démarrage du démon ; il sert parfois pour l'authentification auprès d'une cible, et se trouve dans /etc/iscsi/initiatorname.iscsi. On démarre le démon :
193 1 Bruno STEVANT
194 1 Bruno STEVANT
<pre># invoke-rc.d open-iscsi start</pre>
195 1 Bruno STEVANT
On découvre et active le login automatique sur la cible :
196 1 Bruno STEVANT
197 1 Bruno STEVANT
<pre># iscsi_discovery 10.35.21.1</pre>
198 1 Bruno STEVANT
Si certains “portals” ne sont pas disponibles, on peut arrêter la recherche avec Ctrl+C. Pour effectuer le login sur tous à la main, plutôt :
199 1 Bruno STEVANT
200 1 Bruno STEVANT
<pre># iscsiadm -m node -p 10.35.21.1 --loginall=all</pre>
201 1 Bruno STEVANT
Et pour se délogger à la main :
202 1 Bruno STEVANT
203 1 Bruno STEVANT
<pre># iscsiadm -m node -p 10.35.21.1 --logoutall=all</pre>
204 1 Bruno STEVANT
Pour que le “montage” soit automatique au démarrage (i.e. que le démon démarre automatiquement), il faut l'indiquer ainsi :
205 1 Bruno STEVANT
206 1 Bruno STEVANT
<pre># iscsiadm -m node -p 10.35.21.1 -o update -n node.startup -v automatic</pre>
207 1 Bruno STEVANT
Nous utilisons également le multipath pour atteindre cette cible ; pour le gérer, nous installons le démon adéquat :
208 1 Bruno STEVANT
209 1 Bruno STEVANT
<pre># apt-get install multipath-tools</pre>
210 1 Bruno STEVANT
Pour notre utilisation du multipath, un module noyau non-chargé automatiquement est nécessaire. Nous l'ajoutons au fichier /etc/modprobe.d/iscsi-rdac.conf afin qu'il soit chargé au démarrage :
211 1 Bruno STEVANT
212 1 Bruno STEVANT
<pre># bcama: needed module for multipath iSCSI failed-path detection
213 1 Bruno STEVANT
scsi_dh_rdac</pre>
214 1 Bruno STEVANT
Et utilisons un fichier de configuration basique, dans /etc/multipath.conf :
215 1 Bruno STEVANT
216 1 Bruno STEVANT
<pre>defaults {
217 1 Bruno STEVANT
    user_friendly_names yes
218 1 Bruno STEVANT
}
219 1 Bruno STEVANT
220 1 Bruno STEVANT
blacklist {
221 1 Bruno STEVANT
    &quot;*&quot;
222 1 Bruno STEVANT
    # do not use the local disk
223 1 Bruno STEVANT
    devnode &quot;sda&quot;
224 1 Bruno STEVANT
    # get wwid with /lib/udev/scsi_id --whitelisted /dev/sda
225 1 Bruno STEVANT
    wwid …
226 1 Bruno STEVANT
}
227 1 Bruno STEVANT
228 1 Bruno STEVANT
multipaths {
229 1 Bruno STEVANT
    multipath {
230 1 Bruno STEVANT
        # wwid of the iSCSI volume
231 1 Bruno STEVANT
        wwid …
232 1 Bruno STEVANT
        alias my-fancy-volume
233 1 Bruno STEVANT
    }
234 1 Bruno STEVANT
}</pre>
235 1 Bruno STEVANT
Nous rechargeons la configuration :
236 1 Bruno STEVANT
237 1 Bruno STEVANT
<pre># invoke-rc.d multipath-tools reload</pre>
238 1 Bruno STEVANT
Et vérifions que ça marche :
239 1 Bruno STEVANT
240 1 Bruno STEVANT
<pre># multipath -l</pre>
241 1 Bruno STEVANT
Pour le désactiver, si besoin, il faut utiliser le flag `-f`:
242 1 Bruno STEVANT
243 1 Bruno STEVANT
<pre># multipath -f /dev/mapper/my-fancy-volume</pre>
244 1 Bruno STEVANT
Nous créons ensuite une partition sur ce volume ; pour les volumes de plus de 2To, il faut utiliser un partitionnement de type GPT, géré par l'utilitaire gdisk :
245 1 Bruno STEVANT
246 1 Bruno STEVANT
<pre># apt-get install gdisk
247 1 Bruno STEVANT
# gdisk /dev/mapper/my-fancy-volume
248 1 Bruno STEVANT
## do the partitionning</pre>
249 1 Bruno STEVANT
On utilisera ensuite cette partition comme volume physique LVM :
250 1 Bruno STEVANT
251 1 Bruno STEVANT
<pre># pvcreate /dev/mapper/my-fancy-volume-part1</pre>
252 1 Bruno STEVANT
Qui sera ajouté à un groupe de volume :
253 1 Bruno STEVANT
254 1 Bruno STEVANT
<pre># vgcreate my-fancy-group /dev/mapper/my-fancy-volume-part1</pre>
255 1 Bruno STEVANT
Pour éviter que LVM ne détecte à la fois les volumes « directs » et le volume multipath, on lui précise de ne pas utiliser certains périphériques bloc, dans /etc/lvm/lvm.conf, par exemple :
256 1 Bruno STEVANT
257 1 Bruno STEVANT
<pre># bcama: we discard every /dev/sd* except /dev/sda, as this is how iSCSI
258 1 Bruno STEVANT
# devices appears, and we handle them with multipath
259 1 Bruno STEVANT
filter = [ &quot;a/.*/&quot;, &quot;r|/dev/sd[^a]|&quot; ]</pre>
260 1 Bruno STEVANT
Pour l'ajouter à libvirt, nous utilisons le XML suivant :
261 1 Bruno STEVANT
262 1 Bruno STEVANT
<pre>&lt;pool type='logical'&gt;
263 1 Bruno STEVANT
    &lt;name&gt;iscsi-disi-rsm&lt;/name&gt;
264 1 Bruno STEVANT
    &lt;source&gt;
265 1 Bruno STEVANT
        &lt;device path='/dev/mapper/disi-rsm-vol-part1' /&gt;
266 1 Bruno STEVANT
    &lt;/source&gt;
267 1 Bruno STEVANT
    &lt;target&gt;
268 1 Bruno STEVANT
        &lt;path&gt;/dev/iscsi-disi-rsm&lt;/path&gt;
269 1 Bruno STEVANT
    &lt;/target&gt;
270 1 Bruno STEVANT
&lt;/pool&gt;</pre>
271 1 Bruno STEVANT
Et nous l'indiquons comme actif au démarrage :
272 1 Bruno STEVANT
273 1 Bruno STEVANT
<pre>$ virsh pool-autostart iscsi-disi-rsrm
274 1 Bruno STEVANT
$ # pour le démarrer maintenant :
275 1 Bruno STEVANT
$ virsh pool-start iscsi-disi-rsm</pre>
276 1 Bruno STEVANT
277 1 Bruno STEVANT
h2. Configuration complémentaire
278 1 Bruno STEVANT
279 1 Bruno STEVANT
h3. Accounting de la mémoire / du CPU
280 1 Bruno STEVANT
281 1 Bruno STEVANT
Afin d'activer diverses options d'accounting pour les VM, il est utile d'utiliser les cgroup. Pour cela, il faut monter ce FS spécial dans /cgroup, en créant d'abord ce répertoire :
282 1 Bruno STEVANT
283 1 Bruno STEVANT
<pre># mkdir /cgroup</pre>
284 1 Bruno STEVANT
Puis en ajoutant une entrée dans /etc/fstab :
285 1 Bruno STEVANT
286 1 Bruno STEVANT
<pre>cgroup        /cgroup cgroup  cpuacct,memory,devices,cpu,freezer,blkio        0       0</pre>
287 1 Bruno STEVANT
Attention, le cgroup memory n'est pas activé par défaut dans le kernel 3.2 que nous utilisons, car il provoque une légère dégradation de performances; si on veut l'utiliser, il faut passer le paramètre cgroup_enable=memory au kernel lors du boot. Pour cela, on modifie /etc/default/grub pour y modifier la ligne suivante :
288 1 Bruno STEVANT
289 1 Bruno STEVANT
<pre>GRUB_CMDLINE_LINUX_DEFAULT=&quot;cgroup_enable=memory quiet&quot;</pre>
290 1 Bruno STEVANT
Et on exécute update-grub afin de prendre en compte ce paramètre. Un redémarrage est nécessaire afin de prendre en compte ces modifications.
291 1 Bruno STEVANT
292 1 Bruno STEVANT
h3. Optimisation de l'utilisation mémoire
293 1 Bruno STEVANT
294 1 Bruno STEVANT
Une option existe depuis le kernel 2.6.38 qui permet de regrouper les pages mémoire identiques des VMs : le Kernel Samepage Merging. Pour l'activer, il faut écrire “1” dans /sys/kernel/mm/ksm/on, par exemple dans /etc/rc.local :
295 1 Bruno STEVANT
296 1 Bruno STEVANT
<pre>echo 1 &gt; /sys/kernel/mm/ksm/run</pre>
297 1 Bruno STEVANT
On peut aussi, si l'application le supporte (ce qui est le cas de KVM) utiliser les “huge pages”, qui permettent de réduire la pression sur le TLB. Pour cela, il faut d'abord monter un système de fichiers spécial :
298 1 Bruno STEVANT
299 1 Bruno STEVANT
<pre># mkdir /dev/hugepages
300 1 Bruno STEVANT
# mount -t hugetlbfs hugetlbfs /dev/hugepages  </pre>
301 1 Bruno STEVANT
Puis indiquer à l'OS combien de ces pages il peut allour ; attention, la mémoire réservée pour les hugepages n'est ''pas'' allouable par l'OS pour des pages classiques, et ne sera donc pas disponible même si elle n'est pas allouée :
302 1 Bruno STEVANT
303 1 Bruno STEVANT
<pre># sysctl vm.nr_hugepages=2048</pre>
304 1 Bruno STEVANT
La taille des pages est de 2MiB sur x86_64. Il faut ensuite indiquer dans les guests concernés qu'on souhaite les utiliser :
305 1 Bruno STEVANT
306 1 Bruno STEVANT
<pre>&lt;domain&gt;
307 1 Bruno STEVANT
308 1 Bruno STEVANT
  &lt;memoryBacking&gt;
309 1 Bruno STEVANT
    &lt;hugepages/&gt;
310 1 Bruno STEVANT
  &lt;/memoryBacking&gt;</pre>
311 1 Bruno STEVANT
Attention : cette fonctionnalité désactive la possibilité de swapper la VM, et également le “memory ballooning”.
312 1 Bruno STEVANT
313 1 Bruno STEVANT
h3. Optimisation des interruptions
314 1 Bruno STEVANT
315 1 Bruno STEVANT
Par défaut, beaucoup d'interruptions sont gérées par le premier cœur du CPU. Pour améliorer les performances sur une machine multi-cœur, on peut les répartir à l'aide de irqbalance. Il faut juste l'installer, il ne demande pas de configuration spécifique :
316 1 Bruno STEVANT
317 1 Bruno STEVANT
<pre># apt-get install irqbalance</pre>
318 1 Bruno STEVANT
319 1 Bruno STEVANT
h3. Installation des utilitaires de gestion RAID
320 1 Bruno STEVANT
321 1 Bruno STEVANT
La carte RAID PERC6/i peut être monitorée par un utilitaire spécifique, libre, megactl. Il existe un dépôt Debian d'outils des outils qui fonctionnent avec ces cartes : http://hwraid.le-vert.net/wiki/DebianPackages
322 1 Bruno STEVANT
323 1 Bruno STEVANT
Pour l'installer, il faut ajouter un dépôt, dans /etc/apt/sources.list.d/hwraid-le-vert.list par exemple, contenant :
324 1 Bruno STEVANT
325 1 Bruno STEVANT
<pre>deb http://hwraid.le-vert.net/debian wheezy main</pre>
326 1 Bruno STEVANT
Il faut également ajouter la clé du mainteneur dans notre base de clés de confiance :
327 1 Bruno STEVANT
328 1 Bruno STEVANT
<pre>$ wget -O - http://hwraid.le-vert.net/debian/hwraid.le-vert.net.gpg.key | sudo apt-key add -</pre>
329 1 Bruno STEVANT
Puis on peut installer l'outil megasasctl :
330 1 Bruno STEVANT
331 1 Bruno STEVANT
<pre># apt-get install megactl</pre>
332 1 Bruno STEVANT
Qui se lance simplement avec :
333 1 Bruno STEVANT
334 1 Bruno STEVANT
<pre># megasasctl</pre>
335 1 Bruno STEVANT
Si on veut modifier la configuration de la carte, il faut utiliser l'outil propriétaire megacli :
336 1 Bruno STEVANT
337 1 Bruno STEVANT
<pre># apt-get install megacli</pre>
338 1 Bruno STEVANT
L'outil a une syntaxe particulière, on peut trouver s'aider de cette cheatsheet : &lt;http://tools.rapidsoft.de/perc/perc-cheat-sheet.pdf&gt;.
339 1 Bruno STEVANT
340 1 Bruno STEVANT
h3. Optimisation des Entrées/Sorties
341 1 Bruno STEVANT
342 1 Bruno STEVANT
Par défaut, les Linux modernes utilisent cfq comme scheduler d'I/O. Selon les recommendations d'IBM &lt;http://www-01.ibm.com/support/knowledgecenter/api/content/linuxonibm/liaat/liaatbestpractices_pdf.pdf&gt;, il vaut mieux utiliser deadline. On peut l'activer par exemple dans /etc/rc.local :
343 1 Bruno STEVANT
344 1 Bruno STEVANT
<pre>echo deadline &gt; /sys/block/sdb/queue/scheduler
345 1 Bruno STEVANT
echo deadline &gt; /sys/block/sdc/queue/scheduler
346 1 Bruno STEVANT
echo deadline &gt; /sys/block/$(readlink /dev/mapper/disi-rsm-vol | cut -d/ -f2)/queue/scheduler</pre>