From 11173c99a4416de8970fe67cef4fff2d9119ef14 Mon Sep 17 00:00:00 2001 From: Peter Mikus Date: Fri, 3 May 2019 06:32:17 +0000 Subject: [PATCH] Update KVM methodology Change-Id: I8be9b9295b691a1ec4b810e3a1255ad1bc6947ab Signed-off-by: Peter Mikus --- .../methodology_kvm_vms_vhost_user.rst | 78 ++++++++++++++++++---- docs/testing_in_vagrant.rst | 9 ++- 2 files changed, 70 insertions(+), 17 deletions(-) diff --git a/docs/report/introduction/methodology_kvm_vms_vhost_user.rst b/docs/report/introduction/methodology_kvm_vms_vhost_user.rst index 299f708827..76a6baa8e6 100644 --- a/docs/report/introduction/methodology_kvm_vms_vhost_user.rst +++ b/docs/report/introduction/methodology_kvm_vms_vhost_user.rst @@ -1,20 +1,10 @@ KVM VMs vhost-user ------------------ -QEMU is used for VPP-VM testing enviroment. By default, standard QEMU version -preinstalled from OS repositories is used on VIRL/vpp_device functional testing -(qemu-2.11.x for Ubuntu 18.04, qemu-2.5.0 for Ubuntu 16.04). -In CSIT setup DUTs have small VM image `/var/lib/vm/vhost-nested.img`. QEMU -binary can be adjusted in global settings. VM image must have installed at least -qemu-guest-agent, sshd, bridge-utils, VirtIO support and Testpmd/L3fwd -application. Username/password for the VM must be cisco/cisco and -NOPASSWD sudo access. The interface naming is based on driver (management -interface type is Intel E1000), all E1000 interfaces will be named mgmt and -all VirtIO interfaces will be named virtio. In VM -"/etc/init.d/qemu-guest-agent" you must set "TRANSPORT=isa-serial:/dev/ttyS1" -because ttyS0 is used by serial console and ttyS1 is dedicated for -qemu-guest-agent in QEMU setup. There is python library for QEMU setup, start -and some utilities "resources/libraries/python/QemuUtils.py" +QEMU is used for vhost testing enviroment. By default, standard QEMU version +preinstalled from OS repositories is used (qemu-2.11.1 for Ubuntu 18.04, +qemu-2.5.0 for Ubuntu 16.04) and the path to the QEMU binary can be adjusted +in `Constants.py`. FD.io CSIT performance lab is testing VPP vhost with KVM VMs using following environment settings: @@ -35,3 +25,63 @@ following environment settings: throughput) and same test measurements repeatability, by making VPP and VM data plane threads less susceptible to other Linux OS system tasks hijacking CPU cores running those data plane threads. + +CSIT does support two types VM definitions: Image or Kernel. + +Image VM +~~~~~~~~ + +CSIT can use a pre-created VM image. The path to image can be adjusted in +`Constants.py`. For convenience and full compatibility CSIT repository contains +a set of scripts to prepare `Built-root `_ based +embedded Linux image with all the dependencies needed to run DPDK testpmd, DPDK +l3fwd, Linux bridge or Linux IPv4 forwarding. + +Built-root was chosen for a VM image to be lightweight and booting time +should not impact tests duration. + +VM image must have installed at least qemu-guest-agent, sshd, bridge-utils, +VirtIO support and DPDK Testpmd/L3fwd application. Username/password for the VM +must be cisco/cisco and NOPASSWD sudo access. The interface naming is based on +driver (management interface type is Intel E1000), all E1000 interfaces will be +named mgmt and all VirtIO interfaces will be named virtio. In VM +"/etc/init.d/qemu-guest-agent" must be set to "TRANSPORT=isa-serial:/dev/ttyS1" +because ttyS0 is used by serial console and ttyS1 is dedicated for +qemu-guest-agent in QEMU setup. + +Kernel VM +~~~~~~~~~ + +As an alternative to image VM, CSIT can use a kernel KVM image as a boot kernel. +This option allows better configurability of what application is running in VM +userspace. As a filesystem root9p is used which allows to map the host OS +filesystem as read only guest OS filesystem. + +Example of custom init script for the kernel VM: + +:: + #!/bin/bash + mount -t sysfs -o "nodev,noexec,nosuid" sysfs /sys + mount -t proc -o "nodev,noexec,nosuid" proc /proc + mkdir /dev/pts + mkdir /dev/hugepages + mount -t devpts -o "rw,noexec,nosuid,gid=5,mode=0620" devpts /dev/pts || true + mount -t tmpfs -o "rw,noexec,nosuid,size=10%,mode=0755" tmpfs /run + mount -t tmpfs -o "rw,noexec,nosuid,size=10%,mode=0755" tmpfs /tmp + mount -t hugetlbfs -o "rw,relatime,pagesize=2M" hugetlbfs /dev/hugepages + echo 0000:00:06.0 > /sys/bus/pci/devices/0000:00:06.0/driver/unbind + echo 0000:00:07.0 > /sys/bus/pci/devices/0000:00:07.0/driver/unbind + echo uio_pci_generic > /sys/bus/pci/devices/0000:00:06.0/driver_override + echo uio_pci_generic > /sys/bus/pci/devices/0000:00:07.0/driver_override + echo 0000:00:06.0 > /sys/bus/pci/drivers/uio_pci_generic/bind + echo 0000:00:07.0 > /sys/bus/pci/drivers/uio_pci_generic/bind + $vnf_bin + poweroff -f + +The `$vnf_bin` variable is replaced, during runtime by the QemuUtils libraries, +by the path to NF binary and its parameters. This allows CSIT to run the +applications installed on host OS, for example VPP of the same version as +running on host OS. + +Kernel KVM image must be available on host filesystem as a prerequisite. +The path to kernel image is defined in `Constants.py`. \ No newline at end of file diff --git a/docs/testing_in_vagrant.rst b/docs/testing_in_vagrant.rst index 60b4cc553e..3612ba1e66 100644 --- a/docs/testing_in_vagrant.rst +++ b/docs/testing_in_vagrant.rst @@ -1,13 +1,16 @@ Running CSIT locally in Vagrant ------------------------------- -1. Download and install latest virtualbox from `official page `_ +1. Download and install latest virtualbox from `official page + `_ To verify the installation, run VBoxManage: - - on windows: "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" --version + - on windows: + "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" --version - on nix: VBoxManage --version You should see virtualbox manager version printed, eg: 6.0.0r127566 -2. Download and install latest vagrant `from official page `_ +2. Download and install latest vagrant `from official page + `_ To verify the installtion, run: vagrant -v You should see vagrant version printed, eg: Vagrant 2.2.2 -- 2.16.6