1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
|
# 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.
GUEST_BOOT_DRIVE_TYPE = ['scsi']
GUEST_SHARED_DRIVE_TYPE = ['scsi']
# 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
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'},
]]
# 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']
|