Systèmes parallèles et distribués - OpenMosix

Cette page est obsolète, ce TP n'a pas été testé depuis 2006.

Travaux pratiques : experimentations avec OpenMosix

Une fois OpenMosix configuré sur plusieurs machine, elles doivent se voir entre-elles. On peut afficher la charge de chacune en lançant mosmon. Différents autres utilitaires sont fournis dans openmosix-tools, regarder ce qui a été installé et les essayer.

Lancer plusieurs processus sur une même machine et les observer migrer avec mosmon.

Ajouter des printf et observer l'arrêt de la migration. Montrer que si on garde en mémoire des messages à afficher, et qu'on les affiche tous à la fin du processus, la migration s'interrompt lors du premier affichage.

Enregistrer le pid du processus toutes les secondes et afficher l'ensemble des valeurs après une minute d'utilisation du processeur sur une machine chargée afin de voir qu'il varie.

Ajouter des threads, de la mémoire partagée ou des sémaphores et montrer que les processus arrêtent de migrer dès leur première utilisation.

Installer OpenMosix
Installation

Les divers utilitaires Mosix sont disponibles ici. Il faut télécharger le noyau et les tools pour en profiter. Pour installer dans une Debian sans tout compiler, le plus simple est prendre les RPM binaires et les convertir en tar.gz avec alien, par exemple avec l'option --to-tgz pour produire des tarballs. Extraire ces tarballs à la racine du système. Les modules noyaux doivent appartenir à root, ce ne sera pas le cas si vous avez extrait le taball. Pour le corriger :

    chown root.root -R /boot /lib/modules
 

Ensuite, on rend le noyau bootable en metant grub à jour.

    update-grub
 

Ensuite, il faut rebooter sur le noyau OpenMosix. Il va surement se plaindre des modules. Pour corriger cela :

    depmod -a
 

Cette commande ne marche que pour le noyau tournant actuellement. Pour le faire sur le noyau OpenMosix alors que c'est un autre noyau qui tourne :

    depmod -ae -F /boot/System.map-2.4.26-openmosix1 2.4.26-openmosix1
 
Configuration

Par défaut, OpenMosix passe en mode auto-discovery de tous les noeuds connectés au réseau. Sinon, la configuration se fait dans /etc/openmosix/openmosix.config où on peut explicitement choisir l'interface réseau à utiliser et activer l'auto-discovery. On peut aussi faire une configuration statique dans /etc/openmosix/openmosix.map. L'auto-discovery activée sur plusieurs machines du même réseau, leur permet de se détecter et connecter automatiquement.

Utilitaires graphiques

Essayer OpenMosixView si vous avez une session graphique (pas trivial avec Qemu).

OpenMosix dans Qemu

Si le noyau OpenMosix ne marche pas sur votre machine (par exemple car elle est trop récente pour un noyau 2.4.26) ou que vous ne pouvez l'installer (il faut être root notamment), on peut faire tourner OpenMosix dans un Qemu, en l'installant dans une image Debian Sarge comme décrit ci-dessous. Cela prend environ 30mn sur une machine récente avec l'accélérateur kqemu (vor plus bas).

Créer une image Debian Sarge pour Qemu

Si vous n'avez pas d'image Debian Sarge prête pour Qemu, voici comment faire. D'abord, il faut créer une image vide, 300Mo suffisent souvent.

    qemu-img create -f qcow sarge.img 300M
 

Ensuite on télécharge l'installeur Debian Sarge.

    wget http://cdimage.debian.org/debian-cd/3.1_r4/i386/iso-cd/debian-31r4-i386-netinst.iso
 

Et on le lance l'installation dans Qemu

    qemu -cdrom ~/tmp/debian-31r4-i386-netinst.iso -hda sarge.img -m 256 -boot d
 

Dans l'installeur, configurer la langue, le pays, le clavier, mettre un nom de machine du type node1, pas besoin de nom de domaine. Configurer manuellement le disque, y créer une table de partitions vide puis une seule partition racine utilisant tout le disque, terminer et valider. Installer grub, continuer pour rebooter.

    qemu -hda sarge.img -m 256 -nographic
 

Finir la configuration en indiquant que l'horloge n'est pas à GMT, régler le fuseau horaire, et choisir le mot passe root. Annuler au lieu de créer un utilisateur. Configurer apt pour utiliser un serveur http en France; choisir ftp2.fr.debian.org sans proxy. N'ajouter aucune autre source. Ajouter les mises à jour de sécurité. De retour dans le menu, aller directement à la fin de l'installation afin de ne pas installer plein de paquets inutiles. Maintenant, on peut installer OpenMosix comme expliqué plus haut.

Pour faire de la place, on peut supprimer plein de paquets inutiles

    dpkg -P telnet ppp pppconfig pppoe pppoeconf manpages ipchains iptables aptitude discover1 \
    discover1-data libdiscover1 exim4 exim4-base exim4-config exim4-daemon-light tasksel at mailx
 

On peut aussi utiliser deborphan et localepurge pour faire encore plus de place.

    apt-get install ssh deborphan localpurge
 

Laisser uniquement les locales anglaises et enlever le reste, y compris les manpages. Faire en boucle la ligne suivante, jusqu'à ce qu'une erreur apparaisse, indiquand qu'il n'y a plus rien à supprimer.

    deborphan | xargs dpkg -P
 
Relier différents noeuds Qemu en réseau

Par défaut, Qemu crée une passerelle vers l'extérieur via la machine physique et lance un serveur DHCP. Mais cela ne permet apparemment pas de relier plusieurs Qemu en réseau. On passe donc des options à Qemu pour changer la configuration réseau.

Passer -net nic -net socket,listen=1.2.3.4:1234 à un Qemu le fait connecte sa carte réseau virtuelle à une socket serveur sur laquelle d'autres Qemu pourront se connecter. L'adresse 1.2.3.4 doit être une adresse de la machine physique (ou un nom).

Ensuite, on passe -net nic,macaddr=52:54:00:12:34:57 -net socket,connect=1.2.3.4:1234 à un autre Qemu pour qu'il se connecte au premier. À noter qu'on change l'adresse MAC pour ne pas avoir 2 fois la même sur le réseau virtuel.

Enfin, on attribue des adresses IP fixes à chaque instance de Qemu. On peut enfin lancer OpenMosix.

Plusieurs Qemu tournant sur la même machine

Pour lancer plusieurs Qemu sur la même machine, il suffit d'utiliser localhost comme nom de machine dans les options -net passées en ligne de commande.

Par contre, il est important de ne pas lancer plusieurs Qemu sur la même image disque. Il faut d'abord, fermer celui qui tourner, dupliquer le fichier image, puis relancer un Qemu par image.

À noter que sur une machine mono-processeur et mono-core, un seul Qemu s'exécute à chaque instant, etle système leur alloue plus ou moins de temps processeur selon leurs besoins. La mesure de la charge par OpenMosix pour migrer les processus devient alors approximative. Il vaut donc mieux avoir une machine multi-processeurs et/ou multi-cores pour faire du OpenMosix dans plusieurs Qemu locaux.

Accélérer Qemu avec kqemu

Le Qemu normal est très lent car il émule toutes les instructions. Pour pouvoir exécuter nativement les instructions classiques, on peut utiliser un module noyau dédié, kqemu.

Télécharger le kqemu, le compiler, et le charger. Pour les noyaux 2.6, il faut passer le paramètre major=0 :

    sudo insmod kqemu.ko major=0
 

Si vous avez fait make install, vous pouvez faire à la place :

    sudo modprobe kqemu major=0
 
Updated on 2023/06/28.