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