xref: /illumos-gate/usr/src/cmd/raidz_test/raidz_test.h (revision fd5e5f438a15881f651587df3e961609eb00778d)
1*e86372a0SGvozden Neskovic /*
2*e86372a0SGvozden Neskovic  * CDDL HEADER START
3*e86372a0SGvozden Neskovic  *
4*e86372a0SGvozden Neskovic  * The contents of this file are subject to the terms of the
5*e86372a0SGvozden Neskovic  * Common Development and Distribution License (the "License").
6*e86372a0SGvozden Neskovic  * You may not use this file except in compliance with the License.
7*e86372a0SGvozden Neskovic  *
8*e86372a0SGvozden Neskovic  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*e86372a0SGvozden Neskovic  * or http://www.opensolaris.org/os/licensing.
10*e86372a0SGvozden Neskovic  * See the License for the specific language governing permissions
11*e86372a0SGvozden Neskovic  * and limitations under the License.
12*e86372a0SGvozden Neskovic  *
13*e86372a0SGvozden Neskovic  * When distributing Covered Code, include this CDDL HEADER in each
14*e86372a0SGvozden Neskovic  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*e86372a0SGvozden Neskovic  * If applicable, add the following below this CDDL HEADER, with the
16*e86372a0SGvozden Neskovic  * fields enclosed by brackets "[]" replaced with your own identifying
17*e86372a0SGvozden Neskovic  * information: Portions Copyright [yyyy] [name of copyright owner]
18*e86372a0SGvozden Neskovic  *
19*e86372a0SGvozden Neskovic  * CDDL HEADER END
20*e86372a0SGvozden Neskovic  */
21*e86372a0SGvozden Neskovic 
22*e86372a0SGvozden Neskovic /*
23*e86372a0SGvozden Neskovic  * Copyright (C) 2016 Gvozden Nešković. All rights reserved.
24*e86372a0SGvozden Neskovic  * Copyright 2020 Joyent, Inc.
25*e86372a0SGvozden Neskovic  */
26*e86372a0SGvozden Neskovic 
27*e86372a0SGvozden Neskovic #ifndef	RAIDZ_TEST_H
28*e86372a0SGvozden Neskovic #define	RAIDZ_TEST_H
29*e86372a0SGvozden Neskovic 
30*e86372a0SGvozden Neskovic #include <sys/spa.h>
31*e86372a0SGvozden Neskovic 
32*e86372a0SGvozden Neskovic static const char *raidz_impl_names[] = {
33*e86372a0SGvozden Neskovic 	"original",
34*e86372a0SGvozden Neskovic 	"scalar",
35*e86372a0SGvozden Neskovic 	"sse2",
36*e86372a0SGvozden Neskovic 	"ssse3",
37*e86372a0SGvozden Neskovic 	"avx2",
38*e86372a0SGvozden Neskovic 	"avx512f",
39*e86372a0SGvozden Neskovic 	"avx512bw",
40*e86372a0SGvozden Neskovic 	"aarch64_neon",
41*e86372a0SGvozden Neskovic 	"aarch64_neonx2",
42*e86372a0SGvozden Neskovic 	"powerpc_altivec",
43*e86372a0SGvozden Neskovic 	NULL
44*e86372a0SGvozden Neskovic };
45*e86372a0SGvozden Neskovic 
46*e86372a0SGvozden Neskovic typedef struct raidz_test_opts {
47*e86372a0SGvozden Neskovic 	size_t rto_ashift;
48*e86372a0SGvozden Neskovic 	size_t rto_offset;
49*e86372a0SGvozden Neskovic 	size_t rto_dcols;
50*e86372a0SGvozden Neskovic 	size_t rto_dsize;
51*e86372a0SGvozden Neskovic 	size_t rto_v;
52*e86372a0SGvozden Neskovic 	size_t rto_sweep;
53*e86372a0SGvozden Neskovic 	size_t rto_sweep_timeout;
54*e86372a0SGvozden Neskovic 	size_t rto_benchmark;
55*e86372a0SGvozden Neskovic 	size_t rto_sanity;
56*e86372a0SGvozden Neskovic 	size_t rto_gdb;
57*e86372a0SGvozden Neskovic 
58*e86372a0SGvozden Neskovic 	/* non-user options */
59*e86372a0SGvozden Neskovic 	boolean_t rto_should_stop;
60*e86372a0SGvozden Neskovic 
61*e86372a0SGvozden Neskovic 	zio_t *zio_golden;
62*e86372a0SGvozden Neskovic 	raidz_map_t *rm_golden;
63*e86372a0SGvozden Neskovic } raidz_test_opts_t;
64*e86372a0SGvozden Neskovic 
65*e86372a0SGvozden Neskovic static const raidz_test_opts_t rto_opts_defaults = {
66*e86372a0SGvozden Neskovic 	.rto_ashift = 9,
67*e86372a0SGvozden Neskovic 	.rto_offset = 1ULL << 0,
68*e86372a0SGvozden Neskovic 	.rto_dcols = 8,
69*e86372a0SGvozden Neskovic 	.rto_dsize = 1<<19,
70*e86372a0SGvozden Neskovic 	.rto_v = 0,
71*e86372a0SGvozden Neskovic 	.rto_sweep = 0,
72*e86372a0SGvozden Neskovic 	.rto_benchmark = 0,
73*e86372a0SGvozden Neskovic 	.rto_sanity = 0,
74*e86372a0SGvozden Neskovic 	.rto_gdb = 0,
75*e86372a0SGvozden Neskovic 	.rto_should_stop = B_FALSE
76*e86372a0SGvozden Neskovic };
77*e86372a0SGvozden Neskovic 
78*e86372a0SGvozden Neskovic extern raidz_test_opts_t rto_opts;
79*e86372a0SGvozden Neskovic 
80*e86372a0SGvozden Neskovic #define	D_ALL	0
81*e86372a0SGvozden Neskovic #define	D_INFO	1
82*e86372a0SGvozden Neskovic #define	D_DEBUG	2
83*e86372a0SGvozden Neskovic 
84*e86372a0SGvozden Neskovic #define	LOG(lvl, a...)				\
85*e86372a0SGvozden Neskovic {						\
86*e86372a0SGvozden Neskovic 	if (rto_opts.rto_v >= lvl)		\
87*e86372a0SGvozden Neskovic 		(void) fprintf(stdout, a);	\
88*e86372a0SGvozden Neskovic }						\
89*e86372a0SGvozden Neskovic 
90*e86372a0SGvozden Neskovic #define	LOG_OPT(lvl, opt, a...)			\
91*e86372a0SGvozden Neskovic {						\
92*e86372a0SGvozden Neskovic 	if (opt->rto_v >= lvl)			\
93*e86372a0SGvozden Neskovic 		(void) fprintf(stdout, a);	\
94*e86372a0SGvozden Neskovic }						\
95*e86372a0SGvozden Neskovic 
96*e86372a0SGvozden Neskovic #define	ERRMSG(a...)	(void) fprintf(stderr, a)
97*e86372a0SGvozden Neskovic 
98*e86372a0SGvozden Neskovic 
99*e86372a0SGvozden Neskovic #define	DBLSEP "================\n"
100*e86372a0SGvozden Neskovic #define	SEP    "----------------\n"
101*e86372a0SGvozden Neskovic 
102*e86372a0SGvozden Neskovic 
103*e86372a0SGvozden Neskovic #define	raidz_alloc(size)	abd_alloc(size, B_FALSE)
104*e86372a0SGvozden Neskovic #define	raidz_free(p, size)	abd_free(p)
105*e86372a0SGvozden Neskovic 
106*e86372a0SGvozden Neskovic 
107*e86372a0SGvozden Neskovic void init_zio_abd(zio_t *zio);
108*e86372a0SGvozden Neskovic 
109*e86372a0SGvozden Neskovic void run_raidz_benchmark(void);
110*e86372a0SGvozden Neskovic 
111*e86372a0SGvozden Neskovic #endif /* RAIDZ_TEST_H */
112