From 1b4c6ab99f88413437a3e0d3f718ba7e54c5a8f6 Mon Sep 17 00:00:00 2001 From: Eric Sandeen Date: Jun 02 2018 02:17:58 +0000 Subject: New upstream version v3.7 --- diff --git a/.gitignore b/.gitignore index 35acaf5..e9b5100 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ /fio-3.3.tar.bz2 /fio-3.4.tar.bz2 /fio-3.6.tar.bz2 +/fio-3.7.tar.bz2 diff --git a/fio-python3.patch b/fio-python3.patch deleted file mode 100644 index 957cc14..0000000 --- a/fio-python3.patch +++ /dev/null @@ -1,483 +0,0 @@ -From 5eac3b00238b450ac0679121a76f1e566ca8f468 Mon Sep 17 00:00:00 2001 -From: Bill O'Donnell -Date: Fri, 4 May 2018 14:43:40 -0500 -Subject: [PATCH] make fio scripts python3-ready - -Many distributions are moving to python3 by default. Here's -an attempt to make the python scripts in fio python3-ready. - -Conversion was facilitated with automated tools. A few areas -were hand fixed: remove superfluous parentheses introduced by -2to3 converter in print function calls, shebang modifications -to use environment variable for python version, and byte-string -decode correction in steadystate_tests.py following 2to3 -conversion. - -The modified scripts pass rudimentary testing when run under -python2.7 as well as python3. - -Signed-off-by: Bill O'Donnell -Signed-off-by: Jens Axboe - - doc/conf.py | 3 +++ - tools/fiologparser.py | 3 +++ - unit_tests/steadystate_tests.py | 20 ++++++++++++-------- - 3 files changed, 18 insertions(+), 8 deletions(-) - -From 50d2a37543908e79c41b1d5a4c2cb2d65c5af21b Mon Sep 17 00:00:00 2001 -From: Bill O'Donnell -Date: Tue, 22 May 2018 12:49:09 -0500 -Subject: [PATCH] make fio scripts python3-ready (part 2) - -NOTE: this patch (part 2) is in addition to commit 5eac3b00238b -(this patch was missed on that submit/commit (part 1)). - -Many distributions are moving to python3 by default. This is -another patch to make the python scripts in fio python3-ready. - -Conversion was facilitated with automated tools. - -The modified scripts pass rudimentary testing when run under -python2.7 as well as python3. - -Signed-off-by: Bill O'Donnell -Signed-off-by: Jens Axboe ---- - tools/fio_jsonplus_clat2csv | 13 ++++-- - tools/plot/fio2gnuplot | 97 ++++++++++++++++++++++++--------------------- - 2 files changed, 60 insertions(+), 50 deletions(-) - -Index: fio-3.6/doc/conf.py -=================================================================== ---- fio-3.6.orig/doc/conf.py -+++ fio-3.6/doc/conf.py -@@ -22,6 +22,9 @@ - - # -- General configuration ------------------------------------------------ - -+from __future__ import absolute_import -+from __future__ import print_function -+ - # If your documentation needs a minimal Sphinx version, state it here. - # - # needs_sphinx = '1.0' -Index: fio-3.6/tools/fiologparser.py -=================================================================== ---- fio-3.6.orig/tools/fiologparser.py -+++ fio-3.6/tools/fiologparser.py -@@ -1,4 +1,5 @@ --#!/usr/bin/python2.7 -+#!/usr/bin/python3 -+# Note: this script is python2 and python 3 compatible. - # - # fiologparser.py - # -@@ -13,6 +14,8 @@ - # - # to see per-interval average completion latency. - -+from __future__ import absolute_import -+from __future__ import print_function - import argparse - import math - -Index: fio-3.6/unit_tests/steadystate_tests.py -=================================================================== ---- fio-3.6.orig/unit_tests/steadystate_tests.py -+++ fio-3.6/unit_tests/steadystate_tests.py -@@ -1,4 +1,5 @@ --#!/usr/bin/python2.7 -+#!/usr/bin/python3 -+# Note: this script is python2 and python 3 compatible. - # - # steadystate_tests.py - # -@@ -18,6 +19,8 @@ - # if ss attained: min runtime = ss_dur + ss_ramp - # if not attained: runtime = timeout - -+from __future__ import absolute_import -+from __future__ import print_function - import os - import sys - import json -@@ -26,11 +29,12 @@ import pprint - import argparse - import subprocess - from scipy import stats -+from six.moves import range - - def parse_args(): - parser = argparse.ArgumentParser() - parser.add_argument('fio', -- help='path to fio executable'); -+ help='path to fio executable') - parser.add_argument('--read', - help='target for read testing') - parser.add_argument('--write', -@@ -45,7 +49,7 @@ def check(data, iops, slope, pct, limit, - data = data[measurement] - mean = sum(data) / len(data) - if slope: -- x = range(len(data)) -+ x = list(range(len(data))) - m, intercept, r_value, p_value, std_err = stats.linregress(x,data) - m = abs(m) - if pct: -@@ -89,11 +93,11 @@ if __name__ == '__main__': - 'output': "set steady state BW threshold to 12" }, - ] - for test in parsing: -- output = subprocess.check_output([args.fio] + test['args']); -- if test['output'] in output: -- print "PASSED '{0}' found with arguments {1}".format(test['output'], test['args']) -+ output = subprocess.check_output([args.fio] + test['args']) -+ if test['output'] in output.decode(): -+ print("PASSED '{0}' found with arguments {1}".format(test['output'], test['args'])) - else: -- print "FAILED '{0}' NOT found with arguments {1}".format(test['output'], test['args']) -+ print("FAILED '{0}' NOT found with arguments {1}".format(test['output'], test['args'])) - - # - # test some read workloads -@@ -117,7 +121,7 @@ if __name__ == '__main__': - args.read = '/dev/zero' - extra = [ "--size=134217728" ] # 128 MiB - else: -- print "ERROR: file for read testing must be specified on non-posix systems" -+ print("ERROR: file for read testing must be specified on non-posix systems") - sys.exit(1) - else: - extra = [] -@@ -216,7 +220,7 @@ if __name__ == '__main__': - else: - result = 'FAILED ' - line = result + line + ' no ss, expected runtime {0} ~= actual runtime {1}'.format(expected, actual) -- print line -+ print(line) - if 'steadystate' in jsonjob: - pp.pprint(jsonjob['steadystate']) - jobnum += 1 -Index: fio-3.6/tools/fio_jsonplus_clat2csv -=================================================================== ---- fio-3.6.orig/tools/fio_jsonplus_clat2csv -+++ fio-3.6/tools/fio_jsonplus_clat2csv -@@ -1,4 +1,5 @@ --#!/usr/bin/python2.7 -+#!/usr/bin/python3 -+# Note: this script is python2 and python3 compatible. - # - # fio_jsonplus_clat2csv - # -@@ -60,9 +61,13 @@ - # 10304ns is the 100th percentile for read latency - # - -+from __future__ import absolute_import -+from __future__ import print_function - import os - import json - import argparse -+import six -+from six.moves import range - - - def parse_args(): -@@ -87,7 +92,7 @@ def percentile(idx, run_total): - - - def more_lines(indices, bins): -- for key, value in indices.iteritems(): -+ for key, value in six.iteritems(indices): - if value < len(bins[key]): - return True - -@@ -116,8 +121,8 @@ def main(): - "Are you sure you are using json+ output?") - - bins[ddir] = [[int(key), value] for key, value in -- jsondata['jobs'][jobnum][ddir][bins_loc] -- ['bins'].iteritems()] -+ six.iteritems(jsondata['jobs'][jobnum][ddir][bins_loc] -+ ['bins'])] - bins[ddir] = sorted(bins[ddir], key=lambda bin: bin[0]) - - run_total[ddir] = [0 for x in range(0, len(bins[ddir]))] -@@ -165,7 +170,7 @@ def main(): - output.write(", , , ") - output.write("\n") - -- print "{0} generated".format(outfile) -+ print("{0} generated".format(outfile)) - - - if __name__ == '__main__': -Index: fio-3.6/tools/plot/fio2gnuplot -=================================================================== ---- fio-3.6.orig/tools/plot/fio2gnuplot -+++ fio-3.6/tools/plot/fio2gnuplot -@@ -1,4 +1,5 @@ --#!/usr/bin/python2.7 -+#!/usr/bin/python3 -+# Note: this script is python2 and python3 compatible. - # - # Copyright (C) 2013 eNovance SAS - # Author: Erwan Velu -@@ -19,6 +20,8 @@ - # along with this program; if not, write to the Free Software - # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -+from __future__ import absolute_import -+from __future__ import print_function - import os - import fnmatch - import sys -@@ -26,6 +29,8 @@ import getopt - import re - import math - import shutil -+from six.moves import map -+from six.moves import range - - def find_file(path, pattern): - fio_data_file=[] -@@ -39,7 +44,7 @@ def find_file(path, pattern): - return fio_data_file - - def generate_gnuplot_script(fio_data_file,title,gnuplot_output_filename,gnuplot_output_dir,mode,disk_perf,gpm_dir): -- if verbose: print "Generating rendering scripts" -+ if verbose: print("Generating rendering scripts") - filename=gnuplot_output_dir+'mygraph' - temporary_files.append(filename) - f=open(filename,'w') -@@ -124,7 +129,7 @@ def generate_gnuplot_math_script(title,g - f.close() - - def compute_aggregated_file(fio_data_file, gnuplot_output_filename, gnuplot_output_dir): -- if verbose: print "Processing data file 2/2" -+ if verbose: print("Processing data file 2/2") - temp_files=[] - pos=0 - -@@ -152,7 +157,7 @@ def compute_temp_file(fio_data_file,disk - end_time=max_time - if end_time == -1: - end_time="infinite" -- if verbose: print "Processing data file 1/2 with %s 1: -- if verbose: print " |-> Rendering comparing traces" -+ if verbose: print(" |-> Rendering comparing traces") - os.system("cd %s; for i in *.gnuplot; do gnuplot $i; done" % gnuplot_output_dir) -- if verbose: print " |-> Rendering math traces" -+ if verbose: print(" |-> Rendering math traces") - os.system("cd %s; gnuplot mymath" % gnuplot_output_dir) -- if verbose: print " |-> Rendering 2D & 3D traces" -+ if verbose: print(" |-> Rendering 2D & 3D traces") - os.system("cd %s; gnuplot mygraph" % gnuplot_output_dir) - - name_of_directory="the current" - if gnuplot_output_dir != "./": - name_of_directory=gnuplot_output_dir -- print "\nRendering traces are available in %s directory" % name_of_directory -+ print("\nRendering traces are available in %s directory" % name_of_directory) - global keep_temp_files - keep_temp_files=False - except: -- print "Could not run gnuplot on mymath or mygraph !\n" -+ print("Could not run gnuplot on mymath or mygraph !\n") - sys.exit(1); - - def print_help(): -- print 'fio2gnuplot -ghbiodvk -t -o <outputfile> -p <pattern> -G <type> -m <time> -M <time>' -- print -- print '-h --help : Print this help' -- print '-p <pattern> or --pattern <pattern> : A glob pattern to select fio input files' -- print '-b or --bandwidth : A predefined pattern for selecting *_bw.log files' -- print '-i or --iops : A predefined pattern for selecting *_iops.log files' -- print '-g or --gnuplot : Render gnuplot traces before exiting' -- print '-o or --outputfile <file> : The basename for gnuplot traces' -- print ' - Basename is set with the pattern if defined' -- print '-d or --outputdir <dir> : The directory where gnuplot shall render files' -- print '-t or --title <title> : The title of the gnuplot traces' -- print ' - Title is set with the block size detected in fio traces' -- print '-G or --Global <type> : Search for <type> in .global files match by a pattern' -- print ' - Available types are : min, max, avg, stddev' -- print ' - The .global extension is added automatically to the pattern' -- print '-m or --min_time <time> : Only consider data starting from <time> seconds (default is 0)' -- print '-M or --max_time <time> : Only consider data ending before <time> seconds (default is -1 aka nolimit)' -- print '-v or --verbose : Increasing verbosity' -- print '-k or --keep : Keep all temporary files from gnuplot\'s output dir' -+ print('fio2gnuplot -ghbiodvk -t <title> -o <outputfile> -p <pattern> -G <type> -m <time> -M <time>') -+ print() -+ print('-h --help : Print this help') -+ print('-p <pattern> or --pattern <pattern> : A glob pattern to select fio input files') -+ print('-b or --bandwidth : A predefined pattern for selecting *_bw.log files') -+ print('-i or --iops : A predefined pattern for selecting *_iops.log files') -+ print('-g or --gnuplot : Render gnuplot traces before exiting') -+ print('-o or --outputfile <file> : The basename for gnuplot traces') -+ print(' - Basename is set with the pattern if defined') -+ print('-d or --outputdir <dir> : The directory where gnuplot shall render files') -+ print('-t or --title <title> : The title of the gnuplot traces') -+ print(' - Title is set with the block size detected in fio traces') -+ print('-G or --Global <type> : Search for <type> in .global files match by a pattern') -+ print(' - Available types are : min, max, avg, stddev') -+ print(' - The .global extension is added automatically to the pattern') -+ print('-m or --min_time <time> : Only consider data starting from <time> seconds (default is 0)') -+ print('-M or --max_time <time> : Only consider data ending before <time> seconds (default is -1 aka nolimit)') -+ print('-v or --verbose : Increasing verbosity') -+ print('-k or --keep : Keep all temporary files from gnuplot\'s output dir') - - def main(argv): - mode='unknown' -@@ -403,14 +408,14 @@ def main(argv): - if not os.path.isfile(gpm_dir+'math.gpm'): - gpm_dir="/usr/local/share/fio/" - if not os.path.isfile(gpm_dir+'math.gpm'): -- print "Looks like fio didn't get installed properly as no gpm files found in '/usr/share/fio' or '/usr/local/share/fio'\n" -+ print("Looks like fio didn't get installed properly as no gpm files found in '/usr/share/fio' or '/usr/local/share/fio'\n") - sys.exit(3) - - try: - opts, args = getopt.getopt(argv[1:],"ghkbivo:d:t:p:G:m:M:",['bandwidth', 'iops', 'pattern', 'outputfile', 'outputdir', 'title', 'min_time', 'max_time', 'gnuplot', 'Global', 'help', 'verbose','keep']) - except getopt.GetoptError: -- print "Error: One of the options passed to the cmdline was not supported" -- print "Please fix your command line or read the help (-h option)" -+ print("Error: One of the options passed to the cmdline was not supported") -+ print("Please fix your command line or read the help (-h option)") - sys.exit(2) - - for opt, arg in opts: -@@ -457,7 +462,7 @@ def main(argv): - - fio_data_file=find_file('.',pattern) - if len(fio_data_file) == 0: -- print "No log file found with pattern %s!" % pattern -+ print("No log file found with pattern %s!" % pattern) - # Try numjob log file format if per_numjob_logs=1 - if (pattern == '*_bw.log'): - fio_data_file=find_file('.','*_bw.*.log') -@@ -466,13 +471,13 @@ def main(argv): - if len(fio_data_file) == 0: - sys.exit(1) - else: -- print "Using log file per job format instead" -+ print("Using log file per job format instead") - else: -- print "%d files Selected with pattern '%s'" % (len(fio_data_file), pattern) -+ print("%d files Selected with pattern '%s'" % (len(fio_data_file), pattern)) - - fio_data_file=sorted(fio_data_file, key=str.lower) - for file in fio_data_file: -- print ' |-> %s' % file -+ print(' |-> %s' % file) - if "_bw.log" in file : - mode="Bandwidth (KB/sec)" - if "_iops.log" in file : -@@ -483,7 +488,7 @@ def main(argv): - if "IO" in mode: - title='IO benchmark with %d fio results' % len(fio_data_file) - -- print -+ print() - #We need to adjust the output filename regarding the pattern required by the user - if (pattern_set_by_user == True): - gnuplot_output_filename=pattern -@@ -514,9 +519,9 @@ def main(argv): - # Shall we clean the temporary files ? - if keep_temp_files==False and force_keep_temp_files==False: - # Cleaning temporary files -- if verbose: print "Cleaning temporary files" -+ if verbose: print("Cleaning temporary files") - for f in enumerate(temporary_files): -- if verbose: print " -> %s"%f[1] -+ if verbose: print(" -> %s"%f[1]) - try: - os.remove(f[1]) - except: -Index: fio-3.6/tools/hist/fiologparser_hist.py -=================================================================== ---- fio-3.6.orig/tools/hist/fiologparser_hist.py -+++ fio-3.6/tools/hist/fiologparser_hist.py -@@ -1,4 +1,4 @@ --#!/usr/bin/python2.7 -+#!/usr/bin/python3 - """ - Utility for converting *_clat_hist* files generated by fio into latency statistics. - -Index: fio-3.6/tools/hist/half-bins.py -=================================================================== ---- fio-3.6.orig/tools/hist/half-bins.py -+++ fio-3.6/tools/hist/half-bins.py -@@ -1,4 +1,4 @@ --#!/usr/bin/python2.7 -+#!/usr/bin/python3 - """ Cut the number bins in half in fio histogram output. Example usage: - - $ half-bins.py -c 2 output_clat_hist.1.log > smaller_clat_hist.1.log - - diff --git a/fio.spec b/fio.spec index 4584f57..2e2600b 100644 --- a/fio.spec +++ b/fio.spec @@ -1,6 +1,6 @@ Name: fio -Version: 3.6 -Release: 3%{?dist} +Version: 3.7 +Release: 1%{?dist} Summary: Multithreaded IO generation tool Group: Applications/System @@ -21,8 +21,6 @@ BuildRequires: numactl-devel BuildRequires: librdmacm-devel %endif -Patch0: fio-python3.patch - %description fio is an I/O tool that will spawn a number of threads or processes doing a particular type of io action as specified by the user. fio takes a @@ -34,8 +32,6 @@ one wants to simulate. %prep %setup -q -%patch0 -p1 - %build ./configure --disable-optimizations EXTFLAGS="$RPM_OPT_FLAGS" LDFLAGS="$RPM_LD_FLAGS" make V=1 %{?_smp_mflags} @@ -52,6 +48,9 @@ make install prefix=%{_prefix} mandir=%{_mandir} DESTDIR=$RPM_BUILD_ROOT INSTALL %{_datadir}/%{name}/* %changelog +* Fri Jun 01 2018 Eric Sandeen <sandeen@redhat.com> 3.7-1 +- New upstream version + * Fri Jun 01 2018 Eric Sandeen <sandeen@redhat.com> 3.6-3 - Complete the conversion to python3 diff --git a/sources b/sources index d116657..7c65921 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (fio-3.6.tar.bz2) = 33e823aa5ba546268cc0acaca7dadc394ca08cef954c96813f1dc028f103fc9f4fd8fdb10bca2581f084779c2708e3dc29a371e59cfa2871a4c2f1bdcfdf0477 +SHA512 (fio-3.7.tar.bz2) = b1f5cb35fe1c06e030c570959ab9a96d936f9eaa2f7f30d5a34f34fd93fae057da07c4084a06143cd5188ad6b2cc06b564484f8867e050cfeddc0ee3fb0fe266