# 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. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ############################ # VNF configuration # ############################ 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'] # location of guest disk image # For 2 VNFs you may use ['guest1.img', 'guest2.img'] GUEST_IMAGE = [''] # guarding timer for VM start up # For 2 VNFs you may use [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. # Default setting to ide to support qemu version 3.1.1. GUEST_BOOT_DRIVE_TYPE = ['ide'] GUEST_SHARED_DRIVE_TYPE = ['ide'] # guest loopback application method; supported options are: # 'testpmd' - testpmd from dpdk will be built and used # 'l2fwd' - l2fwd module provided by Huawei will be built and used # 'linux_bridge' - linux bridge will be configured # 'buildin' - nothing will be configured by vsperf; VM image must # ensure traffic forwarding between its interfaces # 'clean' - nothing will be configured, but automatic login will # be performed; Useful for stepdriven testcases. # For 2 VNFs you may use ['testpmd', 'l2fwd'] GUEST_LOOPBACK = ['testpmd'] # guest driver binding option; support options are: # 'igb_uio_from_src' - build igb_uio driver from downloaded source files # 'uio_pci_generic' - use uio_pci_generic driver # 'vfio_no_iommu' - use unsafe vfio driver without iommu (requires # image with supported kernel 4.5 or greater and # dpdk 16.04 or greater. VSPerf vloop image does not # support this mode. GUEST_DPDK_BIND_DRIVER = ['igb_uio_from_src'] # username for guest image GUEST_USERNAME = ['root'] # password for guest image GUEST_PASSWORD = ['root'] # login username prompt for guest image GUEST_PROMPT_LOGIN = ['.* login:'] # login password prompt for guest image GUEST_PROMPT_PASSWORD = ['Password: '] # standard prompt for guest image GUEST_PROMPT = ['root.*#'] # 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] # template for guests with 4 NICS, but only GUEST_NICS_NR NICS will be configured at runtime # With qemu verison 3.1.1 the PCI assignments are starting from 00.03.0. # TODO: Need a better approach for pci configuration. Currently its based on what qemu-system-x86_64 assigns. # One option is to use the pci configuration as one of the parameters of the qemu-system-x86_64 command. GUEST_NICS = [[{'device' : 'eth0', 'mac' : '#MAC(00:00:00:00:00:01,2)', 'pci' : '00:03.0', 'ip' : '#IP(192.168.1.2,4)/24'}, {'device' : 'eth1', 'mac' : '#MAC(00:00:00:00:00:02,2)', 'pci' : '00:04.0', 'ip' : '#IP(192.168.1.3,4)/24'}, {'device' : 'eth2', 'mac' : '#MAC(cc:00:00:00:00:01,2)', 'pci' : '00:05.0', 'ip' : '#IP(192.168.1.4,4)/24'}, {'device' : 'eth3', 'mac' : '#MAC(cc:00:00:00:00:02,2)', 'pci' : '00:06.0', 'ip' : '#IP(192.168.1.5,4)/24'}, ]] # 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 # It is also possible to configure GUEST's CPU topology, # e.g. GUEST_SMP = ["sockets=1,cores=2"] GUEST_SMP = ['2'] # cpu features to the guest, default options provided to pass all available # host processor features to the guest. Also tsc deadline timer for guest, # the guest PMU, the invariant TSC options can be provided as well. GUEST_CPU_OPTIONS = ['host,migratable=off'] # 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 = [('#EVAL(6+2*#VMINDEX)', '#EVAL(7+2*#VMINDEX)')] # pin guest vCPU threads to another pCPU core. This reduces the noise from qemu # housekeeping threads. By default the GUEST_THREAD_BINDING will be none. GUEST_THREAD_BINDING = [ None ] # Queues per NIC inside guest for multi-queue configuration, requires switch # 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 # Broadcast: 198.19.255.255 # First IP: 198.18.0.1 # Last IP: 198.19.255.254 # Hosts: 131070 # # ARP entries for the IXIA ports and the bridge you are using: VANILLA_TGEN_PORT1_IP = '1.1.1.10' 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' GUEST_BRIDGE_IP = ['#IP(1.1.1.5)/16'] # ############################ # Guest TESTPMD configuration # ############################ # set of configuration parameters, which will be passed to the testpmd # executed inside the guest # Note: Testpmd must be executed in interactive mode. It means, that # VSPERF won't work correctly if '-i' will be removed. GUEST_TESTPMD_PARAMS = ['-c 0x3 -n 4 --socket-mem 512 -- ' '--burst=64 -i '] # 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'] # map queue stats to separate regs to verify MQ functionality # setting this from testpmd command line prameters since DPDK 18.11 does not # work as expected so we have to set this inside testpmd i.e. to set rx queue # 2 on port 0 to mapping 5 add: "rx 0 2 5" # Please see DPDK documentation to get more information how to set stat_qmap # (https://doc.dpdk.org/guides/testpmd_app_ug/testpmd_funcs.html) GUEST_QUEUE_STATS_MAPPING = []