diff options
Diffstat (limited to 'sys/contrib/openzfs/cmd/raidz_test/raidz_test.h')
-rw-r--r-- | sys/contrib/openzfs/cmd/raidz_test/raidz_test.h | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/sys/contrib/openzfs/cmd/raidz_test/raidz_test.h b/sys/contrib/openzfs/cmd/raidz_test/raidz_test.h new file mode 100644 index 000000000000..f0b854cefb5d --- /dev/null +++ b/sys/contrib/openzfs/cmd/raidz_test/raidz_test.h @@ -0,0 +1,123 @@ +// SPDX-License-Identifier: CDDL-1.0 +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or https://opensource.org/licenses/CDDL-1.0. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright (C) 2016 Gvozden Nešković. All rights reserved. + */ + +#ifndef RAIDZ_TEST_H +#define RAIDZ_TEST_H + +#include <sys/spa.h> + +static const char *const raidz_impl_names[] = { + "original", + "scalar", + "sse2", + "ssse3", + "avx2", + "avx512f", + "avx512bw", + "aarch64_neon", + "aarch64_neonx2", + "powerpc_altivec", + NULL +}; + +enum raidz_verbosity { + D_ALL, + D_INFO, + D_DEBUG, +}; + +typedef struct raidz_test_opts { + size_t rto_ashift; + uint64_t rto_offset; + size_t rto_dcols; + size_t rto_dsize; + enum raidz_verbosity rto_v; + size_t rto_sweep; + size_t rto_sweep_timeout; + size_t rto_benchmark; + size_t rto_expand; + uint64_t rto_expand_offset; + size_t rto_sanity; + size_t rto_gdb; + + /* non-user options */ + boolean_t rto_should_stop; + + zio_t *zio_golden; + raidz_map_t *rm_golden; +} raidz_test_opts_t; + +static const raidz_test_opts_t rto_opts_defaults = { + .rto_ashift = 9, + .rto_offset = 1ULL << 0, + .rto_dcols = 8, + .rto_dsize = 1<<19, + .rto_v = D_ALL, + .rto_sweep = 0, + .rto_benchmark = 0, + .rto_expand = 0, + .rto_expand_offset = -1ULL, + .rto_sanity = 0, + .rto_gdb = 0, + .rto_should_stop = B_FALSE +}; + +extern raidz_test_opts_t rto_opts; + +static inline size_t ilog2(size_t a) +{ + return (a > 1 ? 1 + ilog2(a >> 1) : 0); +} + + +#define LOG(lvl, ...) \ +{ \ + if (rto_opts.rto_v >= lvl) \ + (void) fprintf(stdout, __VA_ARGS__); \ +} \ + +#define LOG_OPT(lvl, opt, ...) \ +{ \ + if (opt->rto_v >= lvl) \ + (void) fprintf(stdout, __VA_ARGS__); \ +} \ + +#define ERR(...) (void) fprintf(stderr, __VA_ARGS__) + + +#define DBLSEP "================\n" +#define SEP "----------------\n" + + +#define raidz_alloc(size) abd_alloc(size, B_FALSE) +#define raidz_free(p, size) abd_free(p) + + +void init_zio_abd(zio_t *zio); + +void run_raidz_benchmark(void); + +#endif /* RAIDZ_TEST_H */ |