test/ring: add stress tests for zero copy API
[dpdk.git] / app / test / meson.build
1 # SPDX-License-Identifier: BSD-3-Clause
2 # Copyright(c) 2017 Intel Corporation
3
4 if not get_option('tests')
5         subdir_done()
6 endif
7
8 test_sources = files('commands.c',
9         'packet_burst_generator.c',
10         'test.c',
11         'test_acl.c',
12         'test_alarm.c',
13         'test_atomic.c',
14         'test_barrier.c',
15         'test_bitops.c',
16         'test_bpf.c',
17         'test_byteorder.c',
18         'test_cmdline.c',
19         'test_cmdline_cirbuf.c',
20         'test_cmdline_etheraddr.c',
21         'test_cmdline_ipaddr.c',
22         'test_cmdline_lib.c',
23         'test_cmdline_num.c',
24         'test_cmdline_portlist.c',
25         'test_cmdline_string.c',
26         'test_common.c',
27         'test_cpuflags.c',
28         'test_crc.c',
29         'test_cryptodev.c',
30         'test_cryptodev_asym.c',
31         'test_cryptodev_blockcipher.c',
32         'test_cryptodev_security_pdcp.c',
33         'test_cycles.c',
34         'test_debug.c',
35         'test_distributor.c',
36         'test_distributor_perf.c',
37         'test_eal_flags.c',
38         'test_eal_fs.c',
39         'test_efd.c',
40         'test_efd_perf.c',
41         'test_errno.c',
42         'test_ethdev_link.c',
43         'test_event_crypto_adapter.c',
44         'test_event_eth_rx_adapter.c',
45         'test_event_ring.c',
46         'test_event_timer_adapter.c',
47         'test_eventdev.c',
48         'test_external_mem.c',
49         'test_fbarray.c',
50         'test_fib.c',
51         'test_fib_perf.c',
52         'test_fib6.c',
53         'test_fib6_perf.c',
54         'test_func_reentrancy.c',
55         'test_flow_classify.c',
56         'test_graph.c',
57         'test_graph_perf.c',
58         'test_hash.c',
59         'test_hash_functions.c',
60         'test_hash_multiwriter.c',
61         'test_hash_readwrite.c',
62         'test_hash_perf.c',
63         'test_hash_readwrite_lf_perf.c',
64         'test_interrupts.c',
65         'test_ipfrag.c',
66         'test_ipsec.c',
67         'test_ipsec_sad.c',
68         'test_ipsec_perf.c',
69         'test_kni.c',
70         'test_kvargs.c',
71         'test_lcores.c',
72         'test_logs.c',
73         'test_lpm.c',
74         'test_lpm6.c',
75         'test_lpm6_perf.c',
76         'test_lpm_perf.c',
77         'test_malloc.c',
78         'test_mbuf.c',
79         'test_member.c',
80         'test_member_perf.c',
81         'test_memcpy.c',
82         'test_memcpy_perf.c',
83         'test_memory.c',
84         'test_mempool.c',
85         'test_mempool_perf.c',
86         'test_memzone.c',
87         'test_meter.c',
88         'test_metrics.c',
89         'test_mcslock.c',
90         'test_mp_secondary.c',
91         'test_per_lcore.c',
92         'test_pmd_perf.c',
93         'test_power.c',
94         'test_power_cpufreq.c',
95         'test_power_kvm_vm.c',
96         'test_prefetch.c',
97         'test_rand_perf.c',
98         'test_rawdev.c',
99         'test_rcu_qsbr.c',
100         'test_rcu_qsbr_perf.c',
101         'test_reciprocal_division.c',
102         'test_reciprocal_division_perf.c',
103         'test_red.c',
104         'test_reorder.c',
105         'test_rib.c',
106         'test_rib6.c',
107         'test_ring.c',
108         'test_ring_mpmc_stress.c',
109         'test_ring_hts_stress.c',
110         'test_ring_mt_peek_stress.c',
111         'test_ring_mt_peek_stress_zc.c',
112         'test_ring_perf.c',
113         'test_ring_rts_stress.c',
114         'test_ring_st_peek_stress.c',
115         'test_ring_st_peek_stress_zc.c',
116         'test_ring_stress.c',
117         'test_rwlock.c',
118         'test_sched.c',
119         'test_security.c',
120         'test_service_cores.c',
121         'test_spinlock.c',
122         'test_stack.c',
123         'test_stack_perf.c',
124         'test_string_fns.c',
125         'test_table.c',
126         'test_table_acl.c',
127         'test_table_combined.c',
128         'test_table_pipeline.c',
129         'test_table_ports.c',
130         'test_table_tables.c',
131         'test_tailq.c',
132         'test_thash.c',
133         'test_timer.c',
134         'test_timer_perf.c',
135         'test_timer_racecond.c',
136         'test_timer_secondary.c',
137         'test_ticketlock.c',
138         'test_trace.c',
139         'test_trace_register.c',
140         'test_trace_perf.c',
141         'test_version.c',
142         'virtual_pmd.c'
143 )
144
145 test_deps = ['acl',
146         'bus_pci',
147         'bus_vdev',
148         'bitratestats',
149         'bpf',
150         'cfgfile',
151         'cmdline',
152         'cryptodev',
153         'distributor',
154         'efd',
155         'ethdev',
156         'eventdev',
157         'fib',
158         'flow_classify',
159         'graph',
160         'hash',
161         'ipsec',
162         'latencystats',
163         'lpm',
164         'member',
165         'metrics',
166         'node',
167         'pipeline',
168         'port',
169         'rawdev',
170         'rcu',
171         'reorder',
172         'rib',
173         'ring',
174         'security',
175         'stack',
176         'telemetry',
177         'timer'
178 ]
179
180 # Each test is marked with flag true/false
181 # to indicate whether it can run in no-huge mode.
182 fast_tests = [
183         ['acl_autotest', true],
184         ['alarm_autotest', false],
185         ['atomic_autotest', false],
186         ['bitops_autotest', true],
187         ['byteorder_autotest', true],
188         ['cmdline_autotest', true],
189         ['common_autotest', true],
190         ['cpuflags_autotest', true],
191         ['cycles_autotest', true],
192         ['debug_autotest', true],
193         ['eal_flags_c_opt_autotest', false],
194         ['eal_flags_main_opt_autotest', false],
195         ['eal_flags_n_opt_autotest', false],
196         ['eal_flags_hpet_autotest', false],
197         ['eal_flags_no_huge_autotest', false],
198         ['eal_flags_w_opt_autotest', false],
199         ['eal_flags_b_opt_autotest', false],
200         ['eal_flags_vdev_opt_autotest', false],
201         ['eal_flags_r_opt_autotest', false],
202         ['eal_flags_mem_autotest', false],
203         ['eal_flags_file_prefix_autotest', false],
204         ['eal_flags_misc_autotest', false],
205         ['eal_fs_autotest', true],
206         ['errno_autotest', true],
207         ['ethdev_link_status', true],
208         ['event_ring_autotest', true],
209         ['fib_autotest', true],
210         ['fib6_autotest', true],
211         ['func_reentrancy_autotest', false],
212         ['flow_classify_autotest', false],
213         ['hash_autotest', true],
214         ['interrupt_autotest', true],
215         ['ipfrag_autotest', false],
216         ['lcores_autotest', true],
217         ['logs_autotest', true],
218         ['lpm_autotest', true],
219         ['lpm6_autotest', true],
220         ['malloc_autotest', false],
221         ['mbuf_autotest', false],
222         ['mcslock_autotest', false],
223         ['memcpy_autotest', true],
224         ['memory_autotest', false],
225         ['mempool_autotest', false],
226         ['memzone_autotest', false],
227         ['meter_autotest', true],
228         ['multiprocess_autotest', false],
229         ['per_lcore_autotest', true],
230         ['prefetch_autotest', true],
231         ['rcu_qsbr_autotest', true],
232         ['red_autotest', true],
233         ['rib_autotest', true],
234         ['rib6_autotest', true],
235         ['ring_autotest', true],
236         ['rwlock_test1_autotest', true],
237         ['rwlock_rda_autotest', true],
238         ['rwlock_rds_wrm_autotest', true],
239         ['rwlock_rde_wro_autotest', true],
240         ['sched_autotest', true],
241                 ['security_autotest', false],
242         ['spinlock_autotest', true],
243         ['stack_autotest', false],
244         ['stack_lf_autotest', false],
245         ['string_autotest', true],
246         ['table_autotest', true],
247         ['tailq_autotest', true],
248         ['timer_autotest', false],
249         ['user_delay_us', true],
250         ['version_autotest', true],
251         ['crc_autotest', true],
252         ['delay_us_sleep_autotest', true],
253         ['distributor_autotest', false],
254         ['eventdev_common_autotest', true],
255         ['fbarray_autotest', true],
256         ['hash_readwrite_func_autotest', false],
257         ['ipsec_autotest', true],
258         ['kni_autotest', false],
259         ['kvargs_autotest', true],
260         ['member_autotest', true],
261         ['metrics_autotest', true],
262         ['power_cpufreq_autotest', false],
263         ['power_autotest', true],
264         ['power_kvm_vm_autotest', false],
265         ['reorder_autotest', true],
266         ['service_autotest', true],
267         ['thash_autotest', true],
268         ['trace_autotest', true],
269 ]
270
271 perf_test_names = [
272         'ring_perf_autotest',
273         'mempool_perf_autotest',
274         'memcpy_perf_autotest',
275         'hash_perf_autotest',
276         'timer_perf_autotest',
277         'reciprocal_division',
278         'reciprocal_division_perf',
279         'lpm_perf_autotest',
280         'rib_slow_autotest',
281         'fib_slow_autotest',
282         'fib_perf_autotest',
283         'red_all',
284         'barrier_autotest',
285         'hash_multiwriter_autotest',
286         'timer_racecond_autotest',
287         'efd_autotest',
288         'hash_functions_autotest',
289         'member_perf_autotest',
290         'efd_perf_autotest',
291         'lpm6_perf_autotest',
292         'rib6_slow_autotest',
293         'fib6_slow_autotest',
294         'fib6_perf_autotest',
295         'rcu_qsbr_perf_autotest',
296         'red_perf',
297         'distributor_perf_autotest',
298         'pmd_perf_autotest',
299         'stack_perf_autotest',
300         'stack_lf_perf_autotest',
301         'rand_perf_autotest',
302         'hash_readwrite_perf_autotest',
303         'hash_readwrite_lf_perf_autotest',
304         'trace_perf_autotest',
305         'ipsec_perf_autotest',
306 ]
307
308 driver_test_names = [
309         'cryptodev_aesni_mb_autotest',
310         'cryptodev_aesni_gcm_autotest',
311         'cryptodev_dpaa_sec_autotest',
312         'cryptodev_dpaa2_sec_autotest',
313         'cryptodev_null_autotest',
314         'cryptodev_octeontx2_autotest',
315         'cryptodev_openssl_autotest',
316         'cryptodev_openssl_asym_autotest',
317         'cryptodev_qat_autotest',
318         'cryptodev_sw_armv8_autotest',
319         'cryptodev_sw_kasumi_autotest',
320         'cryptodev_sw_mvsam_autotest',
321         'cryptodev_sw_snow3g_autotest',
322         'cryptodev_sw_zuc_autotest',
323         'eventdev_selftest_octeontx',
324         'eventdev_selftest_sw',
325         'rawdev_autotest',
326 ]
327
328 dump_test_names = [
329         'dump_struct_sizes',
330         'dump_mempool',
331         'dump_malloc_stats',
332         'dump_devargs',
333         'dump_log_types',
334         'dump_ring',
335         'dump_physmem',
336         'dump_memzone',
337 ]
338
339 # The following linkages are an exception to allow running the
340 # unit tests without requiring that the developer install the
341 # DPDK libraries.  Explicit linkage of drivers (plugin libraries)
342 # in applications should not be used.
343 if dpdk_conf.has('RTE_MEMPOOL_RING')
344         test_deps += 'mempool_ring'
345 endif
346 if dpdk_conf.has('RTE_MEMPOOL_STACK')
347         test_deps += 'mempool_stack'
348 endif
349 if dpdk_conf.has('RTE_EVENT_SKELETON')
350         test_deps += 'event_skeleton'
351 endif
352 if dpdk_conf.has('RTE_LIB_TELEMETRY')
353         test_sources += ['test_telemetry_json.c', 'test_telemetry_data.c']
354         fast_tests += [['telemetry_json_autotest', true], ['telemetry_data_autotest', true]]
355 endif
356
357 # The following linkages of drivers are required because
358 # they are used via a driver-specific API.
359 if dpdk_conf.has('RTE_NET_BOND')
360         test_deps += 'net_bond'
361         test_sources += ['test_link_bonding.c', 'test_link_bonding_rssconf.c']
362         driver_test_names += ['link_bonding_autotest', 'link_bonding_rssconf_autotest']
363         if dpdk_conf.has('RTE_NET_RING')
364                 test_sources += 'test_link_bonding_mode4.c'
365                 driver_test_names += 'link_bonding_mode4_autotest'
366         endif
367 endif
368 if dpdk_conf.has('RTE_NET_RING')
369         test_deps += 'net_ring'
370         test_sources += 'test_pmd_ring_perf.c'
371         test_sources += 'test_pmd_ring.c'
372         test_sources += 'test_event_eth_tx_adapter.c'
373         test_sources += 'test_bitratestats.c'
374         test_sources += 'test_latencystats.c'
375         test_sources += 'sample_packet_forward.c'
376         test_sources += 'test_pdump.c'
377         fast_tests += [['ring_pmd_autotest', true]]
378         perf_test_names += 'ring_pmd_perf_autotest'
379         fast_tests += [['event_eth_tx_adapter_autotest', false]]
380         fast_tests += [['bitratestats_autotest', true]]
381         fast_tests += [['latencystats_autotest', true]]
382         fast_tests += [['pdump_autotest', true]]
383 endif
384
385 if dpdk_conf.has('RTE_LIB_POWER')
386         test_deps += 'power'
387 endif
388 if dpdk_conf.has('RTE_LIB_KNI')
389         test_deps += 'kni'
390 endif
391 if dpdk_conf.has('RTE_LIB_PDUMP')
392         test_deps += 'pdump'
393 endif
394
395 if cc.has_argument('-Wno-format-truncation')
396     cflags += '-Wno-format-truncation'
397 endif
398
399 # specify -D_GNU_SOURCE unconditionally
400 cflags += '-D_GNU_SOURCE'
401 # Strict-aliasing rules are violated by uint8_t[] to context size casts.
402 cflags += '-fno-strict-aliasing'
403
404 # Enable using internal APIs in unit tests
405 cflags += ['-DALLOW_INTERNAL_API']
406
407 test_dep_objs = []
408 if dpdk_conf.has('RTE_LIB_COMPRESSDEV')
409         compress_test_dep = dependency('zlib', required: false)
410         if compress_test_dep.found()
411                 test_dep_objs += compress_test_dep
412                 test_sources += 'test_compressdev.c'
413                 test_deps += 'compressdev'
414                 fast_tests += [['compressdev_autotest', false]]
415         endif
416 endif
417
418 if dpdk_conf.has('RTE_CRYPTO_SCHEDULER')
419         driver_test_names += 'cryptodev_scheduler_autotest'
420         test_deps += 'crypto_scheduler'
421 endif
422
423 foreach d:test_deps
424         def_lib = get_option('default_library')
425         test_dep_objs += get_variable(def_lib + '_rte_' + d)
426 endforeach
427 test_dep_objs += cc.find_library('execinfo', required: false)
428
429 link_libs = []
430 if get_option('default_library') == 'static'
431         link_libs = dpdk_static_libraries + dpdk_drivers
432 endif
433
434 dpdk_test = executable('dpdk-test',
435         test_sources,
436         link_whole: link_libs,
437         dependencies: test_dep_objs,
438         c_args: cflags,
439         install_rpath: join_paths(get_option('prefix'),
440                          driver_install_path),
441         install: true)
442
443 has_hugepage = run_command('has-hugepage.sh').stdout().strip() != '0'
444 message('hugepage availability: @0@'.format(has_hugepage))
445
446 # some perf tests (eg: memcpy perf autotest)take very long
447 # to complete, so timeout to 10 minutes
448 timeout_seconds = 600
449 timeout_seconds_fast = 10
450
451 get_coremask = find_program('get-coremask.sh')
452 num_cores_arg = '-l ' + run_command(get_coremask).stdout().strip()
453
454 default_test_args = [num_cores_arg]
455
456 foreach arg : fast_tests
457         test_args = default_test_args
458         run_test = true
459         if not has_hugepage
460                 if arg[1]
461                         test_args += ['--no-huge', '-m', '2048']
462                 else
463                         run_test = false
464                 endif
465         endif
466
467         if (get_option('default_library') == 'shared' and
468                 arg[0] == 'event_eth_tx_adapter_autotest')
469                 foreach drv:dpdk_drivers
470                         test_args += ['-d', drv.full_path().split('.a')[0] + '.so']
471                 endforeach
472         endif
473         if is_linux
474                 test_args += ['--file-prefix=@0@'.format(arg[0])]
475         endif
476
477         if run_test
478                 test(arg[0], dpdk_test,
479                         env : ['DPDK_TEST=' + arg[0]],
480                         args : test_args,
481                         timeout : timeout_seconds_fast,
482                         is_parallel : false,
483                         suite : 'fast-tests')
484         endif
485 endforeach
486
487 foreach arg : perf_test_names
488         test(arg, dpdk_test,
489         env : ['DPDK_TEST=' + arg],
490         args : default_test_args,
491         timeout : timeout_seconds,
492         is_parallel : false,
493         suite : 'perf-tests')
494 endforeach
495
496 foreach arg : driver_test_names
497         test(arg, dpdk_test,
498                 env : ['DPDK_TEST=' + arg],
499                 args : default_test_args,
500                 timeout : timeout_seconds,
501                 is_parallel : false,
502                 suite : 'driver-tests')
503 endforeach
504
505 foreach arg : dump_test_names
506         test(arg, dpdk_test,
507                 env : ['DPDK_TEST=' + arg],
508                 args : default_test_args,
509                 timeout : timeout_seconds,
510                 is_parallel : false,
511                 suite : 'debug-tests')
512 endforeach