179d16311c8d0c7188d73df77838fb1b4b6ff58dbJens Axboe#include "../fio.h" 279d16311c8d0c7188d73df77838fb1b4b6ff58dbJens Axboe#include "../profile.h" 3e2de69dac799a1eecac1b52085f908729591ef5aJens Axboe#include "../parse.h" 4e2de69dac799a1eecac1b52085f908729591ef5aJens Axboe 52363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboestatic unsigned long long size; 62363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboestatic unsigned int loops = 1; 72363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboestatic unsigned int bs = 4096; 82363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboestatic unsigned int nthreads = 1; 9e2de69dac799a1eecac1b52085f908729591ef5aJens Axboestatic char *dir; 1079d16311c8d0c7188d73df77838fb1b4b6ff58dbJens Axboe 1110aa136bddbaa7c845ab4eacb4a9a4a88d6657a3Jens Axboestatic char sz_idx[80], bs_idx[80], loop_idx[80], dir_idx[80], t_idx[80]; 122363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe 1379d16311c8d0c7188d73df77838fb1b4b6ff58dbJens Axboestatic const char *tb_opts[] = { 142363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe "buffered=0", sz_idx, bs_idx, loop_idx, dir_idx, t_idx, 152363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe "timeout=600", "group_reporting", "thread", "overwrite=1", 1679d16311c8d0c7188d73df77838fb1b4b6ff58dbJens Axboe "filename=.fio.tio.1:.fio.tio.2:.fio.tio.3:.fio.tio.4", 17774a99b533369dc8d35c6cd09223255760cde9baJens Axboe "ioengine=sync", 1879d16311c8d0c7188d73df77838fb1b4b6ff58dbJens Axboe "name=seqwrite", "rw=write", "end_fsync=1", 1979d16311c8d0c7188d73df77838fb1b4b6ff58dbJens Axboe "name=randwrite", "stonewall", "rw=randwrite", "end_fsync=1", 2079d16311c8d0c7188d73df77838fb1b4b6ff58dbJens Axboe "name=seqread", "stonewall", "rw=read", 2179d16311c8d0c7188d73df77838fb1b4b6ff58dbJens Axboe "name=randread", "stonewall", "rw=randread", NULL, 2279d16311c8d0c7188d73df77838fb1b4b6ff58dbJens Axboe}; 2379d16311c8d0c7188d73df77838fb1b4b6ff58dbJens Axboe 247b504eddc4b039f2db3a0626bd08f880c5f4de27Jens Axboestruct tiobench_options { 257b504eddc4b039f2db3a0626bd08f880c5f4de27Jens Axboe unsigned int pad; 267b504eddc4b039f2db3a0626bd08f880c5f4de27Jens Axboe unsigned long long size; 277b504eddc4b039f2db3a0626bd08f880c5f4de27Jens Axboe unsigned int loops; 287b504eddc4b039f2db3a0626bd08f880c5f4de27Jens Axboe unsigned int bs; 297b504eddc4b039f2db3a0626bd08f880c5f4de27Jens Axboe unsigned int nthreads; 307b504eddc4b039f2db3a0626bd08f880c5f4de27Jens Axboe char *dir; 317b504eddc4b039f2db3a0626bd08f880c5f4de27Jens Axboe}; 327b504eddc4b039f2db3a0626bd08f880c5f4de27Jens Axboe 337b504eddc4b039f2db3a0626bd08f880c5f4de27Jens Axboestatic struct tiobench_options tiobench_options; 347b504eddc4b039f2db3a0626bd08f880c5f4de27Jens Axboe 35e2de69dac799a1eecac1b52085f908729591ef5aJens Axboestatic struct fio_option options[] = { 36e2de69dac799a1eecac1b52085f908729591ef5aJens Axboe { 37e2de69dac799a1eecac1b52085f908729591ef5aJens Axboe .name = "size", 38e8b0e958cd219cabb1154e2b06036863a7d6dbd7Jens Axboe .lname = "Tiobench size", 392363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe .type = FIO_OPT_STR_VAL, 407b504eddc4b039f2db3a0626bd08f880c5f4de27Jens Axboe .off1 = offsetof(struct tiobench_options, size), 41e2de69dac799a1eecac1b52085f908729591ef5aJens Axboe .help = "Size in MB", 4213fca827b9c2bb71358fcaa3a7e6e89419d5b1b8Jens Axboe .category = FIO_OPT_C_PROFILE, 4313fca827b9c2bb71358fcaa3a7e6e89419d5b1b8Jens Axboe .group = FIO_OPT_G_TIOBENCH, 44e2de69dac799a1eecac1b52085f908729591ef5aJens Axboe }, 45e2de69dac799a1eecac1b52085f908729591ef5aJens Axboe { 46e2de69dac799a1eecac1b52085f908729591ef5aJens Axboe .name = "block", 47e8b0e958cd219cabb1154e2b06036863a7d6dbd7Jens Axboe .lname = "Tiobench block", 48e2de69dac799a1eecac1b52085f908729591ef5aJens Axboe .type = FIO_OPT_INT, 497b504eddc4b039f2db3a0626bd08f880c5f4de27Jens Axboe .off1 = offsetof(struct tiobench_options, bs), 50e2de69dac799a1eecac1b52085f908729591ef5aJens Axboe .help = "Block size in bytes", 51e2de69dac799a1eecac1b52085f908729591ef5aJens Axboe .def = "4k", 5213fca827b9c2bb71358fcaa3a7e6e89419d5b1b8Jens Axboe .category = FIO_OPT_C_PROFILE, 5313fca827b9c2bb71358fcaa3a7e6e89419d5b1b8Jens Axboe .group = FIO_OPT_G_TIOBENCH, 54e2de69dac799a1eecac1b52085f908729591ef5aJens Axboe }, 55e2de69dac799a1eecac1b52085f908729591ef5aJens Axboe { 56e2de69dac799a1eecac1b52085f908729591ef5aJens Axboe .name = "numruns", 57e8b0e958cd219cabb1154e2b06036863a7d6dbd7Jens Axboe .lname = "Tiobench numruns", 58e2de69dac799a1eecac1b52085f908729591ef5aJens Axboe .type = FIO_OPT_INT, 597b504eddc4b039f2db3a0626bd08f880c5f4de27Jens Axboe .off1 = offsetof(struct tiobench_options, loops), 60e2de69dac799a1eecac1b52085f908729591ef5aJens Axboe .help = "Number of runs", 6113fca827b9c2bb71358fcaa3a7e6e89419d5b1b8Jens Axboe .category = FIO_OPT_C_PROFILE, 6213fca827b9c2bb71358fcaa3a7e6e89419d5b1b8Jens Axboe .group = FIO_OPT_G_TIOBENCH, 63e2de69dac799a1eecac1b52085f908729591ef5aJens Axboe }, 64e2de69dac799a1eecac1b52085f908729591ef5aJens Axboe { 65e2de69dac799a1eecac1b52085f908729591ef5aJens Axboe .name = "dir", 66e8b0e958cd219cabb1154e2b06036863a7d6dbd7Jens Axboe .lname = "Tiobench directory", 67e2de69dac799a1eecac1b52085f908729591ef5aJens Axboe .type = FIO_OPT_STR_STORE, 687b504eddc4b039f2db3a0626bd08f880c5f4de27Jens Axboe .off1 = offsetof(struct tiobench_options, dir), 69e2de69dac799a1eecac1b52085f908729591ef5aJens Axboe .help = "Test directory", 7013fca827b9c2bb71358fcaa3a7e6e89419d5b1b8Jens Axboe .category = FIO_OPT_C_PROFILE, 7113fca827b9c2bb71358fcaa3a7e6e89419d5b1b8Jens Axboe .group = FIO_OPT_G_TIOBENCH, 72e2de69dac799a1eecac1b52085f908729591ef5aJens Axboe }, 73e2de69dac799a1eecac1b52085f908729591ef5aJens Axboe { 742363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe .name = "threads", 75e8b0e958cd219cabb1154e2b06036863a7d6dbd7Jens Axboe .lname = "Tiobench threads", 762363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe .type = FIO_OPT_INT, 777b504eddc4b039f2db3a0626bd08f880c5f4de27Jens Axboe .off1 = offsetof(struct tiobench_options, nthreads), 782363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe .help = "Number of Threads", 7913fca827b9c2bb71358fcaa3a7e6e89419d5b1b8Jens Axboe .category = FIO_OPT_C_PROFILE, 8013fca827b9c2bb71358fcaa3a7e6e89419d5b1b8Jens Axboe .group = FIO_OPT_G_TIOBENCH, 812363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe }, 822363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe { 83e2de69dac799a1eecac1b52085f908729591ef5aJens Axboe .name = NULL, 84e2de69dac799a1eecac1b52085f908729591ef5aJens Axboe }, 85e2de69dac799a1eecac1b52085f908729591ef5aJens Axboe}; 86e2de69dac799a1eecac1b52085f908729591ef5aJens Axboe 872363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe/* 882363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe * Fill our private options into the command line 892363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe */ 90d4afedfd152cea890ffa7d45bf1664fb70218c45Jens Axboestatic int tb_prep_cmdline(void) 912363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe{ 922363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe /* 932363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe * tiobench uses size as MB, so multiply up 942363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe */ 952363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe size *= 1024 * 1024ULL; 962363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe if (size) 972363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe sprintf(sz_idx, "size=%llu", size); 982363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe else 992363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe strcpy(sz_idx, "size=4*1024*$mb_memory"); 1002363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe 1012363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe sprintf(bs_idx, "bs=%u", bs); 1022363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe sprintf(loop_idx, "loops=%u", loops); 1032363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe 1042363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe if (dir) 1052363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe sprintf(dir_idx, "directory=%s", dir); 1062363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe else 1072363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe sprintf(dir_idx, "directory=./"); 1082363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe 1092363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe sprintf(t_idx, "numjobs=%u", nthreads); 110d4afedfd152cea890ffa7d45bf1664fb70218c45Jens Axboe return 0; 1112363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe} 1122363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe 11379d16311c8d0c7188d73df77838fb1b4b6ff58dbJens Axboestatic struct profile_ops tiobench_profile = { 11479d16311c8d0c7188d73df77838fb1b4b6ff58dbJens Axboe .name = "tiobench", 115f5b6bb85364fcb8b2ac8d922ca65afd9dfabc9bbJens Axboe .desc = "tiotest/tiobench benchmark", 1162363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe .prep_cmd = tb_prep_cmdline, 1172363d8df7c0c6fe0613dc8e7ae2fa6f098cbc0d8Jens Axboe .cmdline = tb_opts, 1187b504eddc4b039f2db3a0626bd08f880c5f4de27Jens Axboe .options = options, 1197b504eddc4b039f2db3a0626bd08f880c5f4de27Jens Axboe .opt_data = &tiobench_options, 12079d16311c8d0c7188d73df77838fb1b4b6ff58dbJens Axboe}; 12179d16311c8d0c7188d73df77838fb1b4b6ff58dbJens Axboe 12279d16311c8d0c7188d73df77838fb1b4b6ff58dbJens Axboestatic void fio_init tiobench_register(void) 12379d16311c8d0c7188d73df77838fb1b4b6ff58dbJens Axboe{ 12407b3232de97ac32a873f0b5d17c8f49c18ed3ae7Jens Axboe if (register_profile(&tiobench_profile)) 12507b3232de97ac32a873f0b5d17c8f49c18ed3ae7Jens Axboe log_err("fio: failed to register profile 'tiobench'\n"); 12679d16311c8d0c7188d73df77838fb1b4b6ff58dbJens Axboe} 12779d16311c8d0c7188d73df77838fb1b4b6ff58dbJens Axboe 12879d16311c8d0c7188d73df77838fb1b4b6ff58dbJens Axboestatic void fio_exit tiobench_unregister(void) 12979d16311c8d0c7188d73df77838fb1b4b6ff58dbJens Axboe{ 13079d16311c8d0c7188d73df77838fb1b4b6ff58dbJens Axboe unregister_profile(&tiobench_profile); 13179d16311c8d0c7188d73df77838fb1b4b6ff58dbJens Axboe} 132