2 minute(s) de lecture

Pour l’utilisation d’une VM et l’interaction avec le réseau, le Host, spécifiquement dans le cas de DPDK, plusieurs options sont possibles.

La VM peut avoir un accès direct à un périphérique PCI en utilisant du Passthrough ou utiliser le back-end virtio-net-pci.

VirtIO

VirtIO est une API définissant comment coder un front-end et un backend pour un driver virtuel. Cet API est de plus en plus utilisé par la plus part des Hyperviseurs (VirtualBox, VMware, Qemu/KVM, …)

https://fr.wikipedia.org/wiki/Virtio

https://developer.ibm.com/articles/l-virtio/

https://www.ozlabs.org/~rusty/virtio-spec/virtio-paper.pdf

Un driver virtuel est divisé en 2 parties, le front-end, coté Guest et le backe-end coté Host.

virtio définit 2 types de communication Guest/Host :

  • un moyen de communication pour le Control (définition des capacités, e.g. TSO pour une carte réseau)
  • un moyen de communcation pour les Data (e.g. envoi et réception de paquets réseaux dans le cas d’une carte réseau)

vhost

vhost protocol - A protocol that allows the virtio dataplane implementation to be offloaded to another element (user process or kernel module) in order to enhance performance.

https://www.redhat.com/en/blog/introduction-virtio-networking-and-vhost-net

http://www.virtualopensystems.com/fr/solutions/guides/snabbswitch-qemu/

in the kernel (vhost-net) or in the user space (vhost-user)

https://www.redhat.com/en/blog/deep-dive-virtio-networking-and-vhost-net

Hyperviseur & Virtualisation CPE > Qemu - options réseaux /DPDK

vhost-user

Comme pour Vhost, il y a une communication directe entre

mais cette fois l’élément prenant en charge le traitement est dans l’espace utilisateur.

Vhost-user est typiquement utilisé pour des switch réseaux implémenté en espace user (OpenVswitch, snabbswitch).

Hyperviseur & Virtualisation CPE > Qemu - options réseaux /DPDK

virtio-net-pci

C’est l’implémentation d’un device/driver virtio pour le réseau.

-device virtio-net-pci,netdev=${IF_VM},mac=${MAC} \
-netdev type=tap,ifname=${IF_VM},id=${IF_VM},script=./ovs-ifup-wan0,downscript=no \

Hyperviseur & Virtualisation CPE > Qemu - options réseaux /DPDK

https://www.redhat.com/en/blog/deep-dive-virtio-networking-and-vhost-net

netdev type=tap

Interface du host → TAP

-netdev type=tap,ifname=${IF_VM},id=${IF_VM},script=./ovs-ifup-wan0,downscript=no \

netdev type=vhost-user

Dans le cas d’une utilisation de OVS-DPDK, on crée dans OVS-DPDK des interfaces de type dpdkvhostuserclient qui vont être utilisées dans la ligne de commande de QEMU.

-chardev socket,id=char1,path=/tmp/dpdkvhostuserclient1,server \
    -netdev type=vhost-user,id=mynet1,chardev=char1,vhostforce \
    -device virtio-net-pci,mac=00:00:00:00:00:01,netdev=mynet1,

vfio-pci

Passthrough, on donne un accès direct au device PCI à l’OS du Guest. Le Guest va donc pouvoir utiliser directement son driver sur le hardware.

Le paramètre ‘host=’ correspond à un identifiant PCI. Cet identifiant est obtenu en regardant la sortie de la commande “lspci”.

-net none -device vfio-pci,host=0c:00.3

Options mémoire pour DPDK

Pour que DPDK fonctionne pleinement dans la VM, il est nécessaire de passer certains paramètres particuliers en terme de configuration mémoire.

-object memory-backend-file,id=mem,size=4G,mem-path=/dev/hugepages,share=on \
    -numa node,memdev=mem -mem-prealloc \

VFIO

VFIO is basically a framework for building userspace drivers.

Introduction to PCI Device Assignment with VFIO

SR-IOV

TODO …

Liens

https://software.intel.com/en-us/articles/configure-vhost-user-multiqueue-for-ovs-with-dpdk

https://wiki.osdev.org/Virtio

un ensemble d’articles de RedHat :

https://www.redhat.com/en/blog/introduction-virtio-networking-and-vhost-net

https://www.redhat.com/en/blog/how-vhost-user-came-being-virtio-networking-and-dpdk

https://www.redhat.com/en/blog/all-you-need-know-about-kvm-userspace

https://www.redhat.com/en/blog/deep-dive-virtio-networking-and-vhost-net

https://www.redhat.com/en/blog/achieving-network-wirespeed-open-standard-manner-introducing-vdpa (SR-IOV et vDPA)

https://www.redhat.com/en/blog/how-vhost-user-came-being-virtio-networking-and-dpdk

https://www.redhat.com/en/blog/hands-vhost-net-do-or-do-not-there-no-try

https://www.redhat.com/en/blog/hands-vhost-user-warm-welcome-dpdk

https://www.redhat.com/en/blog/journey-vhost-users-realm

Mis à jour :

Laisser un commentaire