licenses: Dedicated directory for non Apache files
[vswitchperf.git] / conf / 04_vnf.conf
index ff110d9..e3a4824 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright 2015 Intel Corporation.
+# Copyright 2015-2016 Intel Corporation.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # ############################
 # VNF configuration
 # ############################
-VNF_DIR = 'vnfs/'
+VNF_DIR = os.path.join(ROOT_DIR, 'vnfs/')
 VNF = 'QemuDpdkVhostUser'
+VNF_AFFINITIZATION_ON = True
+
+# ############################
+# Directories, executables and log files
+# ############################
+
+# please see conf/00_common.conf for description of PATHS dictionary
+PATHS['qemu'] = {
+    'type' : 'src',
+    'src': {
+        'path': os.path.join(ROOT_DIR, 'src/qemu/qemu/'),
+        'qemu-system': 'x86_64-softmmu/qemu-system-x86_64'
+    },
+    'bin': {
+        'qemu-system': 'qemu-system-x86_64'
+    }
+}
+
+# log file for qemu
+LOG_FILE_QEMU = 'qemu.log'
+
+# log file for all commands executed on guest(s)
+# multiple guests will result in log files with the guest number appended
+LOG_FILE_GUEST_CMDS = 'guest-cmds.log'
 
 # ############################
 # Guest configuration
 # ############################
+# All configuration options related to a particular VM instance are defined as
+# lists and prefixed with `GUEST_` label. It is essential, that there is enough
+# items in all `GUEST_` options to cover all VM instances involved in the test.
+# In case there is not enough items, then VSPERF will use the first item of
+# particular `GUEST_` option to expand the list to required length. First option
+# can contain macros starting with `#` to generate VM specific values. These
+# macros can be used only for options of `list` or `str` types with `GUEST_`
+# prefix.
+# Following macros are supported:
+#
+# * #VMINDEX - it is replaced by index of VM being executed; This macro is
+#   expanded first, so it can be used inside other macros.
+#
+# * #MAC(mac_address[, step]) - it will iterate given `mac_address` with
+#   optional `step`. In case that step is not defined, then it is set to 1.
+#   It means, that first VM will use the value of `mac_address`, second VM
+#   value of `mac_address` increased by `step`, etc.
+#
+# * #IP(ip_address[, step]) - it will iterate given `ip_address` with optional
+#   step. In case that step is not defined, then it is set to 1.
+#   It means, that first VM will use the value of `ip_address`, second VM
+#   value of `ip_address` increased by `step`, etc.
+#
+# * #EVAL(expression) - it will evaluate given `expression` as python code;
+#   Only simple expressions should be used. Call of the functions is not
+#   supported.
 
 # directory which is shared to QEMU guests. Useful for exchanging files
 # between host and guest, VNF specific share will be created
 # For 2 VNFs you may use ['/tmp/qemu0_share', '/tmp/qemu1_share']
-GUEST_SHARE_DIR = ['/tmp/qemu0_share', '/tmp/qemu1_share']
+GUEST_SHARE_DIR = ['/tmp/qemu0_share']
 
 # location of guest disk image
 # For 2 VNFs you may use ['guest1.img', 'guest2.img']
-GUEST_IMAGE = ['', '']
+GUEST_IMAGE = ['']
 
 # guarding timer for VM start up
 # For 2 VNFs you may use [180, 180]
-GUEST_TIMEOUT = [180, 180]
+GUEST_TIMEOUT = [180]
+
+# Guest images may require different drive types such as ide to mount shared
+# locations and/or boot correctly. You can modify the types here.
+GUEST_BOOT_DRIVE_TYPE = ['scsi']
+GUEST_SHARED_DRIVE_TYPE = ['scsi']
 
 # packet forwarding mode supported by testpmd; Please see DPDK documentation
 # for comprehensive list of modes supported by your version.
@@ -50,77 +105,68 @@ GUEST_TESTPMD_FWD_MODE = 'csum'
 # This configuration option can be overridden by CLI SCALAR option
 # guest_loopback, e.g. --test-params "guest_loopback=l2fwd"
 # For 2 VNFs you may use ['testpmd', 'l2fwd']
-GUEST_LOOPBACK = ['testpmd', 'testpmd']
+GUEST_LOOPBACK = ['testpmd']
 
 # username for guest image
-GUEST_USERNAME = 'root'
+GUEST_USERNAME = ['root']
 
 # password for guest image
-GUEST_PASSWORD = 'root'
+GUEST_PASSWORD = ['root']
 
 # login username prompt for guest image
-GUEST_PROMPT_LOGIN = '.* login:'
+GUEST_PROMPT_LOGIN = ['.* login:']
 
 # login password prompt for guest image
-GUEST_PROMPT_PASSWORD = 'Password: '
+GUEST_PROMPT_PASSWORD = ['Password: ']
 
 # standard prompt for guest image
-GUEST_PROMPT = 'root.*#'
-
-# log file for qemu
-LOG_FILE_QEMU = 'qemu.log'
-
-# log file for all commands executed on guest(s)
-# multiple guests will result in log files with the guest number appended
-LOG_FILE_GUEST_CMDS = 'guest-cmds.log'
-
-# ############################
-# Executables
-# ############################
-
-QEMU_BIN = os.path.join(QEMU_DIR, 'x86_64-softmmu/qemu-system-x86_64')
-
-# For 2 VNFs you may use ['eth0', 'eth2']
-GUEST_NIC1_NAME = ['eth0', 'eth0']
-GUEST_NIC2_NAME = ['eth1', 'eth1']
+GUEST_PROMPT = ['root.*#']
 
-# For 2 VNFs you may use ['00:00:00:00:00:01', '00:00:00:00:00:03']
-GUEST_NET1_MAC = ['00:00:00:00:00:01', '00:00:00:00:00:03']
-GUEST_NET2_MAC = ['00:00:00:00:00:02', '00:00:00:00:00:04']
+# defines the number of NICs configured for each guest, it must be less or equal to
+# the number of NICs configured in GUEST_NICS
+GUEST_NICS_NR = [2]
 
-# For 2 VNFs you may use ['00:04.0', '00:04.0']
-GUEST_NET1_PCI_ADDRESS = ['00:04.0', '00:04.0']
-GUEST_NET2_PCI_ADDRESS = ['00:05.0', '00:05.0']
+# template for guests with 4 NICS, but only GUEST_NICS_NR NICS will be configured at runtime
+GUEST_NICS = [[{'device' : 'eth0', 'mac' : '#MAC(00:00:00:00:00:01,2)', 'pci' : '00:04.0', 'ip' : '#IP(192.168.1.2,4)/24'},
+               {'device' : 'eth1', 'mac' : '#MAC(00:00:00:00:00:02,2)', 'pci' : '00:05.0', 'ip' : '#IP(192.168.1.3,4)/24'},
+               {'device' : 'eth2', 'mac' : '#MAC(cc:00:00:00:00:01,2)', 'pci' : '00:06.0', 'ip' : '#IP(192.168.1.4,4)/24'},
+               {'device' : 'eth3', 'mac' : '#MAC(cc:00:00:00:00:02,2)', 'pci' : '00:07.0', 'ip' : '#IP(192.168.1.5,4)/24'},
+             ]]
 
-GUEST_MEMORY = ['4096', '4096']
+# amount of host memory allocated for each guest
+GUEST_MEMORY = ['2048']
+# number of hugepages configured inside each guest
+GUEST_HUGEPAGES_NR = ['1024']
 
 # test-pmd requires 2 VM cores
-GUEST_SMP = ['2', '2']
+GUEST_SMP = ['2']
 
 # Host cores to use to affinitize the SMP cores of a QEMU instance
 # For 2 VNFs you may use [(4,5), (6, 7)]
-GUEST_CORE_BINDING = [(6, 7), (9, 10)]
+GUEST_CORE_BINDING = [('#EVAL(6+2*#VMINDEX)', '#EVAL(7+2*#VMINDEX)')]
 
 # Queues per NIC inside guest for multi-queue configuration, requires switch
-# multi-queue to be enabled. Set to 0 for disabled.
-GUEST_NIC_QUEUES = 0
-
-GUEST_START_TIMEOUT = 120
-GUEST_OVS_DPDK_DIR = '/root/ovs_dpdk'
-OVS_DPDK_SHARE = '/mnt/ovs_dpdk_share'
-
-# Set the CPU mask for testpmd loopback. To bind to specific guest CPUs use -l
-# GUEST_TESTPMD_CPU_MASK = '-l 0,1'
-GUEST_TESTPMD_CPU_MASK = '-c 0x3'
-
-# Testpmd multi-core config. Leave at 0's for disabled. Will not enable unless
-# GUEST_NIC_QUEUES are > 0. For bi directional traffic NB_CORES must be equal
-# to (RXQ + TXQ).
-GUEST_TESTPMD_NB_CORES = 0
-GUEST_TESTPMD_TXQ = 0
-GUEST_TESTPMD_RXQ = 0
-
-# IP addresses to use for Vanilla OVS PVP testing
+# multi-queue to be enabled for dpdk. Set to 0 for disabled. Can be enabled if
+# using Vanilla OVS without enabling switch multi-queue.
+GUEST_NIC_QUEUES = [0]
+
+# Disable VHost user guest NIC merge buffers by enabling the below setting. This
+# can improve performance when not using Jumbo Frames.
+GUEST_NIC_MERGE_BUFFERS_DISABLE = [True]
+
+# Virtio-Net vhost thread CPU mapping. If using  vanilla OVS with virtio-net,
+# you can affinitize the vhost-net threads by enabling the below setting. There
+# is one vhost-net thread per port per queue so one guest with 2 queues will
+# have 4 vhost-net threads. If more threads are present than CPUs given, the
+# affinitize will overlap CPUs in a round robin fashion.
+VSWITCH_VHOST_NET_AFFINITIZATION = False
+VSWITCH_VHOST_CPU_MAP = [4,5,8,11]
+
+GUEST_START_TIMEOUT = [120]
+GUEST_OVS_DPDK_DIR = ['/root/ovs_dpdk']
+GUEST_OVS_DPDK_SHARE = ['/mnt/ovs_dpdk_share']
+
+# IP addresses to use for Vanilla OVS PXP testing
 # Consider using RFC 2544/3330 recommended IP addresses for benchmark testing.
 # Network: 198.18.0.0/15
 # Netmask: 255.254.0.0
@@ -137,9 +183,25 @@ VANILLA_TGEN_PORT1_MAC = 'AA:BB:CC:DD:EE:FF'
 VANILLA_TGEN_PORT2_IP = '1.1.2.10'
 VANILLA_TGEN_PORT2_MAC = 'AA:BB:CC:DD:EE:F0'
 
-VANILLA_BRIDGE_IP = ['1.1.1.5/16', '1.1.1.6/16']
+GUEST_BRIDGE_IP = ['#IP(1.1.1.5)/16']
 
-VANILLA_NIC1_IP_CIDR = ['192.168.1.2/24', '192.168.1.4/24']
-VANILLA_NIC2_IP_CIDR = ['192.168.1.3/24', '192.168.1.5/24']
+# ############################
+# Guest TESTPMD configuration
+# ############################
 
-VNF_AFFINITIZATION_ON = True
+# packet forwarding mode supported by testpmd; Please see DPDK documentation
+# for comprehensive list of modes supported by your version.
+# e.g. io|mac|mac_retry|macswap|flowgen|rxonly|txonly|csum|icmpecho|...
+# Note: Option "mac_retry" has been changed to "mac retry" since DPDK v16.07
+GUEST_TESTPMD_FWD_MODE = ['csum']
+
+# Set the CPU mask for testpmd loopback. To bind to specific guest CPUs use -l
+# GUEST_TESTPMD_CPU_MASK = ['-l 0,1']
+GUEST_TESTPMD_CPU_MASK = ['-c 0x3']
+
+# Testpmd multi-core config. Leave at 0's for disabled. Will not enable unless
+# GUEST_NIC_QUEUES are > 0. For bi directional traffic NB_CORES must be equal
+# to (RXQ + TXQ).
+GUEST_TESTPMD_NB_CORES = [0]
+GUEST_TESTPMD_TXQ = [0]
+GUEST_TESTPMD_RXQ = [0]