NFVBENCH-103 Add --hypervisor cli options and fix vm placement for multi-chain
[nfvbench.git] / nfvbench / cfg.default.yaml
1 #
2 # NFVbench default configuration file
3 #
4 # This configuration file is ALWAYS loaded by NFVbench and should never be modified by users.
5 # To specify your own property values, always define them in a separate config file
6 # and pass that file to the script using -c or --config <file>
7 # Property values in that config file will override the default values in the current file
8 #
9 ---
10 # IMPORTANT CUSTOMIZATION NOTES
11 # There are roughly 2 types of NFVbench config based on the OpenStack encaps used:
12 # - VLAN (OVS, OVS-DPDK, ML2/VPP)
13 # Many of the fields to customize are relevant to only 1 of the 2 encaps
14 # These will be clearly labeled "VxLAN only" or "VLAN only"
15 # Fields that are not applicable will not be used by NFVbench and can be left empty
16 #
17 # All fields are applicable to all encaps/traffic generators unless explicitly marked otherwise.
18 # Fields that can be over-ridden at the command line are marked with the corresponding
19 # option, e.g. "--interval"
20
21
22 # The OpenStack openrc file to use - must be a valid full pathname. If running
23 # in a container, this path must be valid in the container.
24 #
25 # The only case where this field can be empty is when measuring a system that does not run
26 # OpenStack or when OpenStack APIs are not accessible or OpenStack APis use is not
27 # desirable. In that case the EXT service chain must be used.
28 openrc_file:
29
30 # Forwarder to use in nfvbenchvm image. Available options: ['vpp', 'testpmd']
31 vm_forwarder: testpmd
32
33 # By default (empty) NFVbench will try to locate a VM image file
34 # from the package root directory named "nfvbench-<version>.qcow2" and
35 # upload that file. The image name will be "nfvbench-<version>"
36 # This can be overridden by specifying here a pathname of a file
37 # that follows the same naming convention.
38 # In most cases, this field should be left empty as the packaging should
39 # include the proper VM image file
40 vm_image_file:
41
42 # Name of the flavor to use for the loopback VMs
43 #
44 # If the provided name is an exact match to a flavor name known by OpenStack
45 # (as shown from 'nova flavor-list'), that flavor will be reused.
46 # Otherwise, a new flavor will be created with attributes listed below.
47 flavor_type: 'nfvbench.medium'
48
49 # Custom flavor attributes
50 flavor:
51   # Number of vCPUs for the flavor
52   vcpus: 2
53   # Memory for the flavor in MB
54   ram: 4096
55   # Size of local disk in GB
56   disk: 0
57   # metadata are supported and can be added if needed, optional
58   # note that if your openstack does not have NUMA optimization
59   # (cpu pinning and huge pages)
60   # you must comment out extra_specs completely otherwise
61   # loopback VM creation will fail
62   extra_specs:
63       "hw:cpu_policy": dedicated
64       "hw:mem_page_size": large
65
66 # Name of the availability zone to use for the test VMs
67 # Must be one of the zones listed by 'nova availability-zone-list'
68 # availability_zone: 'nova'
69 availability_zone:
70 # To force placement on a given hypervisor, set the name here
71 # (if multiple names are provided, the first will be used)
72 # Leave empty to let openstack pick the hypervisor
73 compute_nodes:
74
75 # Type of service chain to run, possible options are PVP, PVVP and EXT
76 # PVP - port to VM to port
77 # PVVP - port to VM to VM to port
78 # EXT - external chain used only for running traffic and checking traffic generator counters,
79 #       all other parts of chain must be configured manually
80 # Can be overriden by --service-chain
81 service_chain: 'PVP'
82
83 # Total number of service chains, every chain has own traffic stream
84 # Can be overriden by --service-chain-count
85 service_chain_count: 1
86
87 # Specifies if all chains share the same right/left/middle networks
88 service_chain_shared_net: false
89
90 # Total number of traffic flows for all chains and directions generated by the traffic generator.
91 # Minimum is '2 * service_chain_count', it is automatically adjusted if too small
92 # value was configured. Must be even.
93 # Every flow has packets with different IPs in headers
94 # Can be overriden by --flow-count
95 flow_count: 10000
96
97 # set to true if service chains should use SRIOV
98 # This requires SRIOV to be available on compute nodes
99 sriov: false
100
101 # Perform port to port loopback (direct or through switch)
102 # Should be used with EXT service chain and no ARP (no_arp: true)
103 # When enabled, the vlans property must contain the same VLAN id for all chains.
104 # Can be overriden by --l2-loopback
105 l2_loopback: false
106
107 # Resources created by NFVbench will not be removed
108 # Can be overriden by --no-cleanup
109 no_cleanup: false
110
111 # Configuration for traffic generator
112 traffic_generator:
113     # Name of the traffic generator, only for informational purposes
114     host_name: 'nfvbench_tg'
115     # this is the default traffic generator profile to use
116     # the name must be defined under generator_profile
117     # you can override the traffic generator to use using the
118     # -g or --traffic-gen option at the command line
119     default_profile: trex-local
120
121     # IP addresses for L3 traffic.
122     # This section describes the addresses to use to fill in the UDP packets sent by the
123     # traffic generator. If you VNFs are L2 forwarders, these fields below do not need to change.
124     # If your VNFs are L3 routers, the fields below must match the static routes in your VNFs
125     # so that UDP packets can be routed back to the peer port of the traffic generator.
126
127     # All of the IPs are used as base for IP sequence computed based on chain or flow count.
128     # (sim-devices-left)---(tg-gateway-left)---(vnf-left)- ...
129     #                                      -(vnf-right)---(tg-gateway-right)---(sim-devices-right)
130     #
131     # `ip_addrs` base IPs used as src and dst in packet header, quantity depends on flow count
132     #            these are used for addressing virtual devices simulated by the traffic generator
133     #            and be a different subnet than tg_gateway_ip_addrs and gateway_ip_addrs
134     # `ip_addrs_step`: step for generating IP sequence. Use "random" for random patterns, default is 0.0.0.1.
135     ip_addrs: ['10.0.0.0/8', '20.0.0.0/8']
136     ip_addrs_step: 0.0.0.1
137     # `tg_gateway_ip_addrs` base IP for traffic generator ports in the left and right networks to the VNFs
138     #                       chain count consecutive IP addresses spaced by tg_gateway_ip_addrs_step will be used
139     # `tg_gateway_ip_addrs__step`: step for generating traffic generator gateway sequences. default is 0.0.0.1
140     tg_gateway_ip_addrs: ['1.1.0.100', '2.2.0.100']
141     tg_gateway_ip_addrs_step: 0.0.0.1
142     # `gateway_ip_addrs`: base IPs of VNF router gateways (left and right), quantity used depends on chain count
143     #                     must correspond to the public IP on the left and right networks
144     #                     for each left-most and right-most VNF of every chain.
145     #                     must be the same subnet but not same IP as tg_gateway_ip_addrs.
146     #                     chain count consecutive IP addresses spaced by gateway_ip_addrs_step will be used
147     # `gateway_ip_addrs_step`: step for generating router gateway sequences. default is 0.0.0.1
148     gateway_ip_addrs: ['1.1.0.2', '2.2.0.2']
149     gateway_ip_addrs_step: 0.0.0.1
150     # `udp_src_port`: the source port for sending UDP traffic, default is picked by TRex (53)
151     # `udp_dst_port`: the destination port for sending UDP traffic, default is picked by TRex (53)
152     udp_src_port:
153     udp_dst_port:
154
155     # L2 ADDRESSING OF UDP PACKETS
156     # Lists of dest MAC addresses to use on each traffic generator port (one dest MAC per chain)
157     # Leave empty for PVP, PVVP, EXT with ARP
158     # Only used when `service_chain` is EXT and `no_arp` is true.
159     #   - If both lists are empty the far end MAC of the traffic generator will be used for left and right
160     #     (this is typicaly used to loop back on the first hop switch or using a loopback cable)
161     #   - The length of each list must match the number of chains being used!
162     #   - The index of each list must correspond to the chain index to ensure proper pairing.
163     #   - Below is an example of using two chains:
164     #     - mac_addrs_left: ['00:00:00:00:01:00', '00:00:00:00:02:00']
165     #     - mac_addrs_right: ['00:00:00:00:01:01', '00:00:00:00:02:01']
166     #     UDP packets sent on port 0 will use dest MAC '00:00:00:00:01:00' for chain #0 and
167     #                                         dest MAC '00:00:00:00:02:00' for chain #1
168     #     UDP packets sent on port 1 will use dest MAC '00:00:00:00:01:01' for chain #0 and
169     #                                         dest MAC '00:00:00:00:02:01' for chain #1
170     #     It is expected that the looping device (L2 forwarder) will rewrite the src and dst MAC
171     #     of the looping UDP packet so that it can reach back to the peer port of the traffic
172     #     generator.
173     #
174     mac_addrs_left:
175     mac_addrs_right:
176
177     # Traffic Generator Profiles
178     # In case you have multiple testbeds or traffic generators,
179     # you can define one traffic generator profile per testbed/traffic generator.
180     # In most cases you only need to fill in the pci address for the 2 ports used by the
181     # traffic generator and leave all other fields unchanged
182     #
183     # Generator profiles are listed in the following format:
184     # `name`: Traffic generator profile name (use a unique name, no space or special character)
185     #         DFo not change this field
186     # `tool`: Traffic generator tool to be used (currently supported is `TRex`).
187     #         Do not change this field
188     # `ip`: IP address of the traffic generator.
189     #       The default loopback address is used when the traffic generator runs on the same host
190     #       as NFVbench.
191     # `cores`: Specify the number of cores for running the TRex traffic generator.
192     #          ONLY applies to trex-local.
193     # `software_mode`: Advice TRex to use software mode which provides the best compability. But
194     #                  note that TRex will not use any hardware acceleration technology under
195     #                  software mode, therefore the performance of TRex will be significantly
196     #                  lower. ONLY applies to trex-local.
197     #                  Recommended to leave the default value (false)
198     # `interfaces`: Configuration of traffic generator interfaces.
199     # `interfaces.port`: The port of the traffic generator to be used (leave as 0 and 1 resp.)
200     # `interfaces.switch_port`: Leave empty (deprecated)
201     # `interfaces.pci`: The PCI address of the intel NIC interface associated to this port
202     #                   This field is required and cannot be empty
203     #                   Use lspci to list the PCI address of all devices
204     #                   Example of value: "0000:5e:00.0"
205     # `intf_speed`: The speed of the interfaces used by the traffic generator (per direction).
206     #               Empty value (default) to use the speed discovered by the traffic generator.
207     #               Recommended to leave this field empty.
208     #               Do not use unless you want to override the speed discovered by the
209     #               traffic generator. Expected format: 10Gbps
210     #
211     generator_profile:
212         - name: trex-local
213           tool: TRex
214           ip: 127.0.0.1
215           cores: 3
216           software_mode: false
217           interfaces:
218             - port: 0
219               pci:
220               switch_port:
221             - port: 1
222               pci:
223               switch_port:
224           intf_speed:
225
226 # -----------------------------------------------------------------------------
227 # These variables are not likely to be changed
228
229 # Number of seconds to wait for VMs to pass traffic in both directions
230 check_traffic_time_sec: 200
231
232 # General retry count
233 generic_retry_count: 100
234
235 # General poll period
236 generic_poll_sec: 2
237
238 # name of the loop VM
239 loop_vm_name: 'nfvbench-loop-vm'
240
241 # Default names, subnets and CIDRs for PVP/PVVP networks
242 # If a network with given name already exists it will be reused.
243 # - PVP only uses left and right
244 # - PVVP uses left, middle and right
245 # - for EXT chains, this structure is not relevant - refer to external_networks
246 # Otherwise a new internal network will be created with that name, subnet and CIDR.
247 #
248 # segmentation_id can be set to enforce a specific VLAN id - by default (empty) the VLAN id
249 #                 will be assigned by Neutron.
250 #                 Must be unique for each network
251 # physical_network can be set to pick a specific phsyical network - by default (empty) the
252 #                   default physical network will be picked
253 # In the case of SR-IOV, both physical_network and segmentation ID must be provided
254 # For example to setup PVP using 2 different SR-IOV ports, you must put the appropriate physnet
255 # names under left.physical_network and right.physical_network.
256 # Example of override configuration to force PVP to run on 2 SRIOV ports (phys_sriov0 and phys_sriov1)
257 # using VLAN ID 2000 and 2001:
258 # internal_networks:
259 #    left:
260 #        segmentation_id: 2000
261 #        physical_network: phys_sriov0
262 #    right:
263 #        segmentation_id: 2001
264 #        physical_network: phys_sriov1
265
266 internal_networks:
267     left:
268         name: 'nfvbench-lnet'
269         subnet: 'nfvbench-lsubnet'
270         cidr: '192.168.1.0/24'
271         network_type: 'vlan'
272         segmentation_id:
273         physical_network:
274     right:
275         name: 'nfvbench-rnet'
276         subnet: 'nfvbench-rsubnet'
277         cidr: '192.168.2.0/24'
278         network_type: 'vlan'
279         segmentation_id:
280         physical_network:
281     middle:
282         name: 'nfvbench-mnet'
283         subnet: 'nfvbench-msubnet'
284         cidr: '192.168.3.0/24'
285         network_type: 'vlan'
286         segmentation_id:
287         physical_network:
288
289 # In the scenario of PVVP + SRIOV, there is choice of how the traffic will be
290 # handled in the middle network. The default (false) will use vswitch, while
291 # SRIOV can be used by toggling below setting.
292 use_sriov_middle_net: false
293
294 # EXT chain only. Prefix names of edge networks which will be used to send traffic via traffic generator.
295 #
296 # If service_chain_shared_net is true, the left and right networks must pre-exist and match exactly by name.
297 #
298 # If service_chain_shared_net is false, each chain must have its own pre-existing left and right networks.
299 # An index will be appended to each network name to form the final name:
300 # ext-lnet0 ext-rnet0 for chain #0
301 # ext-lnet1 ext-rnet1 for chain #1
302 # etc...
303 external_networks:
304     left: 'ext-lnet'
305     right: 'ext-rnet'
306
307 # Use 'true' to enable VLAN tagging of packets generated and sent by the traffic generator
308 # Leave empty or set to false if you do not want the traffic generator to insert the VLAN tag (this is
309 # needed for example if VLAN tagging is enabled on switch (access mode) or if you want to hook
310 # directly to a NIC).
311 # By default is set to true (which is the nominal use case with TOR and trunk mode to Trex ports)
312 vlan_tagging: true
313
314 # Used only in the case of EXT chain and no openstack to specify the VLAN IDs to use.
315 # This property is ignored when OpenStakc is used or in the case of l2-loopback.
316 # If OpenStack is used leave the list empty, VLAN IDs are retrieved from OpenStack networks using Neutron API.
317 # If networks are shared across all chains (service_chain_shared_net=true), the list should have exactly 2 values
318 # If networks are not shared across chains (service_chain_shared_net=false), the list should have
319 # 2 list of vlan IDs
320 # In the special case of l2-loopback the list should have the same VLAN id for all chains
321 # Examples:
322 #   [1998, 1999] left network uses vlan 1998 right network uses vlan 1999
323 #   [[1,2],[3,4]] chain 0 left vlan 1, right vlan 2 - chain 1 left vlan 3 right vlan 4
324 #   [1010, 1010] same VLAN id with l2-loopback enabled
325 #
326 vlans: []
327
328 # ARP is used to discover the MAC address of VNFs that run L3 routing.
329 # Used only with EXT chain.
330 # False (default): ARP requests are sent to find out dest MAC addresses.
331 # True: do not send ARP but use provisioned dest macs instead
332 #       (see mac_addrs_left and mac_addrs_right)
333 no_arp: false
334
335 # Traffic Profiles
336 # You can add here more profiles as needed
337 # `l2frame_size` can be specified in any none zero integer value to represent the size in bytes
338 # of the L2 frame, or "IMIX" to represent the standard 3-packet size mixed sequence (IMIX1).
339 traffic_profile:
340     - name: traffic_profile_64B
341       l2frame_size: ['64']
342     - name: traffic_profile_IMIX
343       l2frame_size: ['IMIX']
344     - name: traffic_profile_1518B
345       l2frame_size: ['1518']
346     - name: traffic_profile_3sizes
347       l2frame_size: ['64', 'IMIX', '1518']
348
349 # Traffic Configuration
350 # bidirectional: to have traffic generated from both direction, set bidirectional to true
351 # profile: must be one of the profiles defined in traffic_profile
352 # The traffic profile can be overriden with the options --frame-size and --uni-dir
353 traffic:
354     bidirectional: true
355     profile: traffic_profile_64B
356
357 # Check config and connectivity only - do not generate traffic
358 # Can be overriden by --no-traffic
359 no_traffic: false
360
361 # Test configuration
362
363 # The rate pps for traffic going in reverse direction in case of unidirectional flow. Default to 1.
364 unidir_reverse_traffic_pps: 1
365
366 # The rate specifies if NFVbench should determine the NDR/PDR
367 #  or if NFVbench should just generate traffic at a given fixed rate
368 # for a given duration (called "single run" mode)
369 # Supported rate format:
370 # NDR/PDR test: `ndr`, `pdr`, `ndr_pdr` (default)
371 # Or for single run mode:
372 # Packet per second: pps (e.g. `50pps`)
373 # Bits per second: bps, kbps, Mbps, etc (e.g. `1Gbps`, `1000bps`)
374 # Load percentage: % (e.g. `50%`)
375 # Can be overridden by --rate
376 rate: ndr_pdr
377
378 # Default run duration (single run at given rate only)
379 # Can be overridden by --duration
380 duration_sec: 60
381
382 # Interval between intermediate reports when interval reporting is enabled
383 # Can be overridden by --interval
384 interval_sec: 10
385
386 # Default pause between iterations of a binary search (NDR/PDR)
387 pause_sec: 2
388
389 # NDR / PDR configuration
390 measurement:
391     # Drop rates represent the ratio of dropped packet to the total number of packets sent.
392     # Values provided here are percentages. A value of 0.01 means that at most 0.01% of all
393     # packets sent are dropped (or 1 packet every 10,000 packets sent)
394
395     # No Drop Rate in percentage; Default to 0.001%
396     NDR: 0.001
397     # Partial Drop Rate in percentage; NDR should always be less than PDR
398     PDR: 0.1
399     # The accuracy of NDR and PDR as a percnetage of line rate; The exact NDR
400     # or PDR should be within `load_epsilon` line rate % from the one calculated.
401     # For example, with a value 0.1, and a line rate of 10Gbps, the accuracy
402     # of NDR and PDR will be within 0.1% Of 10Gbps or 10Mbps.
403     # The lower the value the more iterations and the longer it will take to find the NDR/PDR.
404     # In practice, due to the precision of the traffic generator it is not recommended to
405     # set it to lower than 0.1
406     load_epsilon: 0.1
407
408 # Location where to store results in a JSON format. Must be container specific path.
409 # Can be overriden by --json
410 json:
411
412 # Location where to store results in the NFVbench standard JSON format:
413 # <service-chain-type>-<service-chain-count>-<flow-count>-<packet-sizes>.json
414 # Example: PVP-1-10-64-IMIX.json
415 # Must be container specific path.
416 # Can be overriden by --std-json
417 std_json:
418
419 # Prints debug messages (verbose mode)
420 # Can be overriden by --debug
421 debug: false
422
423 # Set to a valid path name if logging to file is to be enabled
424 # Defaults to disabled
425 log_file:
426
427 # When enabled, all results and/or logs will be sent to a fluentd servers at the requested IPs and ports
428 # A list of one or more fluentd servers identified by their IPs and  port numbers should be given.
429 # For each recipient it is possible to enable both sending logs and performance
430 # results, or enable either logs or performance results. For enabling logs or results logging_tag or
431 # result_tag should be set.
432
433 fluentd:
434       # by default (logging_tag is empty) nfvbench log messages are not sent to fluentd
435       # to enable logging to fluents, specify a valid fluentd tag name to be used for the
436       # log records
437     - logging_tag:
438
439       # by default (result_tag is empty) nfvbench results are not sent to fluentd
440       # to enable sending nfvbench results to fluentd, specify a valid fluentd tag name
441       # to be used for the results records, which is different than logging_tag
442       result_tag:
443
444       # IP address of the server, defaults to loopback
445       ip: 127.0.0.1
446
447       # port # to use, by default, use the default fluentd forward port
448       port: 24224
449
450       # by default (logging_tag is empty) nfvbench log messages are not sent to fluentd
451       # to enable logging to fluents, specify a valid fluentd tag name to be used for the
452       # log records
453
454 # Module and class name of factory which will be used to provide classes dynamically for other components.
455 factory_module: 'nfvbench.factory'
456 factory_class: 'BasicFactory'
457
458 # Custom label added for every perf record generated during this run.
459 # Can be overriden by --user-label
460 user_label:
461
462
463 # THESE FIELDS SHOULD BE USED VERY RARELY
464
465 # Skip vswitch configuration and retrieving of stats
466 # Can be overriden by --no-vswitch-access
467 # Should be left to the default value (false)
468 no_vswitch_access: false