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