Hello community, here is the log from the commit of package fio for openSUSE:Factory checked in at 2016-05-29 03:13:32 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/fio (Old) and /work/SRC/openSUSE:Factory/.fio.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "fio" Changes: -------- --- /work/SRC/openSUSE:Factory/fio/fio.changes 2016-05-23 16:40:01.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.fio.new/fio.changes 2016-05-29 03:14:33.000000000 +0200 @@ -1,0 +2,6 @@ +Fri May 27 14:30:15 UTC 2016 - mplus...@suse.com + +- Update to version 2.11: + * No changelog available + +------------------------------------------------------------------- Old: ---- fio-2.10.tar.bz2 New: ---- fio-2.11.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ fio.spec ++++++ --- /var/tmp/diff_new_pack.MGeMjc/_old 2016-05-29 03:14:34.000000000 +0200 +++ /var/tmp/diff_new_pack.MGeMjc/_new 2016-05-29 03:14:34.000000000 +0200 @@ -18,7 +18,7 @@ Name: fio -Version: 2.10 +Version: 2.11 Release: 0 Summary: Flexible I/O Tester/benchmarker License: GPL-2.0 ++++++ fio-2.10.tar.bz2 -> fio-2.11.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fio-2.10/FIO-VERSION-GEN new/fio-2.11/FIO-VERSION-GEN --- old/fio-2.10/FIO-VERSION-GEN 2016-05-21 17:00:54.000000000 +0200 +++ new/fio-2.11/FIO-VERSION-GEN 2016-05-25 02:42:04.000000000 +0200 @@ -1,7 +1,7 @@ #!/bin/sh GVF=FIO-VERSION-FILE -DEF_VER=fio-2.10 +DEF_VER=fio-2.11 LF=' ' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fio-2.10/HOWTO new/fio-2.11/HOWTO --- old/fio-2.10/HOWTO 2016-05-21 17:00:54.000000000 +0200 +++ new/fio-2.11/HOWTO 2016-05-25 02:42:04.000000000 +0200 @@ -374,6 +374,11 @@ default of $jobname.$jobnum.$filenum will be used if no other format specifier is given. +unique_filename=bool To avoid collisions between networked clients, fio + defaults to prefixing any generated filenames (with a directory + specified) with the source of the client connecting. To disable + this behavior, set this option to 0. + opendir=str Tell fio to recursively add any file it can find in this directory and down the file system tree. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fio-2.10/backend.c new/fio-2.11/backend.c --- old/fio-2.10/backend.c 2016-05-21 17:00:54.000000000 +0200 +++ new/fio-2.11/backend.c 2016-05-25 02:42:04.000000000 +0200 @@ -524,6 +524,9 @@ break; } + if (td->flags & TD_F_REGROW_LOGS) + regrow_logs(td); + /* * when doing I/O (not when verifying), * check for any errors that are to be ignored diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fio-2.10/cconv.c new/fio-2.11/cconv.c --- old/fio-2.10/cconv.c 2016-05-21 17:00:54.000000000 +0200 +++ new/fio-2.11/cconv.c 2016-05-25 02:42:04.000000000 +0200 @@ -139,6 +139,7 @@ o->ratecycle = le32_to_cpu(top->ratecycle); o->io_submit_mode = le32_to_cpu(top->io_submit_mode); + o->unique_filename = le32_to_cpu(top->unique_filename); o->nr_files = le32_to_cpu(top->nr_files); o->open_files = le32_to_cpu(top->open_files); o->file_lock_mode = le32_to_cpu(top->file_lock_mode); @@ -333,6 +334,7 @@ top->ratecycle = cpu_to_le32(o->ratecycle); top->io_submit_mode = cpu_to_le32(o->io_submit_mode); top->nr_files = cpu_to_le32(o->nr_files); + top->unique_filename = cpu_to_le32(o->unique_filename); top->open_files = cpu_to_le32(o->open_files); top->file_lock_mode = cpu_to_le32(o->file_lock_mode); top->odirect = cpu_to_le32(o->odirect); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fio-2.10/filesetup.c new/fio-2.11/filesetup.c --- old/fio-2.10/filesetup.c 2016-05-21 17:00:54.000000000 +0200 +++ new/fio-2.11/filesetup.c 2016-05-25 02:42:04.000000000 +0200 @@ -1335,7 +1335,8 @@ dprint(FD_FILE, "add file %s\n", fname); if (td->o.directory) - len = set_name_idx(file_name, PATH_MAX, td->o.directory, numjob); + len = set_name_idx(file_name, PATH_MAX, td->o.directory, numjob, + td->o.unique_filename); sprintf(file_name + len, "%s", fname); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fio-2.10/fio.1 new/fio-2.11/fio.1 --- old/fio-2.10/fio.1 2016-05-21 17:00:54.000000000 +0200 +++ new/fio-2.11/fio.1 2016-05-25 02:42:04.000000000 +0200 @@ -247,6 +247,11 @@ .RE .P .TP +.BI unique_filename \fR=\fPbool +To avoid collisions between networked clients, fio defaults to prefixing +any generated filenames (with a directory specified) with the source of +the client connecting. To disable this behavior, set this option to 0. +.TP .BI lockfile \fR=\fPstr Fio defaults to not locking any files before it does IO to them. If a file or file descriptor is shared, fio can serialize IO to that file to make the end @@ -2082,7 +2087,7 @@ .B Trace file format v2 .RS The second version of the trace file format was added in Fio version 1.17. -It allows to access more then one file per trace and has a bigger set of +It allows one to access more then one file per trace and has a bigger set of possible file actions. The first line of the trace file has to be: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fio-2.10/gettime-thread.c new/fio-2.11/gettime-thread.c --- old/fio-2.10/gettime-thread.c 2016-05-21 17:00:54.000000000 +0200 +++ new/fio-2.11/gettime-thread.c 2016-05-25 02:42:04.000000000 +0200 @@ -81,7 +81,7 @@ ret = pthread_detach(gtod_thread); if (ret) { - log_err("Can't detatch gtod thread: %s\n", strerror(ret)); + log_err("Can't detach gtod thread: %s\n", strerror(ret)); goto err; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fio-2.10/idletime.c new/fio-2.11/idletime.c --- old/fio-2.10/idletime.c 2016-05-21 17:00:54.000000000 +0200 +++ new/fio-2.11/idletime.c 2016-05-25 02:42:04.000000000 +0200 @@ -260,7 +260,7 @@ if ((ret = pthread_detach(ipt->thread))) { /* log error and let the thread spin */ - log_err("fio: pthread_detatch %s\n", strerror(ret)); + log_err("fio: pthread_detach %s\n", strerror(ret)); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fio-2.10/memory.c new/fio-2.11/memory.c --- old/fio-2.10/memory.c 2016-05-21 17:00:54.000000000 +0200 +++ new/fio-2.11/memory.c 2016-05-25 02:42:04.000000000 +0200 @@ -89,7 +89,7 @@ " support huge pages.\n"); } else if (errno == ENOMEM) { log_err("fio: no huge pages available, do you" - " need to alocate some? See HOWTO.\n"); + " need to allocate some? See HOWTO.\n"); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fio-2.10/options.c new/fio-2.11/options.c --- old/fio-2.10/options.c 2016-05-21 17:00:54.000000000 +0200 +++ new/fio-2.11/options.c 2016-05-25 02:42:04.000000000 +0200 @@ -1124,7 +1124,8 @@ * Returns the directory at the index, indexes > entires will be * assigned via modulo division of the index */ -int set_name_idx(char *target, size_t tlen, char *input, int index) +int set_name_idx(char *target, size_t tlen, char *input, int index, + bool unique_filename) { unsigned int cur_idx; int len; @@ -1136,7 +1137,7 @@ for (cur_idx = 0; cur_idx <= index; cur_idx++) fname = get_next_name(&str); - if (client_sockaddr_str[0]) { + if (client_sockaddr_str[0] && unique_filename) { len = snprintf(target, tlen, "%s/%s.", fname, client_sockaddr_str); } else @@ -1390,6 +1391,7 @@ }, { .name = "filename_format", + .lname = "Filename Format", .type = FIO_OPT_STR_STORE, .off1 = td_var_offset(filename_format), .prio = -1, /* must come after "directory" */ @@ -1399,6 +1401,16 @@ .group = FIO_OPT_G_FILENAME, }, { + .name = "unique_filename", + .lname = "Unique Filename", + .type = FIO_OPT_BOOL, + .off1 = td_var_offset(unique_filename), + .help = "For network clients, prefix file with source IP", + .def = "1", + .category = FIO_OPT_C_FILE, + .group = FIO_OPT_G_FILENAME, + }, + { .name = "lockfile", .lname = "Lockfile", .type = FIO_OPT_STR, @@ -1965,6 +1977,7 @@ }, { .name = "random_generator", + .lname = "Random Generator", .type = FIO_OPT_STR, .off1 = td_var_offset(random_generator), .help = "Type of random number generator to use", @@ -1989,6 +2002,7 @@ }, { .name = "random_distribution", + .lname = "Random Distribution", .type = FIO_OPT_STR, .off1 = td_var_offset(random_distribution), .cb = str_random_distribution_cb, @@ -2009,7 +2023,7 @@ }, { .ival = "normal", .oval = FIO_RAND_DIST_GAUSS, - .help = "Normal (gaussian) distribution", + .help = "Normal (Gaussian) distribution", }, { .ival = "zoned", .oval = FIO_RAND_DIST_ZONED, @@ -2044,6 +2058,7 @@ }, { .name = "allrandrepeat", + .lname = "All Random Repeat", .type = FIO_OPT_BOOL, .off1 = td_var_offset(allrand_repeatable), .help = "Use repeatable random numbers for everything", @@ -2543,6 +2558,7 @@ }, { .name = "verifysort_nr", + .lname = "Verify Sort Nr", .type = FIO_OPT_INT, .off1 = td_var_offset(verifysort_nr), .help = "Pre-load and sort verify blocks for a read workload", @@ -2664,6 +2680,7 @@ #endif { .name = "experimental_verify", + .lname = "Experimental Verify", .off1 = td_var_offset(experimental_verify), .type = FIO_OPT_BOOL, .help = "Enable experimental verification", @@ -3078,6 +3095,7 @@ }, { .name = "max_latency", + .lname = "Max Latency", .type = FIO_OPT_INT, .off1 = td_var_offset(max_latency), .help = "Maximum tolerated IO latency (usec)", @@ -3172,6 +3190,7 @@ }, { .name = "create_only", + .lname = "Create Only", .type = FIO_OPT_BOOL, .off1 = td_var_offset(create_only), .help = "Only perform file creation phase", @@ -3254,6 +3273,7 @@ #ifdef CONFIG_LIBNUMA { .name = "numa_cpu_nodes", + .lname = "NUMA CPU Nodes", .type = FIO_OPT_STR, .cb = str_numa_cpunodes_cb, .off1 = td_var_offset(numa_cpunodes), @@ -3263,6 +3283,7 @@ }, { .name = "numa_mem_policy", + .lname = "NUMA Memory Policy", .type = FIO_OPT_STR, .cb = str_numa_mpol_cb, .off1 = td_var_offset(numa_memnodes), @@ -3353,6 +3374,7 @@ }, { .name = "per_job_logs", + .lname = "Per Job Logs", .type = FIO_OPT_BOOL, .off1 = td_var_offset(per_job_logs), .help = "Include job number in generated log files or not", @@ -3683,6 +3705,7 @@ }, { .name = "unified_rw_reporting", + .lname = "Unified RW Reporting", .type = FIO_OPT_BOOL, .off1 = td_var_offset(unified_rw_rep), .help = "Unify reporting across data direction", @@ -3736,6 +3759,7 @@ }, { .name = "ignore_error", + .lname = "Ignore Error", .type = FIO_OPT_STR, .cb = str_ignore_error_cb, .off1 = td_var_offset(ignore_error_nr), @@ -3746,6 +3770,7 @@ }, { .name = "error_dump", + .lname = "Error Dump", .type = FIO_OPT_BOOL, .off1 = td_var_offset(error_dump), .def = "0", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fio-2.10/options.h new/fio-2.11/options.h --- old/fio-2.10/options.h 2016-05-21 17:00:54.000000000 +0200 +++ new/fio-2.11/options.h 2016-05-25 02:42:04.000000000 +0200 @@ -20,7 +20,7 @@ struct thread_data; void fio_options_free(struct thread_data *); char *get_name_idx(char *, int); -int set_name_idx(char *, size_t, char *, int); +int set_name_idx(char *, size_t, char *, int, bool); extern char client_sockaddr_str[]; /* used with --client option */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fio-2.10/os/windows/install.wxs new/fio-2.11/os/windows/install.wxs --- old/fio-2.10/os/windows/install.wxs 2016-05-21 17:00:54.000000000 +0200 +++ new/fio-2.11/os/windows/install.wxs 2016-05-25 02:42:04.000000000 +0200 @@ -10,7 +10,7 @@ <Product Id="*" Codepage="1252" Language="1033" Manufacturer="fio" Name="fio" - UpgradeCode="2338A332-5511-43CF-B9BD-5C60496CCFCC" Version="2.10"> + UpgradeCode="2338A332-5511-43CF-B9BD-5C60496CCFCC" Version="2.11"> <Package Description="Flexible IO Tester" InstallerVersion="301" Keywords="Installer,MSI,Database" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fio-2.10/parse.c new/fio-2.11/parse.c --- old/fio-2.10/parse.c 2016-05-21 17:00:54.000000000 +0200 +++ new/fio-2.11/parse.c 2016-05-25 02:42:04.000000000 +0200 @@ -1234,6 +1234,8 @@ { if (o->type == FIO_OPT_DEPRECATED) return; + if (o->name && !o->lname) + log_err("Option %s: missing long option name\n", o->name); if (o->type == FIO_OPT_BOOL) { o->minval = 0; o->maxval = 1; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fio-2.10/server.h new/fio-2.11/server.h --- old/fio-2.10/server.h 2016-05-21 17:00:54.000000000 +0200 +++ new/fio-2.11/server.h 2016-05-25 02:42:04.000000000 +0200 @@ -38,7 +38,7 @@ }; enum { - FIO_SERVER_VER = 53, + FIO_SERVER_VER = 54, FIO_SERVER_MAX_FRAGMENT_PDU = 1024, FIO_SERVER_MAX_CMD_MB = 2048, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fio-2.10/thread_options.h new/fio-2.11/thread_options.h --- old/fio-2.10/thread_options.h 2016-05-21 17:00:54.000000000 +0200 +++ new/fio-2.11/thread_options.h 2016-05-25 02:42:04.000000000 +0200 @@ -65,6 +65,8 @@ unsigned int iodepth_batch_complete_min; unsigned int iodepth_batch_complete_max; + unsigned int unique_filename; + unsigned long long size; unsigned long long io_limit; unsigned int size_percent; @@ -325,6 +327,7 @@ uint32_t size_percent; uint32_t fill_device; uint32_t file_append; + uint32_t unique_filename; uint64_t file_size_low; uint64_t file_size_high; uint64_t start_offset; @@ -388,6 +391,7 @@ uint32_t bs_unaligned; uint32_t fsync_on_close; uint32_t bs_is_seq_rand; + uint32_t pad1; uint32_t random_distribution; uint32_t exitall_error; @@ -411,7 +415,6 @@ uint32_t fsync_blocks; uint32_t fdatasync_blocks; uint32_t barrier_blocks; - uint32_t pad1; uint64_t start_delay; uint64_t start_delay_high; uint64_t timeout; @@ -476,7 +479,6 @@ uint64_t trim_backlog; uint32_t clat_percentiles; uint32_t percentile_precision; - uint32_t pad2; fio_fp64_t percentile_list[FIO_IO_U_LIST_MAX_LEN]; uint8_t read_iolog_file[FIO_TOP_STR_MAX]; @@ -531,7 +533,7 @@ uint64_t number_ios; uint32_t sync_file_range; - uint32_t pad3; + uint32_t pad2; uint64_t latency_target; uint64_t latency_window; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fio-2.10/tools/fiologparser.py new/fio-2.11/tools/fiologparser.py --- old/fio-2.10/tools/fiologparser.py 2016-05-21 17:00:54.000000000 +0200 +++ new/fio-2.11/tools/fiologparser.py 2016-05-25 02:42:04.000000000 +0200 @@ -14,8 +14,7 @@ # to see per-interval average completion latency. import argparse -import numpy -import scipy +import math def parse_args(): parser = argparse.ArgumentParser() @@ -82,7 +81,6 @@ # to debug this routine, use # # sort -n -t ',' -k 2 small.log # on your input. -# Sometimes scipy interpolates between two values to get a percentile def my_extend( vlist, val ): vlist.extend(val) @@ -102,21 +100,16 @@ for sample_array in sample_arrays: samplevalue_arrays.append( [ sample.value for sample in sample_array ] ) - #print('samplevalue_arrays len: %d' % len(samplevalue_arrays)) - #print('samplevalue_arrays elements len: ' + \ - #str(map( lambda l: len(l), samplevalue_arrays))) # collapse list of lists of sample values into list of sample values samplevalues = reduce( array_collapser, samplevalue_arrays, [] ) - #print('samplevalues: ' + str(sorted(samplevalues))) # compute all stats and print them - myarray = scipy.fromiter(samplevalues, float) - mymin = scipy.amin(myarray) - myavg = scipy.average(myarray) - mymedian = scipy.median(myarray) - my90th = scipy.percentile(myarray, 90) - my95th = scipy.percentile(myarray, 95) - my99th = scipy.percentile(myarray, 99) - mymax = scipy.amax(myarray) + mymin = min(samplevalues) + myavg = sum(samplevalues) / float(len(samplevalues)) + mymedian = median(samplevalues) + my90th = percentile(samplevalues, 0.90) + my95th = percentile(samplevalues, 0.95) + my99th = percentile(samplevalues, 0.99) + mymax = max(samplevalues) print( '%f, %d, %f, %f, %f, %f, %f, %f, %f' % ( start, len(samplevalues), mymin, myavg, mymedian, my90th, my95th, my99th, mymax)) @@ -125,6 +118,18 @@ start += ctx.interval end += ctx.interval +def median(values): + s=sorted(values) + return float(s[(len(s)-1)/2]+s[(len(s)/2)])/2 + +def percentile(values, p): + s = sorted(values) + k = (len(s)-1) * p + f = math.floor(k) + c = math.ceil(k) + if f == c: + return s[int(k)] + return (s[int(f)] * (c-k)) + (s[int(c)] * (k-f)) def print_default(ctx, series): ftime = get_ftime(series)