URL: https://linuxfr.org/users/lelfe/journaux/machines-virtuelles-arm-64bits-et-centos-7 Title: Machines virtuelles ARM 64bits et CentOS 7 Authors: Degrémont Aurélien Date: 2016年08月03日T13:52:20+02:00 License: CC By-SA Tags: qemu, kvm, arm, centos7 et ubuntu Score: 38 Comme je n'avais pas trouvé mon bonheur en cherchant des informations sur le sujet, j'ai regroupé ici mes notes sur l'exécution de machines virtuelles KVM avec QEMU sur ARMv8 (64 bits) et CentOS 7. On trouve majoritairement des infos pour travailler avec Ubuntu (principalement car Ubuntu proposait quelque chose qui fonctionnait sur ARM bien plus tôt que Redhat/CentOS). Mais ces docs n'étaient pas claires à mes yeux. Il y 3 infos importantes à connaître : * il faut utiliser UEFI * certains devices ne se déclarent pas de la même façon * et on ne croule pas sous les images disques toutes prêtes ;) QEMU ==== QEMU supporte ARM v8 depuis déjà un bon moment. Des améliorations au support de l'architecture sont cependant ajoutées régulièrement. Fedora fournit des RPMS (http://koji.fedoraproject.org/koji/packageinfo?packageID=3685) pour les versions récentes de QEMU. Ils sont (assez) facilement recompilables sur CentOS 7. UEFI ==== Il est possible de démarrer des machines virtuelles ARMv8 en spécifiant directement un chemin pour un kernel et un initrd (`-kernel` et `-initrd`). Mais si vous souhaitez simplement utiliser une image disque avec GRUB et gérer le noyau dans le système, comme sur une machine physique, il est obligatoire d'utiliser UEFI. Des ROM UEFI pour ARMv8 sont développées et maintenues par le projet TianoCore à travers la plateforme EDK2. _kraxel_ fournit des RPMs de ces ROM recompilés régulièrement : https://www.kraxel.org/repos/jenkins/edk2/ Il y a 2 fichiers importants : * `/usr/share/edk2.git/aarch64/QEMU_EFI.fd`: La ROM UEFI * `/usr/share/edk2.git/aarch64/QEMU_VARS.fd`: La configuration du BIOS. Il faut noter que ces ROMs doivent faire exactement 64 Mo. Il est facile de les recopier dans un fichier plus grand (avec `dd` par exemple). Le RPM fournit des versions préparées de ces fichiers : * `/usr/share/edk2.git/aarch64/QEMU_EFI-pflash.raw` * `/usr/share/edk2.git/aarch64/vars-template-pflash.raw` Image ===== CentOS fournit une image disque RAW bootable pour aarch64, mise à jour régulièrement. Malheureusement, elle n'est pas prévue pour un environnement cloud et n'utilise pas cloud-image. La documentation sur l'utilisation de l'image est dispo là : http://mirror.centos.org/altarch/7/isos/aarch64/ReadMe.txt * http://mirror.centos.org/altarch/7/isos/aarch64/CentOS-7-aarch64.img.xz Exécution de QEMU ================= Machine KVM ----------- En activant KVM, vous pourrez obtenir des performances bien meilleures qu'en mode émulation. Il faut utiliser la machine `virt` (_QEMU 2.6 ARM Virtual Machine_) ``` qemu-system-aarch64 -enable-kvm -machine virt -cpu host ``` netdev ------ Il n'y a pas (encore?) de support de PCI pour ARMv8 dans QEMU. Pour utiliser une interface netdev, il faut la déclarer différemment que pour x86_64 : ``` -netdev user,id=hostnet0,hostfwd=tcp::2345-:22 -device virtio-net-device,netdev=hostnet0 ``` UEFI ---- La machine `virt` de QEMU aarch64 émule 2 devices pflash de 64Mo. Le premier sert à accéder à la ROM UEFI, le second sera utilisé pour enregistrer les paramètres UEFI. Ils peuvent être utilisés simplement avec l'option `-pflash FILE`. Cette option configure le device en mode read/write, ce qui n'est pas souhaitable pour la partie firmware UEFI, et de plus QEMU n'aime pas avoir à autodétecter le type de fichier RAW. Il est donc préférable de lui donner tous les paramètres explicitement (spécifier le flag readonly permet d'utiliser directement le fichier UEFI dans `/usr/share`. Sans ce flag, QEMU chercherait à ouvrir le fichier en écriture et n'aurait pas les permissions pour le faire). Au préalable copiez le template dans un emplacement où vous pourrez le modifier : ``` $ cp /usr/share/edk2.git/aarch64/vars-template-pflash.raw ./qemu-my_vars.raw ``` Puis les options pour qemu : ```` -drive if=pflash,format=raw,readonly,file=/usr/share/edk2.git/aarch64/QEMU_EFI-pflash.raw \ -drive if=pflash,format=raw,file=qemu-my_vars.raw ``` Premier boot: Configurer UEFI ----------------------------- Lors du premier démarrage, UEFI déroulera un compte à rebours et affichera un prompt. Il faut déclarer manuellement l'entrée dans EFI shell pour pouvoir booter sur l'image CentOS. Ceci n'est à faire qu'au premier démarrage. L'information sera sauvegardée dans la flash `qemu-my_vars.raw`. ``` Shell> bcfg boot add 1 fs0:\EFI\centos\grubaa64.efi "CentOS (GRUB)" Shell> exit ``` Au prochain reboot, Grub démarrera de suite. Commande complète ----------------- Les autres options de QEMU réservent moins de surprise. Un exemple simple : ``` $ qemu-system-aarch64 -enable-kvm -machine virt -cpu host \ -netdev user,id=hostnet0,hostfwd=tcp::2345-:22 -device virtio-net-device,netdev=hostnet0 \ -drive if=pflash,format=raw,readonly,file=/usr/share/edk2.git/aarch64/QEMU_EFI-pflash.raw \ -drive if=pflash,format=raw,file=qemu-my_vars.raw \ -drive file=CentOS-7-aarch64.img,if=virtio,format=raw,cache=none \ -m 512 -nographic ``` URLs ==== * https://wiki.ubuntu.com/ARM64/QEMU * http://rzycki.blogspot.fr/2014/08/using-qemu-to-run-ubuntu-arm-64-bit.html * https://wiki.archlinux.org/index.php/GRUB/EFI_examples Contexte ======== Ces tests ont été réalisés dans l'environnement de R&D HPC du CEA. Ils prennent place dans le cadre de notre veille technologique. Pour en savoir plus sur ces activités : * Développements systèmes : https://github.com/cea-hpc/ * Le HPC au CEA en général : http://www-hpc.cea.fr/ * Et **on recrute** ! http://www-hpc.cea.fr/fr/recrutements.htm (Informatique scientifique)

AltStyle によって変換されたページ (->オリジナル) /