NFVBENCH-94 End to end traffic test triggers too early on chatty network
[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 # The OpenStack openrc file to use (must be a valid full pathname). If running
22 # in a container, this path must be valid in the container.
23 #
24 # The only case where this field can be empty is when measuring a system that does not run
25 # OpenStack or when OpenStack APIs are not accessible or OpenStack APis use is not
26 # desirable. In that case the EXT service chain must be used.
27 openrc_file:
28
29 # Forwarder to use in nfvbenchvm image. Available options: ['vpp', 'testpmd']
30 vm_forwarder: testpmd
31
32 # By default (empty) NFVBench will try to locate a VM image file
33 # from the package root directory named "nfvbench-<version>.qcow2" and
34 # upload that file. The image name will be "nfvbench-<version>"
35 # This can be overridden by specifying here a pathname of a file
36 # that follows the same naming convention.
37 # In most cases, this field should be left empty as the packaging should
38 # include the proper VM image file
39 vm_image_file:
40
41 # Name of the flavor to use for the loopback VMs
42 #
43 # If the provided name is an exact match to a flavor name known by OpenStack
44 # (as shown from 'nova flavor-list'), that flavor will be reused.
45 # Otherwise, a new flavor will be created with attributes listed below.
46 flavor_type: 'nfvbench.medium'
47
48 # Custom flavor attributes
49 flavor:
50   # Number of vCPUs for the flavor
51   vcpus: 2
52   # Memory for the flavor in MB
53   ram: 4096
54   # Size of local disk in GB
55   disk: 0
56   # metadata are supported and can be added if needed, optional
57   # note that if your openstack does not have NUMA optimization
58   # (cpu pinning and huge pages)
59   # you must comment out extra_specs completely otherwise
60   # loopback VM creation will fail
61   extra_specs:
62       "hw:cpu_policy": dedicated
63       "hw:mem_page_size": large
64
65 # Name of the availability zone to use for the test VMs
66 # Must be one of the zones listed by 'nova availability-zone-list'
67 # If the selected zone contains only 1 compute node and PVVP inter-node flow is selected,
68 # application will use intra-node PVVP flow.
69 # List of compute nodes can be specified, must be in given availability zone if not empty
70 #availability_zone: 'nova'
71 availability_zone:
72 compute_nodes:
73
74
75 # Credentials for SSH connection to TOR switches.
76 tor:
77     # Leave type empty or switch list empty to skip TOR switches configuration.
78     # Preferably use 'no_tor_access' to achieve the same behavior.
79     # (skipping TOR config will require the user to pre-stitch the traffic generator interfaces
80     # to the service chain under test, needed only if configured in access mode)
81     type:
82     # Switches are only needed if type is not empty.
83     # You can configure 0, 1 or 2 switches
84     # no switch: in this case NFVbench will not attempt to ssh to the switch
85     #            and stitching of traffic must be done externally
86     # 1 switch: this assumes that both traffic generator interfaces are wired to the same switch
87     # 2 switches: this is the recommended setting wuth redundant switches, in this case each
88     #             traffic generator interface must be wired to a different switch
89     switches:
90         - host:
91           username:
92           password:
93           port:
94
95 # Skip TOR switch configuration and retrieving of stats
96 # Can be overriden by --no-tor-access
97 no_tor_access: false
98
99 # Skip vswitch configuration and retrieving of stats
100 # Can be overriden by --no-vswitch-access
101 no_vswitch_access: false
102
103 # Type of service chain to run, possible options are PVP, PVVP and EXT
104 # PVP - port to VM to port
105 # PVVP - port to VM to VM to port
106 # EXT - external chain used only for running traffic and checking traffic generator counters,
107 #       all other parts of chain must be configured manually
108 # Can be overriden by --service-chain
109 service_chain: 'PVP'
110
111 # Total number of service chains, every chain has own traffic stream
112 # Can be overriden by --service-chain-count
113 service_chain_count: 1
114
115 # Total number of traffic flows for all chains and directions generated by the traffic generator.
116 # Minimum is '2 * service_chain_count', it is automatically adjusted if too small
117 # value was configured. Must be even.
118 # Every flow has packets with different IPs in headers
119 # Can be overriden by --flow-count
120 flow_count: 10000
121
122 # Used by PVVP chain to spawn VMs on different compute nodes
123 # Can be overriden by --inter-node
124 inter_node: false
125
126 # set to true if service chains should use SRIOV
127 # This requires SRIOV to be available on compute nodes
128 sriov: false
129
130 # Skip interfaces config on EXT service chain
131 # Can be overriden by --no-int-config
132 no_int_config: false
133
134 # Perform port to port loopback (direct or through switch)
135 # Should be used with EXT service chain and no ARP (no_arp: true)
136 # Can be overriden by --l2-loopback
137 l2_loopback: false
138
139 # Resources created by NFVbench will not be removed
140 # Can be overriden by --no-cleanup
141 no_cleanup: false
142
143 # Configuration for traffic generator
144 traffic_generator:
145     # Name of the traffic generator, only for informational purposes
146     host_name: 'nfvbench_tg'
147     # this is the default traffic generator profile to use
148     # the name must be defined under generator_profile
149     # you can override the traffic generator to use using the
150     # -g or --traffic-gen option at the command line
151     default_profile: trex-local
152
153     # IP addresses for L3 traffic.
154     # All of the IPs are used as base for IP sequence computed based on chain or flow count.
155     #
156     # `ip_addrs` base IPs used as src and dst in packet header, quantity depends on flow count
157     # `ip_addrs_step`: step for generating IP sequence. Use "random" for random patterns, default is 0.0.0.1.
158     # `tg_gateway_ip_addrs` base IPs for traffic generator ports, quantity depends on chain count
159     # `tg_gateway_ip_addrs__step`: step for generating traffic generator gateway sequences. default is 0.0.0.1
160     # `gateway_ip_addrs`: base IPs of router gateways on both networks, quantity depends on chain count
161     # `gateway_ip_addrs_step`: step for generating router gateway sequences. default is 0.0.0.1
162     # `udp_src_port`: the source port for sending UDP traffic, default is picked by TRex (53)
163     # `udp_dst_port`: the destination port for sending UDP traffic, default is picked by TRex (53)
164     # `mac_addrs_left` & `mac_addrs_right`: Lists of MAC addresses corresponding to the number of chains
165     # specified for `service_chain_count`.
166     #   - If both lists are empty the far end MAC of the traffic generator will be used for left and right
167     #   - The MAC addresses will only be used when `service_chain` is EXT and `no_arp` is true.
168     #   - The length of each list must match the number of chains being used.
169     #   - The index of each list must correspond to the chain index to ensure proper pairing.
170     #   - Below is an example of using two chains:
171     #     - mac_addrs_left: ['00:00:00:00:01:00', '00:00:00:00:02:00']
172     #     - mac_addrs_right: ['00:00:00:00:01:01', '00:00:00:00:02:01']
173     ip_addrs: ['10.0.0.0/8', '20.0.0.0/8']
174     ip_addrs_step: 0.0.0.1
175     tg_gateway_ip_addrs: ['1.1.0.100', '2.2.0.100']
176     tg_gateway_ip_addrs_step: 0.0.0.1
177     gateway_ip_addrs: ['1.1.0.2', '2.2.0.2']
178     gateway_ip_addrs_step: 0.0.0.1
179     udp_src_port:
180     udp_dst_port:
181     mac_addrs_left:
182     mac_addrs_right:
183
184     # Traffic Generator Profiles
185     # In case you have multiple testbeds or traffic generators,
186     # you can define one traffic generator profile per testbed/traffic generator.
187     #
188     # Generator profiles are listed in the following format:
189     # `name`: Traffic generator profile name (use a unique name, no space or special character)
190     # `tool`: Traffic generator tool to be used (currently supported is `TRex`).
191     # `ip`: IP address of the traffic generator.
192     # `cores`: Specify the number of cores for TRex traffic generator. 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     # `interfaces`: Configuration of traffic generator interfaces.
198     # `interfaces.port`: The port of the traffic generator to be used (leave as 0 and 1 resp.)
199     # `interfaces.switch_port`: Leave empty (reserved for advanced use cases)
200     # `interfaces.pci`: The PCI address of the intel NIC interface associated to this port
201     # `intf_speed`: The speed of the interfaces used by the traffic generator (per direction).
202     #
203     generator_profile:
204         - name: trex-local
205           tool: TRex
206           ip: 127.0.0.1
207           cores: 3
208           software_mode: false
209           interfaces:
210             - port: 0
211               switch_port:
212               pci:
213             - port: 1
214               switch_port:
215               pci:
216           intf_speed: 10Gbps
217
218 # -----------------------------------------------------------------------------
219 # These variables are not likely to be changed
220
221 # Number of seconds to wait for VMs to pass traffic in both directions
222 check_traffic_time_sec: 200
223
224 # General retry count
225 generic_retry_count: 100
226
227 # General poll period
228 generic_poll_sec: 2
229
230 # name of the loop VM
231 loop_vm_name: 'nfvbench-loop-vm'
232
233 # Default names, subnets and CIDRs for PVP/PVVP networks
234 # If a network with given name already exists it will be reused.
235 # - PVP only uses left and right
236 # - PVVP uses left, middle and right
237 # - for EXT chains, this structure is not relevant - refer to external_networks
238 # Otherwise a new internal network will be created with that name, subnet and CIDR.
239 #
240 # segmentation_id can be set to enforce a specific VLAN id - by default (empty) the VLAN id
241 #                 will be assigned by Neutron.
242 #                 Must be unique for each network
243 # physical_network can be set to pick a specific phsyical network - by default (empty) the
244 #                   default physical network will be picked
245 # In the case of SR-IOV, both physical_network and segmentation ID must be provided
246 # For example to setup PVP using 2 different SR-IOV ports, you must put the appropriate physnet
247 # names under left.physical_network and right.physical_network.
248 # Example of override configuration to force PVP to run on 2 SRIOV ports (phys_sriov0 and phys_sriov1)
249 # using VLAN ID 2000 and 2001:
250 # internal_networks:
251 #    left:
252 #        segmentation_id: 2000
253 #        physical_network: phys_sriov0
254 #    right:
255 #        segmentation_id: 2001
256 #        physical_network: phys_sriov1
257
258 internal_networks:
259     left:
260         name: 'nfvbench-net0'
261         subnet: 'nfvbench-subnet0'
262         cidr: '192.168.1.0/24'
263         network_type: 'vlan'
264         segmentation_id:
265         physical_network:
266     right:
267         name: 'nfvbench-net1'
268         subnet: 'nfvbench-subnet1'
269         cidr: '192.168.2.0/24'
270         network_type: 'vlan'
271         segmentation_id:
272         physical_network:
273     middle:
274         name: 'nfvbench-net2'
275         subnet: 'nfvbench-subnet2'
276         cidr: '192.168.3.0/24'
277         network_type: 'vlan'
278         segmentation_id:
279         physical_network:
280
281 # In the scenario of PVVP + SRIOV, there is choice of how the traffic will be
282 # handled in the middle network. The default (false) will use vswitch, while
283 # SRIOV can be used by toggling below setting.
284 use_sriov_middle_net: false
285
286 # EXT chain only. Names of edge networks which will be used to send traffic via traffic generator.
287 external_networks:
288     left: 'nfvbench-net0'
289     right: 'nfvbench-net1'
290
291 # Use 'true' to enable VLAN tagging of packets generated and sent by the traffic generator
292 # Leave empty you do not want the traffic generator to insert the VLAN tag. This is
293 # needed for example if VLAN tagging is enabled on switch (trunk mode) or if you want to hook directly to a NIC
294 # By default is set to true (which is the nominal use case with TOR and trunk mode to Trex)
295 vlan_tagging: true
296
297 # Specify only when you want to override VLAN IDs used for tagging with own values (exactly 2).
298 # Default behavior (empty list) is to retrieve VLAN IDs from OpenStack networks described in external_networks.
299 # This property is ignored in the case of l2-loopback
300 # Example: [1998, 1999]
301 vlans: []
302
303 # Used only with EXT chain. MAC addresses of traffic generator ports are used as destination
304 # if 'no_arp' is set to 'true'. Otherwise ARP requests are sent to find out destination MAC addresses.
305 no_arp: false
306
307 # Traffic Profiles
308 # You can add here more profiles as needed
309 # `l2frame_size` can be specified in any none zero integer value to represent the size in bytes
310 # of the L2 frame, or "IMIX" to represent the standard 3-packet size mixed sequence (IMIX1).
311 traffic_profile:
312     - name: traffic_profile_64B
313       l2frame_size: ['64']
314     - name: traffic_profile_IMIX
315       l2frame_size: ['IMIX']
316     - name: traffic_profile_1518B
317       l2frame_size: ['1518']
318     - name: traffic_profile_3sizes
319       l2frame_size: ['64', 'IMIX', '1518']
320
321 # Traffic Configuration
322 # bidirectional: to have traffic generated from both direction, set bidirectional to true
323 # profile: must be one of the profiles defined in traffic_profile
324 # The traffic profile can be overriden with the options --frame-size and --uni-dir
325 traffic:
326     bidirectional: true
327     profile: traffic_profile_64B
328
329 # Check config and connectivity only - do not generate traffic
330 # Can be overriden by --no-traffic
331 no_traffic: false
332
333 # Do not reset tx/rx counters prior to running
334 # Can be overriden by --no-reset
335 no_reset: false
336
337 # Test configuration
338
339 # The rate pps for traffic going in reverse direction in case of unidirectional flow. Default to 1.
340 unidir_reverse_traffic_pps: 1
341
342 # The rate specifies if NFVbench should determine the NDR/PDR
343 #  or if NFVbench should just generate traffic at a given fixed rate
344 # for a given duration (called "single run" mode)
345 # Supported rate format:
346 # NDR/PDR test: `ndr`, `pdr`, `ndr_pdr` (default)
347 # Or for single run mode:
348 # Packet per second: pps (e.g. `50pps`)
349 # Bits per second: bps, kbps, Mbps, etc (e.g. `1Gbps`, `1000bps`)
350 # Load percentage: % (e.g. `50%`)
351 # Can be overridden by --rate
352 rate: ndr_pdr
353
354 # Default run duration (single run at given rate only)
355 # Can be overridden by --duration
356 duration_sec: 60
357
358 # Interval between intermediate reports when interval reporting is enabled
359 # Can be overridden by --interval
360 interval_sec: 10
361
362 # NDR / PDR configuration
363 measurement:
364     # Drop rates represent the ratio of dropped packet to the total number of packets sent.
365     # Values provided here are percentages. A value of 0.01 means that at most 0.01% of all
366     # packets sent are dropped (or 1 packet every 10,000 packets sent)
367
368     # No Drop Rate in percentage; Default to 0.001%
369     NDR: 0.001
370     # Partial Drop Rate in percentage; NDR should always be less than PDR
371     PDR: 0.1
372     # The accuracy of NDR and PDR as a percnetage of line rate; The exact NDR
373     # or PDR should be within `load_epsilon` line rate % from the one calculated.
374     # For example, with a value 0.1, and a line rate of 10Gbps, the accuracy
375     # of NDR and PDR will be within 0.1% Of 10Gbps or 10Mbps.
376     # The lower the value the more iterations and the longer it will take to find the NDR/PDR.
377     # In practice, due to the precision of the traffic generator it is not recommended to
378     # set it to lower than 0.1
379     load_epsilon: 0.1
380
381 # Location where to store results in a JSON format. Must be container specific path.
382 # Can be overriden by --json
383 json:
384
385 # Location where to store results in the NFVbench standard JSON format:
386 # <service-chain-type>-<service-chain-count>-<flow-count>-<packet-sizes>.json
387 # Example: PVP-1-10-64-IMIX.json
388 # Must be container specific path.
389 # Can be overriden by --std-json
390 std_json:
391
392 # Prints debug messages (verbose mode)
393 # Can be overriden by --debug
394 debug: false
395
396 # Set to a valid path name if logging to file is to be enabled
397 # Defaults to disabled
398 log_file:
399
400 # When enabled, all results and/or logs will be sent to a fluentd servers at the requested IPs and ports
401 # A list of one or more fluentd servers identified by their IPs and  port numbers should be given.
402 # For each recipient it is possible to enable both sending logs and performance
403 # results, or enable either logs or performance results. For enabling logs or results logging_tag or
404 # result_tag should be set.
405
406 fluentd:
407       # by default (logging_tag is empty) nfvbench log messages are not sent to fluentd
408       # to enable logging to fluents, specify a valid fluentd tag name to be used for the
409       # log records
410     - logging_tag:
411
412       # by default (result_tag is empty) nfvbench results are not sent to fluentd
413       # to enable sending nfvbench results to fluentd, specify a valid fluentd tag name
414       # to be used for the results records, which is different than logging_tag
415       result_tag:
416
417       # IP address of the server, defaults to loopback
418       ip: 127.0.0.1
419
420       # port # to use, by default, use the default fluentd forward port
421       port: 24224
422
423       # by default (logging_tag is empty) nfvbench log messages are not sent to fluentd
424       # to enable logging to fluents, specify a valid fluentd tag name to be used for the
425       # log records
426
427 # Module and class name of factory which will be used to provide classes dynamically for other components.
428 factory_module: 'nfvbench.factory'
429 factory_class: 'BasicFactory'
430
431 # Custom label added for every perf record generated during this run.
432 # Can be overriden by --user-label
433 user_label: