Je suis Charlie

Autres trucs

Accueil

Seulement les RFC

Seulement les fiches de lecture

Mon livre « Cyberstructure »

Ève

Qemu, un émulateur de processeur

Première rédaction de cet article le 15 mai 2006


Dans la grande famille des solutions de virtualisation, permettant de faire tourner un système d'exploitation sur un autre, Qemu appartient à la sous-famille des émulateurs de processeur, comme Bochs.

Cela veut dire qu'il lit les instructions machine en mémoire et les évalue, comme ce que fait le CPU (mais bien plus lentement).

Cela permet de faire tourner des systèmes d'exploitation non modifiés, dont on n'a qu'un binaire, comme par exemple Microsoft Windows. Contrairement à User-Mode-Linux, il n'est donc pas spécifique de Linux et, contrairement à Xen, il ne nécessite pas de modifier le système d'exploitation invité.

En outre, Qemu peut tourner sur divers processeurs et émuler divers processeurs donc on pourrait (je n'ai pas testé) faire fonctionner une Sparc virtuelle sur un PC.

J'ai testé Qemu sur ma Debian et tout s'est bien passé, y compris le réseau (contrairement à ce qu'on lit souvent).

Je lance Qemu avec qemu -hda images/freebsd_6.0/freebsd_6_0.img -boot c et Qemu émule un disque dur IDE (Qemu n'émule pas seulement le processeur mais aussi un PC complet) avec le fichier freebsd_6_0.img et démarre dessus. Ainsi, j'ai un FreeBSD complet sur ma Debian. On trouve énormément d'images toutes prêtes, pour les principaux systèmes libres, sur Free OS Zoo.

Si on préfère installer un système soi-même, on crée l'image vide :

% qemu-img create -f qcow  tmp/fenetres.img 100G

Puis on lance l'émulateur, ici in indiquant de démarrer sur le CD-ROM, qui contient un CD d'installation :

% qemu -cdrom /dev/cdrom -hda tmp/fenetres.img -boot d

Pour le réseau, Qemu lance par défaut /etc/qemu-ifup qui, chez moi, contient :

#!/bin/sh

iface=$1

# The Qemu host
myipv4addr=192.134.4.69

# The guest virtual machine
remipv4addr=192.134.4.79

# IPv4
sudo /sbin/ifconfig $iface $myipv4addr  netmask 255.255.255.255
sudo route add -host $remipv4addr dev $iface

# IPv6
# My local network is fd14:6941:e887::/48
sudo /sbin/ifconfig $iface add fd14:6941:e887::1
sudo route add  -Ainet6  fd14:6941:e887::/48 dev $iface
 
# activate ip forwarding
sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'

# activate ARP proxy to "spoof" arp address
sudo sh -c 'echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp'
sudo sh -c 'echo 1 > /proc/sys/net/ipv4/conf/${iface}/proxy_arp'

# set "spoofed" arp address
sudo arp -Ds $remipv4addr eth0 pub

Je n'ai pas mesuré de façon rigoureuse les performances mais, au pifomètre, elles sont très inférieures à celles de Xen, qui exécute le code machine directement sur le processeur physique. Un module à l'origine non libre existait pour Qemu pour faire à peu près la même chose mais il n'est plus nécessaire depuis l'apparition de processeurs ayant des fonctions de virtualisation, et du système kvm qui peut les utiliser.

Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)

Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)