xref: /dpdk/doc/guides/howto/pvp_reference_benchmark.rst (revision 959c84ed059ed2c8db497114f976ca197a14c56b)
179532b35SMaxime Coquelin..  SPDX-License-Identifier: BSD-3-Clause
279532b35SMaxime Coquelin    Copyright 2016 Red Hat, Inc.
358a2551aSMaxime Coquelin
458a2551aSMaxime Coquelin
558a2551aSMaxime Coquelin
658a2551aSMaxime CoquelinPVP reference benchmark setup using testpmd
758a2551aSMaxime Coquelin===========================================
858a2551aSMaxime Coquelin
958a2551aSMaxime CoquelinThis guide lists the steps required to setup a PVP benchmark using testpmd as
1058a2551aSMaxime Coquelina simple forwarder between NICs and Vhost interfaces. The goal of this setup
1158a2551aSMaxime Coquelinis to have a reference PVP benchmark without using external vSwitches (OVS,
1258a2551aSMaxime CoquelinVPP, ...) to make it easier to obtain reproducible results and to facilitate
1358a2551aSMaxime Coquelincontinuous integration testing.
1458a2551aSMaxime Coquelin
1558a2551aSMaxime CoquelinThe guide covers two ways of launching the VM, either by directly calling the
1658a2551aSMaxime CoquelinQEMU command line, or by relying on libvirt. It has been tested with DPDK
1758a2551aSMaxime Coquelinv16.11 using RHEL7 for both host and guest.
1858a2551aSMaxime Coquelin
1958a2551aSMaxime Coquelin
2058a2551aSMaxime CoquelinSetup overview
2158a2551aSMaxime Coquelin--------------
2258a2551aSMaxime Coquelin
2358a2551aSMaxime Coquelin.. _figure_pvp_2nics:
2458a2551aSMaxime Coquelin
2558a2551aSMaxime Coquelin.. figure:: img/pvp_2nics.*
2658a2551aSMaxime Coquelin
2758a2551aSMaxime Coquelin   PVP setup using 2 NICs
2858a2551aSMaxime Coquelin
299c30a6f3SHenry NadeauIn this diagram, each red arrow represents one logical core. This use case
3058a2551aSMaxime Coquelinrequires 6 dedicated logical cores. A forwarding configuration with a single
3158a2551aSMaxime CoquelinNIC is also possible, requiring 3 logical cores.
3258a2551aSMaxime Coquelin
3358a2551aSMaxime Coquelin
3458a2551aSMaxime CoquelinHost setup
3558a2551aSMaxime Coquelin----------
3658a2551aSMaxime Coquelin
3758a2551aSMaxime CoquelinIn this setup, we isolate 6 cores (from CPU2 to CPU7) on the same NUMA
3858a2551aSMaxime Coquelinnode. Two cores are assigned to the VM vCPUs running testpmd and four are
3958a2551aSMaxime Coquelinassigned to testpmd on the host.
4058a2551aSMaxime Coquelin
4158a2551aSMaxime Coquelin
4258a2551aSMaxime CoquelinHost tuning
4358a2551aSMaxime Coquelin~~~~~~~~~~~
4458a2551aSMaxime Coquelin
4558a2551aSMaxime Coquelin#. On BIOS, disable turbo-boost and hyper-threads.
4658a2551aSMaxime Coquelin
4758a2551aSMaxime Coquelin#. Append these options to Kernel command line:
4858a2551aSMaxime Coquelin
4958a2551aSMaxime Coquelin   .. code-block:: console
5058a2551aSMaxime Coquelin
51*959c84edSTudor Brindus      intel_pstate=disable mce=ignore_ce default_hugepagesz=1G hugepagesz=1G hugepages=6 isolcpus=2-7 nohz_full=2-7 iommu=pt intel_iommu=on
5258a2551aSMaxime Coquelin
5358a2551aSMaxime Coquelin#. Disable hyper-threads at runtime if necessary or if BIOS is not accessible:
5458a2551aSMaxime Coquelin
5558a2551aSMaxime Coquelin   .. code-block:: console
5658a2551aSMaxime Coquelin
5758a2551aSMaxime Coquelin      cat /sys/devices/system/cpu/cpu*[0-9]/topology/thread_siblings_list \
5858a2551aSMaxime Coquelin          | sort | uniq \
5958a2551aSMaxime Coquelin          | awk -F, '{system("echo 0 > /sys/devices/system/cpu/cpu"$2"/online")}'
6058a2551aSMaxime Coquelin
6158a2551aSMaxime Coquelin#. Disable NMIs:
6258a2551aSMaxime Coquelin
6358a2551aSMaxime Coquelin   .. code-block:: console
6458a2551aSMaxime Coquelin
6558a2551aSMaxime Coquelin      echo 0 > /proc/sys/kernel/nmi_watchdog
6658a2551aSMaxime Coquelin
6758a2551aSMaxime Coquelin#. Exclude isolated CPUs from the writeback cpumask:
6858a2551aSMaxime Coquelin
6958a2551aSMaxime Coquelin   .. code-block:: console
7058a2551aSMaxime Coquelin
7158a2551aSMaxime Coquelin      echo ffffff03 > /sys/bus/workqueue/devices/writeback/cpumask
7258a2551aSMaxime Coquelin
7358a2551aSMaxime Coquelin#. Isolate CPUs from IRQs:
7458a2551aSMaxime Coquelin
7558a2551aSMaxime Coquelin   .. code-block:: console
7658a2551aSMaxime Coquelin
7758a2551aSMaxime Coquelin      clear_mask=0xfc #Isolate CPU2 to CPU7 from IRQs
7858a2551aSMaxime Coquelin      for i in /proc/irq/*/smp_affinity
7958a2551aSMaxime Coquelin      do
8058a2551aSMaxime Coquelin        echo "obase=16;$(( 0x$(cat $i) & ~$clear_mask ))" | bc > $i
8158a2551aSMaxime Coquelin      done
8258a2551aSMaxime Coquelin
8358a2551aSMaxime Coquelin
8458a2551aSMaxime CoquelinQemu build
8558a2551aSMaxime Coquelin~~~~~~~~~~
8658a2551aSMaxime Coquelin
8758a2551aSMaxime CoquelinBuild Qemu:
8858a2551aSMaxime Coquelin
8958a2551aSMaxime Coquelin    .. code-block:: console
9058a2551aSMaxime Coquelin
9158a2551aSMaxime Coquelin       git clone git://git.qemu.org/qemu.git
9258a2551aSMaxime Coquelin       cd qemu
9358a2551aSMaxime Coquelin       mkdir bin
9458a2551aSMaxime Coquelin       cd bin
9558a2551aSMaxime Coquelin       ../configure --target-list=x86_64-softmmu
9610def6a1SJens Freimann       make
9758a2551aSMaxime Coquelin
9858a2551aSMaxime Coquelin
9958a2551aSMaxime CoquelinDPDK build
10058a2551aSMaxime Coquelin~~~~~~~~~~
10158a2551aSMaxime Coquelin
10279238624SCiara PowerSee :doc:`../linux_gsg/build_dpdk` for details.
10358a2551aSMaxime Coquelin
10458a2551aSMaxime Coquelin
10558a2551aSMaxime CoquelinTestpmd launch
10658a2551aSMaxime Coquelin~~~~~~~~~~~~~~
10758a2551aSMaxime Coquelin
10858a2551aSMaxime Coquelin#. Assign NICs to DPDK:
10958a2551aSMaxime Coquelin
11058a2551aSMaxime Coquelin   .. code-block:: console
11158a2551aSMaxime Coquelin
11258a2551aSMaxime Coquelin      modprobe vfio-pci
11379238624SCiara Power      usertools/dpdk-devbind -b vfio-pci 0000:11:00.0 0000:11:00.1
11458a2551aSMaxime Coquelin
11558a2551aSMaxime Coquelin   .. Note::
11658a2551aSMaxime Coquelin
11758a2551aSMaxime Coquelin      The Sandy Bridge family seems to have some IOMMU limitations giving poor
11858a2551aSMaxime Coquelin      performance results. To achieve good performance on these machines
11958a2551aSMaxime Coquelin      consider using UIO instead.
12058a2551aSMaxime Coquelin
12158a2551aSMaxime Coquelin#. Launch the testpmd application:
12258a2551aSMaxime Coquelin
12358a2551aSMaxime Coquelin   .. code-block:: console
12458a2551aSMaxime Coquelin
12579238624SCiara Power      <build_dir>/app/dpdk-testpmd -l 0,2,3,4,5 --socket-mem=1024 -n 4 \
12658a2551aSMaxime Coquelin          --vdev 'net_vhost0,iface=/tmp/vhost-user1' \
12758a2551aSMaxime Coquelin          --vdev 'net_vhost1,iface=/tmp/vhost-user2' -- \
1288b9bd0efSMoti Haimovsky          --portmask=f -i --rxq=1 --txq=1 \
12958a2551aSMaxime Coquelin          --nb-cores=4 --forward-mode=io
13058a2551aSMaxime Coquelin
13158a2551aSMaxime Coquelin   With this command, isolated CPUs 2 to 5 will be used as lcores for PMD threads.
13258a2551aSMaxime Coquelin
13358a2551aSMaxime Coquelin#. In testpmd interactive mode, set the portlist to obtain the correct port
13458a2551aSMaxime Coquelin   chaining:
13558a2551aSMaxime Coquelin
13658a2551aSMaxime Coquelin   .. code-block:: console
13758a2551aSMaxime Coquelin
13858a2551aSMaxime Coquelin      set portlist 0,2,1,3
13958a2551aSMaxime Coquelin      start
14058a2551aSMaxime Coquelin
14158a2551aSMaxime Coquelin
14258a2551aSMaxime CoquelinVM launch
14358a2551aSMaxime Coquelin~~~~~~~~~
14458a2551aSMaxime Coquelin
14558a2551aSMaxime CoquelinThe VM may be launched either by calling QEMU directly, or by using libvirt.
14658a2551aSMaxime Coquelin
14758a2551aSMaxime CoquelinQemu way
14858a2551aSMaxime Coquelin^^^^^^^^
14958a2551aSMaxime Coquelin
15058a2551aSMaxime CoquelinLaunch QEMU with two Virtio-net devices paired to the vhost-user sockets
15158a2551aSMaxime Coquelincreated by testpmd. Below example uses default Virtio-net options, but options
15258a2551aSMaxime Coquelinmay be specified, for example to disable mergeable buffers or indirect
15358a2551aSMaxime Coquelindescriptors.
15458a2551aSMaxime Coquelin
15558a2551aSMaxime Coquelin   .. code-block:: console
15658a2551aSMaxime Coquelin
15758a2551aSMaxime Coquelin      <QEMU path>/bin/x86_64-softmmu/qemu-system-x86_64 \
15858a2551aSMaxime Coquelin          -enable-kvm -cpu host -m 3072 -smp 3 \
15958a2551aSMaxime Coquelin          -chardev socket,id=char0,path=/tmp/vhost-user1 \
16058a2551aSMaxime Coquelin          -netdev type=vhost-user,id=mynet1,chardev=char0,vhostforce \
16158a2551aSMaxime Coquelin          -device virtio-net-pci,netdev=mynet1,mac=52:54:00:02:d9:01,addr=0x10 \
16258a2551aSMaxime Coquelin          -chardev socket,id=char1,path=/tmp/vhost-user2 \
16358a2551aSMaxime Coquelin          -netdev type=vhost-user,id=mynet2,chardev=char1,vhostforce \
16458a2551aSMaxime Coquelin          -device virtio-net-pci,netdev=mynet2,mac=52:54:00:02:d9:02,addr=0x11 \
16558a2551aSMaxime Coquelin          -object memory-backend-file,id=mem,size=3072M,mem-path=/dev/hugepages,share=on \
16658a2551aSMaxime Coquelin          -numa node,memdev=mem -mem-prealloc \
16758a2551aSMaxime Coquelin          -net user,hostfwd=tcp::1002$1-:22 -net nic \
16858a2551aSMaxime Coquelin          -qmp unix:/tmp/qmp.socket,server,nowait \
16958a2551aSMaxime Coquelin          -monitor stdio <vm_image>.qcow2
17058a2551aSMaxime Coquelin
17158a2551aSMaxime CoquelinYou can use this `qmp-vcpu-pin <https://patchwork.kernel.org/patch/9361617/>`_
17258a2551aSMaxime Coquelinscript to pin vCPUs.
17358a2551aSMaxime Coquelin
17458a2551aSMaxime CoquelinIt can be used as follows, for example to pin 3 vCPUs to CPUs 1, 6 and 7,
17558a2551aSMaxime Coquelinwhere isolated CPUs 6 and 7 will be used as lcores for Virtio PMDs:
17658a2551aSMaxime Coquelin
17758a2551aSMaxime Coquelin   .. code-block:: console
17858a2551aSMaxime Coquelin
17958a2551aSMaxime Coquelin      export PYTHONPATH=$PYTHONPATH:<QEMU path>/scripts/qmp
18058a2551aSMaxime Coquelin      ./qmp-vcpu-pin -s /tmp/qmp.socket 1 6 7
18158a2551aSMaxime Coquelin
18258a2551aSMaxime CoquelinLibvirt way
18358a2551aSMaxime Coquelin^^^^^^^^^^^
18458a2551aSMaxime Coquelin
18558a2551aSMaxime CoquelinSome initial steps are required for libvirt to be able to connect to testpmd's
18658a2551aSMaxime Coquelinsockets.
18758a2551aSMaxime Coquelin
18858a2551aSMaxime CoquelinFirst, SELinux policy needs to be set to permissive, since testpmd is
18958a2551aSMaxime Coquelingenerally run as root (note, as reboot is required):
19058a2551aSMaxime Coquelin
19158a2551aSMaxime Coquelin   .. code-block:: console
19258a2551aSMaxime Coquelin
19358a2551aSMaxime Coquelin      cat /etc/selinux/config
19458a2551aSMaxime Coquelin
19558a2551aSMaxime Coquelin      # This file controls the state of SELinux on the system.
19658a2551aSMaxime Coquelin      # SELINUX= can take one of these three values:
19758a2551aSMaxime Coquelin      #     enforcing  - SELinux security policy is enforced.
19858a2551aSMaxime Coquelin      #     permissive - SELinux prints warnings instead of enforcing.
19958a2551aSMaxime Coquelin      #     disabled   - No SELinux policy is loaded.
20058a2551aSMaxime Coquelin      SELINUX=permissive
20158a2551aSMaxime Coquelin
20258a2551aSMaxime Coquelin      # SELINUXTYPE= can take one of three two values:
20358a2551aSMaxime Coquelin      #     targeted - Targeted processes are protected,
20458a2551aSMaxime Coquelin      #     minimum  - Modification of targeted policy.
20558a2551aSMaxime Coquelin      #                Only selected processes are protected.
20658a2551aSMaxime Coquelin      #     mls      - Multi Level Security protection.
20758a2551aSMaxime Coquelin      SELINUXTYPE=targeted
20858a2551aSMaxime Coquelin
20958a2551aSMaxime Coquelin
21058a2551aSMaxime CoquelinAlso, Qemu needs to be run as root, which has to be specified in
21158a2551aSMaxime Coquelin``/etc/libvirt/qemu.conf``:
21258a2551aSMaxime Coquelin
21358a2551aSMaxime Coquelin   .. code-block:: console
21458a2551aSMaxime Coquelin
21558a2551aSMaxime Coquelin      user = "root"
21658a2551aSMaxime Coquelin
21758a2551aSMaxime CoquelinOnce the domain created, the following snippet is an extract of he most
21858a2551aSMaxime Coquelinimportant information (hugepages, vCPU pinning, Virtio PCI devices):
21958a2551aSMaxime Coquelin
22058a2551aSMaxime Coquelin   .. code-block:: xml
22158a2551aSMaxime Coquelin
22258a2551aSMaxime Coquelin      <domain type='kvm'>
22358a2551aSMaxime Coquelin        <memory unit='KiB'>3145728</memory>
22458a2551aSMaxime Coquelin        <currentMemory unit='KiB'>3145728</currentMemory>
22558a2551aSMaxime Coquelin        <memoryBacking>
22658a2551aSMaxime Coquelin          <hugepages>
22758a2551aSMaxime Coquelin            <page size='1048576' unit='KiB' nodeset='0'/>
22858a2551aSMaxime Coquelin          </hugepages>
22958a2551aSMaxime Coquelin          <locked/>
23058a2551aSMaxime Coquelin        </memoryBacking>
23158a2551aSMaxime Coquelin        <vcpu placement='static'>3</vcpu>
23258a2551aSMaxime Coquelin        <cputune>
23358a2551aSMaxime Coquelin          <vcpupin vcpu='0' cpuset='1'/>
23458a2551aSMaxime Coquelin          <vcpupin vcpu='1' cpuset='6'/>
23558a2551aSMaxime Coquelin          <vcpupin vcpu='2' cpuset='7'/>
23658a2551aSMaxime Coquelin          <emulatorpin cpuset='0'/>
23758a2551aSMaxime Coquelin        </cputune>
23858a2551aSMaxime Coquelin        <numatune>
23958a2551aSMaxime Coquelin          <memory mode='strict' nodeset='0'/>
24058a2551aSMaxime Coquelin        </numatune>
24158a2551aSMaxime Coquelin        <os>
24258a2551aSMaxime Coquelin          <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
24358a2551aSMaxime Coquelin          <boot dev='hd'/>
24458a2551aSMaxime Coquelin        </os>
24558a2551aSMaxime Coquelin        <cpu mode='host-passthrough'>
24658a2551aSMaxime Coquelin          <topology sockets='1' cores='3' threads='1'/>
24758a2551aSMaxime Coquelin          <numa>
24858a2551aSMaxime Coquelin            <cell id='0' cpus='0-2' memory='3145728' unit='KiB' memAccess='shared'/>
24958a2551aSMaxime Coquelin          </numa>
25058a2551aSMaxime Coquelin        </cpu>
25158a2551aSMaxime Coquelin        <devices>
25258a2551aSMaxime Coquelin          <interface type='vhostuser'>
25358a2551aSMaxime Coquelin            <mac address='56:48:4f:53:54:01'/>
25458a2551aSMaxime Coquelin            <source type='unix' path='/tmp/vhost-user1' mode='client'/>
25558a2551aSMaxime Coquelin            <model type='virtio'/>
25658a2551aSMaxime Coquelin            <driver name='vhost' rx_queue_size='256' />
25758a2551aSMaxime Coquelin            <address type='pci' domain='0x0000' bus='0x00' slot='0x10' function='0x0'/>
25858a2551aSMaxime Coquelin          </interface>
25958a2551aSMaxime Coquelin          <interface type='vhostuser'>
26058a2551aSMaxime Coquelin            <mac address='56:48:4f:53:54:02'/>
26158a2551aSMaxime Coquelin            <source type='unix' path='/tmp/vhost-user2' mode='client'/>
26258a2551aSMaxime Coquelin            <model type='virtio'/>
26358a2551aSMaxime Coquelin            <driver name='vhost' rx_queue_size='256' />
26458a2551aSMaxime Coquelin            <address type='pci' domain='0x0000' bus='0x00' slot='0x11' function='0x0'/>
26558a2551aSMaxime Coquelin          </interface>
26658a2551aSMaxime Coquelin        </devices>
26758a2551aSMaxime Coquelin      </domain>
26858a2551aSMaxime Coquelin
26958a2551aSMaxime Coquelin
27058a2551aSMaxime CoquelinGuest setup
27158a2551aSMaxime Coquelin-----------
27258a2551aSMaxime Coquelin
27358a2551aSMaxime Coquelin
27458a2551aSMaxime CoquelinGuest tuning
27558a2551aSMaxime Coquelin~~~~~~~~~~~~
27658a2551aSMaxime Coquelin
27758a2551aSMaxime Coquelin#. Append these options to the Kernel command line:
27858a2551aSMaxime Coquelin
27958a2551aSMaxime Coquelin   .. code-block:: console
28058a2551aSMaxime Coquelin
281*959c84edSTudor Brindus      default_hugepagesz=1G hugepagesz=1G hugepages=1 intel_iommu=on iommu=pt isolcpus=1,2 nohz_full=1,2
28258a2551aSMaxime Coquelin
28358a2551aSMaxime Coquelin#. Disable NMIs:
28458a2551aSMaxime Coquelin
28558a2551aSMaxime Coquelin   .. code-block:: console
28658a2551aSMaxime Coquelin
28758a2551aSMaxime Coquelin      echo 0 > /proc/sys/kernel/nmi_watchdog
28858a2551aSMaxime Coquelin
28958a2551aSMaxime Coquelin#. Exclude isolated CPU1 and CPU2 from the writeback cpumask:
29058a2551aSMaxime Coquelin
29158a2551aSMaxime Coquelin   .. code-block:: console
29258a2551aSMaxime Coquelin
29358a2551aSMaxime Coquelin      echo 1 > /sys/bus/workqueue/devices/writeback/cpumask
29458a2551aSMaxime Coquelin
29558a2551aSMaxime Coquelin#. Isolate CPUs from IRQs:
29658a2551aSMaxime Coquelin
29758a2551aSMaxime Coquelin   .. code-block:: console
29858a2551aSMaxime Coquelin
29958a2551aSMaxime Coquelin      clear_mask=0x6 #Isolate CPU1 and CPU2 from IRQs
30058a2551aSMaxime Coquelin      for i in /proc/irq/*/smp_affinity
30158a2551aSMaxime Coquelin      do
30258a2551aSMaxime Coquelin        echo "obase=16;$(( 0x$(cat $i) & ~$clear_mask ))" | bc > $i
30358a2551aSMaxime Coquelin      done
30458a2551aSMaxime Coquelin
30558a2551aSMaxime Coquelin
30658a2551aSMaxime CoquelinDPDK build
30758a2551aSMaxime Coquelin~~~~~~~~~~
30858a2551aSMaxime Coquelin
30979238624SCiara PowerSee :doc:`../linux_gsg/build_dpdk` for details.
31058a2551aSMaxime Coquelin
31158a2551aSMaxime Coquelin
31258a2551aSMaxime CoquelinTestpmd launch
31358a2551aSMaxime Coquelin~~~~~~~~~~~~~~
31458a2551aSMaxime Coquelin
31558a2551aSMaxime CoquelinProbe vfio module without iommu:
31658a2551aSMaxime Coquelin
31758a2551aSMaxime Coquelin   .. code-block:: console
31858a2551aSMaxime Coquelin
31958a2551aSMaxime Coquelin      modprobe -r vfio_iommu_type1
32058a2551aSMaxime Coquelin      modprobe -r vfio
32158a2551aSMaxime Coquelin      modprobe  vfio enable_unsafe_noiommu_mode=1
32258a2551aSMaxime Coquelin      cat /sys/module/vfio/parameters/enable_unsafe_noiommu_mode
32358a2551aSMaxime Coquelin      modprobe vfio-pci
32458a2551aSMaxime Coquelin
32558a2551aSMaxime CoquelinBind the virtio-net devices to DPDK:
32658a2551aSMaxime Coquelin
32758a2551aSMaxime Coquelin   .. code-block:: console
32858a2551aSMaxime Coquelin
32979238624SCiara Power      usertools/dpdk-devbind.py -b vfio-pci 0000:00:10.0 0000:00:11.0
33058a2551aSMaxime Coquelin
33158a2551aSMaxime CoquelinStart testpmd:
33258a2551aSMaxime Coquelin
33358a2551aSMaxime Coquelin   .. code-block:: console
33458a2551aSMaxime Coquelin
33579238624SCiara Power      <build_dir>/app/dpdk-testpmd -l 0,1,2 --socket-mem 1024 -n 4 \
33658a2551aSMaxime Coquelin          --proc-type auto --file-prefix pg -- \
33758a2551aSMaxime Coquelin          --portmask=3 --forward-mode=macswap --port-topology=chained \
3388b9bd0efSMoti Haimovsky          --disable-rss -i --rxq=1 --txq=1 \
33958a2551aSMaxime Coquelin          --rxd=256 --txd=256 --nb-cores=2 --auto-start
34058a2551aSMaxime Coquelin
34158a2551aSMaxime CoquelinResults template
34258a2551aSMaxime Coquelin----------------
34358a2551aSMaxime Coquelin
34458a2551aSMaxime CoquelinBelow template should be used when sharing results:
34558a2551aSMaxime Coquelin
34658a2551aSMaxime Coquelin   .. code-block:: none
34758a2551aSMaxime Coquelin
34858a2551aSMaxime Coquelin      Traffic Generator: <Test equipment (e.g. IXIA, Moongen, ...)>
34958a2551aSMaxime Coquelin      Acceptable Loss: <n>%
35058a2551aSMaxime Coquelin      Validation run time: <n>min
35158a2551aSMaxime Coquelin      Host DPDK version/commit: <version, SHA-1>
35258a2551aSMaxime Coquelin      Guest DPDK version/commit: <version, SHA-1>
35358a2551aSMaxime Coquelin      Patches applied: <link to patchwork>
35458a2551aSMaxime Coquelin      QEMU version/commit: <version>
35558a2551aSMaxime Coquelin      Virtio features: <features (e.g. mrg_rxbuf='off', leave empty if default)>
35658a2551aSMaxime Coquelin      CPU: <CPU model>, <CPU frequency>
35758a2551aSMaxime Coquelin      NIC: <NIC model>
35858a2551aSMaxime Coquelin      Result: <n> Mpps
359