2013-11-01 23:26:11 +04:00
|
|
|
/*
|
2010-08-26 22:58:00 +04:00
|
|
|
* ZPIOS is a heavily modified version of the original PIOS test code.
|
|
|
|
* It is designed to have the test code running in the Linux kernel
|
2017-01-03 20:31:18 +03:00
|
|
|
* against ZFS while still being flexibly controlled from user space.
|
2010-08-26 22:58:00 +04:00
|
|
|
*
|
|
|
|
* Copyright (C) 2008-2010 Lawrence Livermore National Security, LLC.
|
|
|
|
* Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
|
|
|
|
* Written by Brian Behlendorf <behlendorf1@llnl.gov>.
|
|
|
|
* LLNL-CODE-403049
|
|
|
|
*
|
|
|
|
* Original PIOS Test Code
|
|
|
|
* Copyright (C) 2004 Cluster File Systems, Inc.
|
|
|
|
* Written by Peter Braam <braam@clusterfs.com>
|
|
|
|
* Atul Vidwansa <atul@clusterfs.com>
|
|
|
|
* Milind Dumbare <milind@clusterfs.com>
|
|
|
|
*
|
|
|
|
* This file is part of ZFS on Linux.
|
2013-02-17 23:31:20 +04:00
|
|
|
* For details, see <http://zfsonlinux.org/>.
|
2010-08-26 22:58:00 +04:00
|
|
|
*
|
|
|
|
* ZPIOS is free software; you can redistribute it and/or modify it
|
|
|
|
* under the terms of the GNU General Public License as published by the
|
|
|
|
* Free Software Foundation; either version 2 of the License, or (at your
|
|
|
|
* option) any later version.
|
|
|
|
*
|
|
|
|
* ZPIOS is distributed in the hope that it will be useful, but WITHOUT
|
|
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
|
|
* for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License along
|
|
|
|
* with ZPIOS. If not, see <http://www.gnu.org/licenses/>.
|
2015-09-18 02:55:22 +03:00
|
|
|
*
|
|
|
|
* Copyright (c) 2015, Intel Corporation.
|
2013-11-01 23:26:11 +04:00
|
|
|
*/
|
2010-08-26 22:58:00 +04:00
|
|
|
|
|
|
|
#ifndef _ZPIOS_H
|
2013-11-01 23:26:11 +04:00
|
|
|
#define _ZPIOS_H
|
2010-08-26 22:58:00 +04:00
|
|
|
|
|
|
|
#include <zpios-ctl.h>
|
|
|
|
|
2013-11-01 23:26:11 +04:00
|
|
|
#define VERSION_SIZE 64
|
2010-08-26 22:58:00 +04:00
|
|
|
|
|
|
|
/* Regular expressions */
|
2015-09-18 02:55:22 +03:00
|
|
|
#define REGEX_NUMBERS "^[0-9]+$"
|
2013-11-01 23:26:11 +04:00
|
|
|
#define REGEX_NUMBERS_COMMA "^([0-9]+,)*[0-9]+$"
|
2015-09-18 02:55:22 +03:00
|
|
|
#define REGEX_SIZE "^[0-9]+[kKmMgGtT]?$"
|
|
|
|
#define REGEX_SIZE_COMMA "^([0-9]+[kKmMgGtT]?,)*[0-9]+[kKmMgGtT]?$"
|
2010-08-26 22:58:00 +04:00
|
|
|
|
|
|
|
/* Flags for low, high, incr */
|
2013-11-01 23:26:11 +04:00
|
|
|
#define FLAG_SET 0x01
|
|
|
|
#define FLAG_LOW 0x02
|
|
|
|
#define FLAG_HIGH 0x04
|
|
|
|
#define FLAG_INCR 0x08
|
2010-08-26 22:58:00 +04:00
|
|
|
|
2013-11-01 23:26:11 +04:00
|
|
|
#define TRUE 1
|
|
|
|
#define FALSE 0
|
2010-08-26 22:58:00 +04:00
|
|
|
|
2013-11-01 23:26:11 +04:00
|
|
|
#define KB (1024)
|
|
|
|
#define MB (KB * 1024)
|
|
|
|
#define GB (MB * 1024)
|
|
|
|
#define TB (GB * 1024)
|
2010-08-26 22:58:00 +04:00
|
|
|
|
2013-11-01 23:26:11 +04:00
|
|
|
#define KMGT_SIZE 16
|
2010-08-26 22:58:00 +04:00
|
|
|
|
2013-11-01 23:26:11 +04:00
|
|
|
/*
|
|
|
|
* All offsets, sizes and counts can be passed to the application in
|
2010-08-26 22:58:00 +04:00
|
|
|
* multiple ways.
|
|
|
|
* 1. a value (stored in val[0], val_count will be 1)
|
|
|
|
* 2. a comma separated list of values (stored in val[], using val_count)
|
|
|
|
* 3. a range and block sizes, low, high, factor (val_count must be 0)
|
|
|
|
*/
|
|
|
|
typedef struct pios_range_repeat {
|
2013-11-01 23:26:11 +04:00
|
|
|
uint64_t val[32]; /* Comma sep array, or low, high, inc */
|
|
|
|
uint64_t val_count; /* Num of values */
|
2010-08-26 22:58:00 +04:00
|
|
|
uint64_t val_low;
|
|
|
|
uint64_t val_high;
|
|
|
|
uint64_t val_inc_perc;
|
2013-11-01 23:26:11 +04:00
|
|
|
uint64_t next_val; /* For multiple runs in get_next() */
|
2010-08-26 22:58:00 +04:00
|
|
|
} range_repeat_t;
|
|
|
|
|
|
|
|
typedef struct cmd_args {
|
2013-11-01 23:26:11 +04:00
|
|
|
range_repeat_t T; /* Thread count */
|
|
|
|
range_repeat_t N; /* Region count */
|
|
|
|
range_repeat_t O; /* Offset count */
|
|
|
|
range_repeat_t C; /* Chunksize */
|
|
|
|
range_repeat_t S; /* Regionsize */
|
2015-09-18 02:55:22 +03:00
|
|
|
range_repeat_t B; /* Blocksize */
|
2013-11-01 23:26:11 +04:00
|
|
|
|
|
|
|
const char *pool; /* Pool */
|
|
|
|
const char *name; /* Name */
|
|
|
|
uint32_t flags; /* Flags */
|
2015-09-18 02:55:22 +03:00
|
|
|
uint32_t block_size; /* ZFS block size */
|
2013-11-01 23:26:11 +04:00
|
|
|
uint32_t io_type; /* DMUIO only */
|
|
|
|
uint32_t verbose; /* Verbose */
|
|
|
|
uint32_t human_readable; /* Human readable output */
|
|
|
|
|
|
|
|
uint64_t regionnoise; /* Region noise */
|
|
|
|
uint64_t chunknoise; /* Chunk noise */
|
|
|
|
uint64_t thread_delay; /* Thread delay */
|
|
|
|
|
|
|
|
char pre[ZPIOS_PATH_SIZE]; /* Pre-exec hook */
|
|
|
|
char post[ZPIOS_PATH_SIZE]; /* Post-exec hook */
|
|
|
|
char log[ZPIOS_PATH_SIZE]; /* Requested log dir */
|
2010-08-26 22:58:00 +04:00
|
|
|
|
|
|
|
/* Control */
|
|
|
|
int current_id;
|
|
|
|
uint64_t current_T;
|
|
|
|
uint64_t current_N;
|
|
|
|
uint64_t current_C;
|
|
|
|
uint64_t current_S;
|
|
|
|
uint64_t current_O;
|
2015-09-18 02:55:22 +03:00
|
|
|
uint64_t current_B;
|
2010-08-26 22:58:00 +04:00
|
|
|
|
|
|
|
uint32_t rc;
|
|
|
|
} cmd_args_t;
|
|
|
|
|
|
|
|
int set_count(char *pattern1, char *pattern2, range_repeat_t *range,
|
2013-11-01 23:26:11 +04:00
|
|
|
char *optarg, uint32_t *flags, char *arg);
|
2010-08-26 22:58:00 +04:00
|
|
|
int set_lhi(char *pattern, range_repeat_t *range, char *optarg,
|
2013-11-01 23:26:11 +04:00
|
|
|
int flag, uint32_t *flag_thread, char *arg);
|
2010-08-26 22:58:00 +04:00
|
|
|
int set_noise(uint64_t *noise, char *optarg, char *arg);
|
|
|
|
int set_load_params(cmd_args_t *args, char *optarg);
|
|
|
|
int check_mutual_exclusive_command_lines(uint32_t flag, char *arg);
|
|
|
|
void print_stats_header(cmd_args_t *args);
|
|
|
|
void print_stats(cmd_args_t *args, zpios_cmd_t *cmd);
|
|
|
|
|
|
|
|
#endif /* _ZPIOS_H */
|