Home | History | Annotate | Download | only in profiles
      1 #include "../fio.h"
      2 #include "../profile.h"
      3 #include "../parse.h"
      4 
      5 static unsigned long long size;
      6 static unsigned int loops = 1;
      7 static unsigned int bs = 4096;
      8 static unsigned int nthreads = 1;
      9 static char *dir;
     10 
     11 static char sz_idx[80], bs_idx[80], loop_idx[80], dir_idx[80], t_idx[80];
     12 
     13 static const char *tb_opts[] = {
     14 	"buffered=0", sz_idx, bs_idx, loop_idx, dir_idx, t_idx,
     15 	"timeout=600", "group_reporting", "thread", "overwrite=1",
     16 	"filename=.fio.tio.1:.fio.tio.2:.fio.tio.3:.fio.tio.4",
     17 	"ioengine=sync",
     18 	"name=seqwrite", "rw=write", "end_fsync=1",
     19 	"name=randwrite", "stonewall", "rw=randwrite", "end_fsync=1",
     20 	"name=seqread", "stonewall", "rw=read",
     21 	"name=randread", "stonewall", "rw=randread", NULL,
     22 };
     23 
     24 struct tiobench_options {
     25 	unsigned int pad;
     26 	unsigned long long size;
     27 	unsigned int loops;
     28 	unsigned int bs;
     29 	unsigned int nthreads;
     30 	char *dir;
     31 };
     32 
     33 static struct tiobench_options tiobench_options;
     34 
     35 static struct fio_option options[] = {
     36 	{
     37 		.name	= "size",
     38 		.lname	= "Tiobench size",
     39 		.type	= FIO_OPT_STR_VAL,
     40 		.off1	= offsetof(struct tiobench_options, size),
     41 		.help	= "Size in MB",
     42 		.category = FIO_OPT_C_PROFILE,
     43 		.group	= FIO_OPT_G_TIOBENCH,
     44 	},
     45 	{
     46 		.name	= "block",
     47 		.lname	= "Tiobench block",
     48 		.type	= FIO_OPT_INT,
     49 		.off1	= offsetof(struct tiobench_options, bs),
     50 		.help	= "Block size in bytes",
     51 		.def	= "4k",
     52 		.category = FIO_OPT_C_PROFILE,
     53 		.group	= FIO_OPT_G_TIOBENCH,
     54 	},
     55 	{
     56 		.name	= "numruns",
     57 		.lname	= "Tiobench numruns",
     58 		.type	= FIO_OPT_INT,
     59 		.off1	= offsetof(struct tiobench_options, loops),
     60 		.help	= "Number of runs",
     61 		.category = FIO_OPT_C_PROFILE,
     62 		.group	= FIO_OPT_G_TIOBENCH,
     63 	},
     64 	{
     65 		.name	= "dir",
     66 		.lname	= "Tiobench directory",
     67 		.type	= FIO_OPT_STR_STORE,
     68 		.off1	= offsetof(struct tiobench_options, dir),
     69 		.help	= "Test directory",
     70 		.category = FIO_OPT_C_PROFILE,
     71 		.group	= FIO_OPT_G_TIOBENCH,
     72 	},
     73 	{
     74 		.name	= "threads",
     75 		.lname	= "Tiobench threads",
     76 		.type	= FIO_OPT_INT,
     77 		.off1	= offsetof(struct tiobench_options, nthreads),
     78 		.help	= "Number of Threads",
     79 		.category = FIO_OPT_C_PROFILE,
     80 		.group	= FIO_OPT_G_TIOBENCH,
     81 	},
     82 	{
     83 		.name	= NULL,
     84 	},
     85 };
     86 
     87 /*
     88  * Fill our private options into the command line
     89  */
     90 static int tb_prep_cmdline(void)
     91 {
     92 	/*
     93 	 * tiobench uses size as MB, so multiply up
     94 	 */
     95 	size *= 1024 * 1024ULL;
     96 	if (size)
     97 		sprintf(sz_idx, "size=%llu", size);
     98 	else
     99 		strcpy(sz_idx, "size=4*1024*$mb_memory");
    100 
    101 	sprintf(bs_idx, "bs=%u", bs);
    102 	sprintf(loop_idx, "loops=%u", loops);
    103 
    104 	if (dir)
    105 		sprintf(dir_idx, "directory=%s", dir);
    106 	else
    107 		sprintf(dir_idx, "directory=./");
    108 
    109 	sprintf(t_idx, "numjobs=%u", nthreads);
    110 	return 0;
    111 }
    112 
    113 static struct profile_ops tiobench_profile = {
    114 	.name		= "tiobench",
    115 	.desc		= "tiotest/tiobench benchmark",
    116 	.prep_cmd	= tb_prep_cmdline,
    117 	.cmdline	= tb_opts,
    118 	.options	= options,
    119 	.opt_data	= &tiobench_options,
    120 };
    121 
    122 static void fio_init tiobench_register(void)
    123 {
    124 	if (register_profile(&tiobench_profile))
    125 		log_err("fio: failed to register profile 'tiobench'\n");
    126 }
    127 
    128 static void fio_exit tiobench_unregister(void)
    129 {
    130 	unregister_profile(&tiobench_profile);
    131 }
    132