<div class='slidealt'>Solutions de virtualisation pour systèmes <a title='solutions en logiciels libres de virtualisation pour ARMv7-ARMv8' href='/fr/solutions/'>hétérogènes multicoeur ARM</a></div> <div class='slidealt'>Projets de recherche de virtualisation <a title='kvm en logiciel libre pour ARM multicoeur' href='/fr/innovation/'>pour les systèmes embarqués et le cloud</a></div> <div class='slidealt'>Virtualisation KVM des E/S's pour coeurs ARMv7, ARMv8 <a title='extensions de virtualisation de plateforme VFIO des E/S par kvm sur arm en logiciel libre' href='/fr/solutions/guides/vfio-sur-arm/'>par extensions VFIO/IOMMU</a></div> <div class='slidealt'>Faites appelle à des <a title='services de full virtualisation pour kvm sur coeur ARM' href='/fr/services/'>services de virtualisation sur mesure</a></div> <div class='slidealt'>Expérimentez des extensions de <a title='virtualisation pour plateformes hétérogènes à base de processeurs ARM' href='/fr/produits/'>virtualisation KVM</a></div>

Test VFIO_PLATFORM avec le Contrôleur DMA PL330

Un test d'espace utilisateur VFIO_PLATFORM et un exemple du passthrough du dispositif en QEMU

Introduction aux cas de test VFIO

Les composants matériels modernes sont équipés de mémoire à accès direct (DMA) qui leur permet d'accélérer la mise à disposition des données au système d'exploitation en cours d'exécution. Les accès DMA sont problématiques quand un dispositif est attaché soit à une application de l'espace utilisateur soit à une machine virtuelle invité. Non seulement le matériel sera configuré à l'aide d'adresses mémoire (physique ou intermédiaires) virtuelles, mais aussi d'autres problèmes de sécurité existent car le système d'exploitation invité ne peut pas avoir un accès direct à l'espace mémoire de l'hôte ou d'autres machine virtuelles.

Un IOMMU est un bloc matériel, semblable à une unité de gestion mémoire (MMU) de CPU qui intercepte tout accès à la mémoire à partir des accélérateurs matériels programmables ou non, et traduit les adresses mémoire à partir des adresses virtuelles en adresses physiques. Les composants matériels derrière un IOMMU correctement configurés fonctionneront sous l'illusion qu'ils accèdent directement à la mémoire physique de la machine, alors qu'ils ont en fait été liés à l'espace mémoire d'une machine virtuelle. En outre, le bloc IOMMU empêchera aux dispositifs liés d'accéder à la mémoire au-delà des zones d'accès qui ont été attribués dans les tableaux de page mémoire.

Le framework VFIO est intègre dans le noyau Linux afin de satisfaire à une exigence précise, qui est la possibilité de réaliser des pilotes de périphériques de l'espace utilisateur, exploitant les capacités d'un dispositif avec fonctionnalité DMA derrière un IOMMU. Ceci s'applique en outre à des machines virtuelles, réalisées par QEMU/KVM, comme la capacité d'assigner des périphériques directement à un système d'exploitation invité, tout en préservant les propriétés d'isolation de la virtualisation et la sécurité du système.

Virtual Open Systems développe et maintien le pilote VFIO_PLATFORM, qui permet d'utiliser VFIO sur les systèmes ARM. Avec ce pilote, les dispositifs sur un SoC ARM peuvent être liés à VFIO, et peuvent être utilisés par l'API VFIO. Cela peut être utilisé avec des machines virtuelles KVM sur ARM pour une affectation directe des périphériques, afin d'améliorer considérablement les performances E/S. L'objectif de ce document est de guider le lecteur, étape par étape, non seulement sur la compilation du pilote VFIO_PLATFORM sur ARM, mais aussi à travers deux cas de test différents que Virtual Open Systems a mis en place pour valider VFIO sur ARM:

bullet Le premier cas de test montre toutes les étapes nécessaires pour compiler et configurer un scénario de test de l'espace utilisateur et un pilote VFIO, sur la base du Contrôleur DMA DMA-330 (également connu en tant que contrôleur DMA PL330). Ce dispositif est un périphérique AMBA développé par ARM; il est facile à obtenir en utilisant FastModels, par construction du modèle correspondant disponible parmi tous les exemples de modèles inclus. Comme un DMAC, son but est de copier les données de mémoire à mémoire, de la mémoire au dispositif ou du dispositif à la mémoire. Toutefois, afin de valider l'implementation de VFIO sur ARM, le cas de test VFIO que nous allons utiliser instruira le dispositif à effectuer seulement des transferts de données de mémoire à mémoire.

bullet Le deuxième cas d'utilisation montre comment configurer QEMU pour exposer un dispositif réel directement à une machine virtuelle. La version upstream de QEMU ne permet pas encore de relier les dispositifs platform aux machines virtuelles; cet fonctionnalité est réservée exclusivement aux dispositifs PCI (PCI passthrough). Cependant la communauté est en train de se diriger vers l’intégration du API VFIO dans QEMU pour les dispositifs platform, afin de garantir également la fonction passthrough pour ce type des dispositifs. Virtual Open Systems est en train de contribuer à VFIO et dans ce deuxième cas d’utilisation, nous allons présenter l’état d’intégration de VFIO en QEMU en vigueur au moment de la rédaction de ce guide. Ce cas d'utilisation décrit les étapes pour relier le contrôleur DMA-330 à une machine virtuelle: dans cette configuration, QEMU fera la plupart du travail et il nécessite seulement des informations de base pour trouver le dispositif qui doit être lié. Le système invité ne sera pas au courant du mécanisme sous-jacent et il va joindra le dispositif d'une manière transparente, utilisant un pilote du noyau sans aucune modification.

Requis

Ce guide se base sur les requis suivants:

bullet FastModels: puisque nous allons utiliser le contrôleur DMA PL330 et ARM SMMU-400, une version 7.0 ou plus récent est requise. Le guide a été testé avec la version FastModels 8.2 et 8.3 (les versions les plus récentes disponibles au moment de la rédaction). Le modèle de contrôleur DMA est inclus dans FastModels. Une licence appropriée pour exécuter FastModels est également nécessaire.

bullet Un PC avec distribution Linux, comme par exemple Ubuntu 13.10.

Configurer l'hôte ARM Linux avec VFIO_PLATFORM

Dans cette section, nous allons préparer une distribution Linux qui sera utilisée dans le reste du guide. Nous allons mettre en place tous les éléments nécessaires:

bullet installation les paquets nécessaires pour la compilation croisée

bullet compilation du modèle comprenant le contrôleur DMA PL330 et un ARM SMMU-400

bullet mis en place d'une ressource NFS pour le système de fichiers en espace utilisateur

bullet compilation du noyau Linux de l'hôte

bullet configuration des derniers détails pour démarrer le modèle

Ces premiers pas sont les mêmes pour les deux cas de tests du VFIO présentés dans ce guide. Après ce chapitre, nous nous pencherons sur les étapes nécessaires pour construire les deux cas de test.

Installation du compilateur croisé

Pour la compilation croisé pour l'architecture ARM, nous avons besoin de quelques outils de base. Pour une distribution Ubuntu, nous commençons par installer le compilateur GCC, git et d'autres outils, comme suit:

$ sudo apt-get update && sudo apt-get install build-essential git libncurses5-dev

Pour l'installation du compilateur croisé et ses dépendances nous lanceront la commande suivante:

$ sudo apt-get install gcc-arm-linux-gnueabi coreutils-armel-cross libc6-armel-cross \
        libc6-dev-armel-cross linux-libc-dev-armel-cross binutils-arm-linux-gnueabi  \
        debootstrap qemu-user-static

Identifiant ou inscription pour visualiser l'information complète