Blame fio-python3.patch

Eric Sandeen 579853
From 5eac3b00238b450ac0679121a76f1e566ca8f468 Mon Sep 17 00:00:00 2001
Eric Sandeen 579853
From: Bill O'Donnell <billodo@redhat.com>
Eric Sandeen 579853
Date: Fri, 4 May 2018 14:43:40 -0500
Eric Sandeen 579853
Subject: [PATCH] make fio scripts python3-ready
Eric Sandeen 18ffcf
Eric Sandeen 579853
Many distributions are moving to python3 by default.  Here's
Eric Sandeen 579853
an attempt to make the python scripts in fio python3-ready.
Eric Sandeen 18ffcf
Eric Sandeen 579853
Conversion was facilitated with automated tools. A few areas
Eric Sandeen 579853
were hand fixed: remove superfluous parentheses introduced by
Eric Sandeen 579853
2to3 converter in print function calls, shebang modifications
Eric Sandeen 579853
to use environment variable for python version, and byte-string
Eric Sandeen 579853
decode correction in steadystate_tests.py following 2to3
Eric Sandeen 579853
conversion.
Eric Sandeen 579853
Eric Sandeen 579853
The modified scripts pass rudimentary testing when run under
Eric Sandeen 579853
python2.7 as well as python3.
Eric Sandeen 579853
Eric Sandeen 579853
Signed-off-by: Bill O'Donnell <billodo@redhat.com>
Eric Sandeen 579853
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Eric Sandeen 579853
Eric Sandeen 579853
 doc/conf.py                     |  3 +++
Eric Sandeen 579853
 tools/fiologparser.py           |  3 +++
Eric Sandeen 579853
 unit_tests/steadystate_tests.py | 20 ++++++++++++--------
Eric Sandeen 579853
 3 files changed, 18 insertions(+), 8 deletions(-)
Eric Sandeen 579853
Eric Sandeen 579853
From 50d2a37543908e79c41b1d5a4c2cb2d65c5af21b Mon Sep 17 00:00:00 2001
Eric Sandeen 579853
From: Bill O'Donnell <billodo@redhat.com>
Eric Sandeen 579853
Date: Tue, 22 May 2018 12:49:09 -0500
Eric Sandeen 579853
Subject: [PATCH] make fio scripts python3-ready (part 2)
Eric Sandeen 579853
Eric Sandeen 579853
NOTE: this patch (part 2) is in addition to commit 5eac3b00238b
Eric Sandeen 579853
(this patch was missed on that submit/commit (part 1)).
Eric Sandeen 579853
Eric Sandeen 579853
Many distributions are moving to python3 by default.  This is
Eric Sandeen 579853
another patch to make the python scripts in fio python3-ready.
Eric Sandeen 579853
Eric Sandeen 579853
Conversion was facilitated with automated tools.
Eric Sandeen 579853
Eric Sandeen 579853
The modified scripts pass rudimentary testing when run under
Eric Sandeen 579853
python2.7 as well as python3.
Eric Sandeen 579853
Eric Sandeen 579853
Signed-off-by: Bill O'Donnell <billodo@redhat.com>
Eric Sandeen 579853
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Eric Sandeen 18ffcf
---
Eric Sandeen 579853
 tools/fio_jsonplus_clat2csv | 13 ++++--
Eric Sandeen 579853
 tools/plot/fio2gnuplot      | 97 ++++++++++++++++++++++++---------------------
Eric Sandeen 579853
 2 files changed, 60 insertions(+), 50 deletions(-)
Eric Sandeen 579853
Eric Sandeen 18ffcf
Index: fio-3.6/doc/conf.py
Eric Sandeen 18ffcf
===================================================================
Eric Sandeen 18ffcf
--- fio-3.6.orig/doc/conf.py
Eric Sandeen 18ffcf
+++ fio-3.6/doc/conf.py
Eric Sandeen 18ffcf
@@ -22,6 +22,9 @@
Eric Sandeen 18ffcf
 
Eric Sandeen 18ffcf
 # -- General configuration ------------------------------------------------
Eric Sandeen 18ffcf
 
Eric Sandeen 18ffcf
+from __future__ import absolute_import
Eric Sandeen 18ffcf
+from __future__ import print_function
Eric Sandeen 18ffcf
+
Eric Sandeen 18ffcf
 # If your documentation needs a minimal Sphinx version, state it here.
Eric Sandeen 18ffcf
 #
Eric Sandeen 18ffcf
 # needs_sphinx = '1.0'
Eric Sandeen 18ffcf
Index: fio-3.6/tools/fiologparser.py
Eric Sandeen 18ffcf
===================================================================
Eric Sandeen 18ffcf
--- fio-3.6.orig/tools/fiologparser.py
Eric Sandeen 18ffcf
+++ fio-3.6/tools/fiologparser.py
Eric Sandeen 18ffcf
@@ -1,4 +1,5 @@
Eric Sandeen 05c3b5
-#!/usr/bin/python2.7
Eric Sandeen 05c3b5
+#!/usr/bin/python3
Eric Sandeen 18ffcf
+# Note: this script is python2 and python 3 compatible.
Eric Sandeen 18ffcf
 #
Eric Sandeen 18ffcf
 # fiologparser.py
Eric Sandeen 18ffcf
 #
Eric Sandeen 18ffcf
@@ -13,6 +14,8 @@
Eric Sandeen 18ffcf
 #
Eric Sandeen 18ffcf
 # to see per-interval average completion latency.
Eric Sandeen 18ffcf
 
Eric Sandeen 18ffcf
+from __future__ import absolute_import
Eric Sandeen 18ffcf
+from __future__ import print_function
Eric Sandeen 18ffcf
 import argparse
Eric Sandeen 18ffcf
 import math
Eric Sandeen 18ffcf
 
Eric Sandeen 18ffcf
Index: fio-3.6/unit_tests/steadystate_tests.py
Eric Sandeen 18ffcf
===================================================================
Eric Sandeen 18ffcf
--- fio-3.6.orig/unit_tests/steadystate_tests.py
Eric Sandeen 18ffcf
+++ fio-3.6/unit_tests/steadystate_tests.py
Eric Sandeen 18ffcf
@@ -1,4 +1,5 @@
Eric Sandeen 05c3b5
-#!/usr/bin/python2.7
Eric Sandeen 05c3b5
+#!/usr/bin/python3
Eric Sandeen 18ffcf
+# Note: this script is python2 and python 3 compatible.
Eric Sandeen 18ffcf
 #
Eric Sandeen 18ffcf
 # steadystate_tests.py
Eric Sandeen 18ffcf
 #
Eric Sandeen 18ffcf
@@ -18,6 +19,8 @@
Eric Sandeen 18ffcf
 # if ss attained: min runtime = ss_dur + ss_ramp
Eric Sandeen 18ffcf
 # if not attained: runtime = timeout
Eric Sandeen 18ffcf
 
Eric Sandeen 18ffcf
+from __future__ import absolute_import
Eric Sandeen 18ffcf
+from __future__ import print_function
Eric Sandeen 18ffcf
 import os
Eric Sandeen 18ffcf
 import sys
Eric Sandeen 18ffcf
 import json
Eric Sandeen 18ffcf
@@ -26,11 +29,12 @@ import pprint
Eric Sandeen 18ffcf
 import argparse
Eric Sandeen 18ffcf
 import subprocess
Eric Sandeen 18ffcf
 from scipy import stats
Eric Sandeen 18ffcf
+from six.moves import range
Eric Sandeen 18ffcf
 
Eric Sandeen 18ffcf
 def parse_args():
Eric Sandeen 18ffcf
     parser = argparse.ArgumentParser()
Eric Sandeen 18ffcf
     parser.add_argument('fio',
Eric Sandeen 18ffcf
-                        help='path to fio executable');
Eric Sandeen 18ffcf
+                        help='path to fio executable')
Eric Sandeen 18ffcf
     parser.add_argument('--read',
Eric Sandeen 18ffcf
                         help='target for read testing')
Eric Sandeen 18ffcf
     parser.add_argument('--write',
Eric Sandeen 18ffcf
@@ -45,7 +49,7 @@ def check(data, iops, slope, pct, limit,
Eric Sandeen 18ffcf
     data = data[measurement]
Eric Sandeen 18ffcf
     mean = sum(data) / len(data)
Eric Sandeen 18ffcf
     if slope:
Eric Sandeen 18ffcf
-        x = range(len(data))
Eric Sandeen 18ffcf
+        x = list(range(len(data)))
Eric Sandeen 18ffcf
         m, intercept, r_value, p_value, std_err = stats.linregress(x,data)
Eric Sandeen 18ffcf
         m = abs(m)
Eric Sandeen 18ffcf
         if pct:
Eric Sandeen 18ffcf
@@ -89,11 +93,11 @@ if __name__ == '__main__':
Eric Sandeen 18ffcf
                   'output': "set steady state BW threshold to 12" },
Eric Sandeen 18ffcf
               ]
Eric Sandeen 18ffcf
     for test in parsing:
Eric Sandeen 18ffcf
-        output = subprocess.check_output([args.fio] + test['args']);
Eric Sandeen 18ffcf
-        if test['output'] in output:
Eric Sandeen 18ffcf
-            print "PASSED '{0}' found with arguments {1}".format(test['output'], test['args'])
Eric Sandeen 18ffcf
+        output = subprocess.check_output([args.fio] + test['args'])
Eric Sandeen 18ffcf
+        if test['output'] in output.decode():
Eric Sandeen 18ffcf
+            print("PASSED '{0}' found with arguments {1}".format(test['output'], test['args']))
Eric Sandeen 18ffcf
         else:
Eric Sandeen 18ffcf
-            print "FAILED '{0}' NOT found with arguments {1}".format(test['output'], test['args'])
Eric Sandeen 18ffcf
+            print("FAILED '{0}' NOT found with arguments {1}".format(test['output'], test['args']))
Eric Sandeen 18ffcf
 
Eric Sandeen 18ffcf
 #
Eric Sandeen 18ffcf
 # test some read workloads
Eric Sandeen 18ffcf
@@ -117,7 +121,7 @@ if __name__ == '__main__':
Eric Sandeen 18ffcf
             args.read = '/dev/zero'
Eric Sandeen 18ffcf
             extra = [ "--size=134217728" ]  # 128 MiB
Eric Sandeen 18ffcf
         else:
Eric Sandeen 18ffcf
-            print "ERROR: file for read testing must be specified on non-posix systems"
Eric Sandeen 18ffcf
+            print("ERROR: file for read testing must be specified on non-posix systems")
Eric Sandeen 18ffcf
             sys.exit(1)
Eric Sandeen 18ffcf
     else:
Eric Sandeen 18ffcf
         extra = []
Eric Sandeen 18ffcf
@@ -216,7 +220,7 @@ if __name__ == '__main__':
Eric Sandeen 18ffcf
                 else:
Eric Sandeen 18ffcf
                     result = 'FAILED '
Eric Sandeen 18ffcf
                 line = result + line + ' no ss, expected runtime {0} ~= actual runtime {1}'.format(expected, actual)
Eric Sandeen 18ffcf
-            print line
Eric Sandeen 18ffcf
+            print(line)
Eric Sandeen 18ffcf
             if 'steadystate' in jsonjob:
Eric Sandeen 18ffcf
                 pp.pprint(jsonjob['steadystate'])
Eric Sandeen 18ffcf
         jobnum += 1
Eric Sandeen 579853
Index: fio-3.6/tools/fio_jsonplus_clat2csv
Eric Sandeen 579853
===================================================================
Eric Sandeen 579853
--- fio-3.6.orig/tools/fio_jsonplus_clat2csv
Eric Sandeen 579853
+++ fio-3.6/tools/fio_jsonplus_clat2csv
Eric Sandeen 579853
@@ -1,4 +1,5 @@
Eric Sandeen 579853
-#!/usr/bin/python2.7
Eric Sandeen 579853
+#!/usr/bin/python3
Eric Sandeen 579853
+# Note: this script is python2 and python3 compatible.
Eric Sandeen 579853
 #
Eric Sandeen 579853
 # fio_jsonplus_clat2csv
Eric Sandeen 579853
 #
Eric Sandeen 579853
@@ -60,9 +61,13 @@
Eric Sandeen 579853
 # 10304ns is the 100th percentile for read latency
Eric Sandeen 579853
 #
Eric Sandeen 579853
 
Eric Sandeen 579853
+from __future__ import absolute_import
Eric Sandeen 579853
+from __future__ import print_function
Eric Sandeen 579853
 import os
Eric Sandeen 579853
 import json
Eric Sandeen 579853
 import argparse
Eric Sandeen 579853
+import six
Eric Sandeen 579853
+from six.moves import range
Eric Sandeen 579853
 
Eric Sandeen 579853
 
Eric Sandeen 579853
 def parse_args():
Eric Sandeen 579853
@@ -87,7 +92,7 @@ def percentile(idx, run_total):
Eric Sandeen 579853
 
Eric Sandeen 579853
 
Eric Sandeen 579853
 def more_lines(indices, bins):
Eric Sandeen 579853
-    for key, value in indices.iteritems():
Eric Sandeen 579853
+    for key, value in six.iteritems(indices):
Eric Sandeen 579853
         if value < len(bins[key]):
Eric Sandeen 579853
             return True
Eric Sandeen 579853
 
Eric Sandeen 579853
@@ -116,8 +121,8 @@ def main():
Eric Sandeen 579853
                                    "Are you sure you are using json+ output?")
Eric Sandeen 579853
 
Eric Sandeen 579853
             bins[ddir] = [[int(key), value] for key, value in
Eric Sandeen 579853
-                          jsondata['jobs'][jobnum][ddir][bins_loc]
Eric Sandeen 579853
-                          ['bins'].iteritems()]
Eric Sandeen 579853
+                          six.iteritems(jsondata['jobs'][jobnum][ddir][bins_loc]
Eric Sandeen 579853
+                          ['bins'])]
Eric Sandeen 579853
             bins[ddir] = sorted(bins[ddir], key=lambda bin: bin[0])
Eric Sandeen 579853
 
Eric Sandeen 579853
             run_total[ddir] = [0 for x in range(0, len(bins[ddir]))]
Eric Sandeen 579853
@@ -165,7 +170,7 @@ def main():
Eric Sandeen 579853
                         output.write(", , , ")
Eric Sandeen 579853
                 output.write("\n")
Eric Sandeen 579853
 
Eric Sandeen 579853
-            print "{0} generated".format(outfile)
Eric Sandeen 579853
+            print("{0} generated".format(outfile))
Eric Sandeen 579853
 
Eric Sandeen 579853
 
Eric Sandeen 579853
 if __name__ == '__main__':
Eric Sandeen 579853
Index: fio-3.6/tools/plot/fio2gnuplot
Eric Sandeen 579853
===================================================================
Eric Sandeen 579853
--- fio-3.6.orig/tools/plot/fio2gnuplot
Eric Sandeen 579853
+++ fio-3.6/tools/plot/fio2gnuplot
Eric Sandeen 579853
@@ -1,4 +1,5 @@
Eric Sandeen 579853
-#!/usr/bin/python2.7
Eric Sandeen 579853
+#!/usr/bin/python3
Eric Sandeen 579853
+# Note: this script is python2 and python3 compatible.
Eric Sandeen 579853
 #
Eric Sandeen 579853
 #  Copyright (C) 2013 eNovance SAS <licensing@enovance.com>
Eric Sandeen 579853
 #  Author: Erwan Velu  <erwan@enovance.com>
Eric Sandeen 579853
@@ -19,6 +20,8 @@
Eric Sandeen 579853
 #  along with this program; if not, write to the Free Software
Eric Sandeen 579853
 #  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Eric Sandeen 579853
 
Eric Sandeen 579853
+from __future__ import absolute_import
Eric Sandeen 579853
+from __future__ import print_function
Eric Sandeen 579853
 import os
Eric Sandeen 579853
 import fnmatch
Eric Sandeen 579853
 import sys
Eric Sandeen 579853
@@ -26,6 +29,8 @@ import getopt
Eric Sandeen 579853
 import re
Eric Sandeen 579853
 import math
Eric Sandeen 579853
 import shutil
Eric Sandeen 579853
+from six.moves import map
Eric Sandeen 579853
+from six.moves import range
Eric Sandeen 579853
 
Eric Sandeen 579853
 def find_file(path, pattern):
Eric Sandeen 579853
 	fio_data_file=[]
Eric Sandeen 579853
@@ -39,7 +44,7 @@ def find_file(path, pattern):
Eric Sandeen 579853
 	return fio_data_file
Eric Sandeen 579853
 
Eric Sandeen 579853
 def generate_gnuplot_script(fio_data_file,title,gnuplot_output_filename,gnuplot_output_dir,mode,disk_perf,gpm_dir):
Eric Sandeen 579853
-	if verbose: print "Generating rendering scripts"
Eric Sandeen 579853
+	if verbose: print("Generating rendering scripts")
Eric Sandeen 579853
 	filename=gnuplot_output_dir+'mygraph'
Eric Sandeen 579853
 	temporary_files.append(filename)
Eric Sandeen 579853
 	f=open(filename,'w')
Eric Sandeen 579853
@@ -124,7 +129,7 @@ def generate_gnuplot_math_script(title,g
Eric Sandeen 579853
 	f.close()
Eric Sandeen 579853
 
Eric Sandeen 579853
 def compute_aggregated_file(fio_data_file, gnuplot_output_filename, gnuplot_output_dir):
Eric Sandeen 579853
-	if verbose: print "Processing data file 2/2"
Eric Sandeen 579853
+	if verbose: print("Processing data file 2/2")
Eric Sandeen 579853
 	temp_files=[]
Eric Sandeen 579853
 	pos=0
Eric Sandeen 579853
 
Eric Sandeen 579853
@@ -152,7 +157,7 @@ def compute_temp_file(fio_data_file,disk
Eric Sandeen 579853
 	end_time=max_time
Eric Sandeen 579853
 	if end_time == -1:
Eric Sandeen 579853
 		end_time="infinite"
Eric Sandeen 579853
-	if verbose: print "Processing data file 1/2 with %s
Eric Sandeen 579853
+	if verbose: print("Processing data file 1/2 with %s
Eric Sandeen 579853
 	files=[]
Eric Sandeen 579853
 	temp_outfile=[]
Eric Sandeen 579853
 	blk_size=0
Eric Sandeen 579853
@@ -198,8 +203,8 @@ def compute_temp_file(fio_data_file,disk
Eric Sandeen 579853
 				try:
Eric Sandeen 579853
 					blk_size=int(block_size)
Eric Sandeen 579853
 				except:
Eric Sandeen 579853
-					print "Error while reading the following line :"
Eric Sandeen 579853
-					print line
Eric Sandeen 579853
+					print("Error while reading the following line :")
Eric Sandeen 579853
+					print(line)
Eric Sandeen 579853
 					sys.exit(1);
Eric Sandeen 579853
 
Eric Sandeen 579853
 			# We ignore the first 500msec as it doesn't seems to be part of the real benchmark
Eric Sandeen 579853
@@ -225,7 +230,7 @@ def compute_temp_file(fio_data_file,disk
Eric Sandeen 579853
 	return blk_size
Eric Sandeen 579853
 
Eric Sandeen 579853
 def compute_math(fio_data_file, title,gnuplot_output_filename,gnuplot_output_dir,mode,disk_perf,gpm_dir):
Eric Sandeen 579853
-	if verbose: print "Computing Maths"
Eric Sandeen 579853
+	if verbose: print("Computing Maths")
Eric Sandeen 579853
 	global_min=[]
Eric Sandeen 579853
 	global_max=[]
Eric Sandeen 579853
 	average_file=open(gnuplot_output_dir+gnuplot_output_filename+'.average', 'w')
Eric Sandeen 579853
@@ -243,14 +248,14 @@ def compute_math(fio_data_file, title,gn
Eric Sandeen 579853
 	max_file.write('DiskName %s\n'% mode)
Eric Sandeen 579853
 	average_file.write('DiskName %s\n'% mode)
Eric Sandeen 579853
 	stddev_file.write('DiskName %s\n'% mode )
Eric Sandeen 579853
-	for disk in xrange(len(fio_data_file)):
Eric Sandeen 579853
+	for disk in range(len(fio_data_file)):
Eric Sandeen 579853
 #		print disk_perf[disk]
Eric Sandeen 579853
 	    	min_file.write("# Disk%d was coming from %s\n" % (disk,fio_data_file[disk]))
Eric Sandeen 579853
 	    	max_file.write("# Disk%d was coming from %s\n" % (disk,fio_data_file[disk]))
Eric Sandeen 579853
 	    	average_file.write("# Disk%d was coming from %s\n" % (disk,fio_data_file[disk]))
Eric Sandeen 579853
 	    	stddev_file.write("# Disk%d was coming from %s\n" % (disk,fio_data_file[disk]))
Eric Sandeen 579853
 		avg  = average(disk_perf[disk])
Eric Sandeen 579853
-		variance = map(lambda x: (x - avg)**2, disk_perf[disk])
Eric Sandeen 579853
+		variance = [(x - avg)**2 for x in disk_perf[disk]]
Eric Sandeen 579853
 		standard_deviation = math.sqrt(average(variance))
Eric Sandeen 579853
 #		print "Disk%d [ min=%.2f max=%.2f avg=%.2f stddev=%.2f \n" % (disk,min(disk_perf[disk]),max(disk_perf[disk]),avg, standard_deviation)
Eric Sandeen 579853
 		average_file.write('%d %d\n' % (disk, avg))
Eric Sandeen 579853
@@ -264,7 +269,7 @@ def compute_math(fio_data_file, title,gn
Eric Sandeen 579853
 
Eric Sandeen 579853
 	global_disk_perf = sum(disk_perf, [])
Eric Sandeen 579853
 	avg  = average(global_disk_perf)
Eric Sandeen 579853
-	variance = map(lambda x: (x - avg)**2, global_disk_perf)
Eric Sandeen 579853
+	variance = [(x - avg)**2 for x in global_disk_perf]
Eric Sandeen 579853
 	standard_deviation = math.sqrt(average(variance))
Eric Sandeen 579853
 
Eric Sandeen 579853
 	global_file.write('min=%.2f\n' % min(global_disk_perf))
Eric Sandeen 579853
@@ -331,52 +336,52 @@ def parse_global_files(fio_data_file, gl
Eric Sandeen 579853
 					max_file=file
Eric Sandeen 579853
 	# Let's print the avg output
Eric Sandeen 579853
 	if global_search == "avg":
Eric Sandeen 579853
-		print "Biggest aggregated value of %s was %2.f in file %s\n" % (global_search, max_result, max_file)
Eric Sandeen 579853
+		print("Biggest aggregated value of %s was %2.f in file %s\n" % (global_search, max_result, max_file))
Eric Sandeen 579853
 	else:
Eric Sandeen 579853
-		print "Global search %s is not yet implemented\n" % global_search
Eric Sandeen 579853
+		print("Global search %s is not yet implemented\n" % global_search)
Eric Sandeen 579853
 
Eric Sandeen 579853
 def render_gnuplot(fio_data_file, gnuplot_output_dir):
Eric Sandeen 579853
-	print "Running gnuplot Rendering"
Eric Sandeen 579853
+	print("Running gnuplot Rendering")
Eric Sandeen 579853
 	try:
Eric Sandeen 579853
 		# Let's render all the compared files if some
Eric Sandeen 579853
 		if len(fio_data_file) > 1:
Eric Sandeen 579853
-			if verbose: print " |-> Rendering comparing traces"
Eric Sandeen 579853
+			if verbose: print(" |-> Rendering comparing traces")
Eric Sandeen 579853
 			os.system("cd %s; for i in *.gnuplot; do gnuplot $i; done" % gnuplot_output_dir)
Eric Sandeen 579853
-		if verbose: print " |-> Rendering math traces"
Eric Sandeen 579853
+		if verbose: print(" |-> Rendering math traces")
Eric Sandeen 579853
 		os.system("cd %s; gnuplot mymath" % gnuplot_output_dir)
Eric Sandeen 579853
-		if verbose: print " |-> Rendering 2D & 3D traces"
Eric Sandeen 579853
+		if verbose: print(" |-> Rendering 2D & 3D traces")
Eric Sandeen 579853
 		os.system("cd %s; gnuplot mygraph" % gnuplot_output_dir)
Eric Sandeen 579853
 
Eric Sandeen 579853
 		name_of_directory="the current"
Eric Sandeen 579853
 		if gnuplot_output_dir != "./":
Eric Sandeen 579853
 			name_of_directory=gnuplot_output_dir
Eric Sandeen 579853
-		print "\nRendering traces are available in %s directory" % name_of_directory
Eric Sandeen 579853
+		print("\nRendering traces are available in %s directory" % name_of_directory)
Eric Sandeen 579853
 		global keep_temp_files
Eric Sandeen 579853
 		keep_temp_files=False
Eric Sandeen 579853
 	except:
Eric Sandeen 579853
-		print "Could not run gnuplot on mymath or mygraph !\n"
Eric Sandeen 579853
+		print("Could not run gnuplot on mymath or mygraph !\n")
Eric Sandeen 579853
 		sys.exit(1);
Eric Sandeen 579853
 
Eric Sandeen 579853
 def print_help():
Eric Sandeen 579853
-    print 'fio2gnuplot -ghbiodvk -t <title> -o <outputfile> -p <pattern> -G <type> -m <time> -M <time>'
Eric Sandeen 579853
-    print
Eric Sandeen 579853
-    print '-h --help                           : Print this help'
Eric Sandeen 579853
-    print '-p <pattern> or --pattern <pattern> : A glob pattern to select fio input files'
Eric Sandeen 579853
-    print '-b           or --bandwidth         : A predefined pattern for selecting *_bw.log files'
Eric Sandeen 579853
-    print '-i           or --iops              : A predefined pattern for selecting *_iops.log files'
Eric Sandeen 579853
-    print '-g           or --gnuplot           : Render gnuplot traces before exiting'
Eric Sandeen 579853
-    print '-o           or --outputfile <file> : The basename for gnuplot traces'
Eric Sandeen 579853
-    print '                                       - Basename is set with the pattern if defined'
Eric Sandeen 579853
-    print '-d           or --outputdir <dir>   : The directory where gnuplot shall render files'
Eric Sandeen 579853
-    print '-t           or --title <title>     : The title of the gnuplot traces'
Eric Sandeen 579853
-    print '                                       - Title is set with the block size detected in fio traces'
Eric Sandeen 579853
-    print '-G           or --Global <type>     : Search for <type> in .global files match by a pattern'
Eric Sandeen 579853
-    print '                                       - Available types are : min, max, avg, stddev'
Eric Sandeen 579853
-    print '                                       - The .global extension is added automatically to the pattern'
Eric Sandeen 579853
-    print '-m           or --min_time <time>   : Only consider data starting from <time> seconds (default is 0)'
Eric Sandeen 579853
-    print '-M           or --max_time <time>   : Only consider data ending before <time> seconds (default is -1 aka nolimit)'
Eric Sandeen 579853
-    print '-v           or --verbose           : Increasing verbosity'
Eric Sandeen 579853
-    print '-k           or --keep              : Keep all temporary files from gnuplot\'s output dir'
Eric Sandeen 579853
+    print('fio2gnuplot -ghbiodvk -t <title> -o <outputfile> -p <pattern> -G <type> -m <time> -M <time>')
Eric Sandeen 579853
+    print()
Eric Sandeen 579853
+    print('-h --help                           : Print this help')
Eric Sandeen 579853
+    print('-p <pattern> or --pattern <pattern> : A glob pattern to select fio input files')
Eric Sandeen 579853
+    print('-b           or --bandwidth         : A predefined pattern for selecting *_bw.log files')
Eric Sandeen 579853
+    print('-i           or --iops              : A predefined pattern for selecting *_iops.log files')
Eric Sandeen 579853
+    print('-g           or --gnuplot           : Render gnuplot traces before exiting')
Eric Sandeen 579853
+    print('-o           or --outputfile <file> : The basename for gnuplot traces')
Eric Sandeen 579853
+    print('                                       - Basename is set with the pattern if defined')
Eric Sandeen 579853
+    print('-d           or --outputdir <dir>   : The directory where gnuplot shall render files')
Eric Sandeen 579853
+    print('-t           or --title <title>     : The title of the gnuplot traces')
Eric Sandeen 579853
+    print('                                       - Title is set with the block size detected in fio traces')
Eric Sandeen 579853
+    print('-G           or --Global <type>     : Search for <type> in .global files match by a pattern')
Eric Sandeen 579853
+    print('                                       - Available types are : min, max, avg, stddev')
Eric Sandeen 579853
+    print('                                       - The .global extension is added automatically to the pattern')
Eric Sandeen 579853
+    print('-m           or --min_time <time>   : Only consider data starting from <time> seconds (default is 0)')
Eric Sandeen 579853
+    print('-M           or --max_time <time>   : Only consider data ending before <time> seconds (default is -1 aka nolimit)')
Eric Sandeen 579853
+    print('-v           or --verbose           : Increasing verbosity')
Eric Sandeen 579853
+    print('-k           or --keep              : Keep all temporary files from gnuplot\'s output dir')
Eric Sandeen 579853
 
Eric Sandeen 579853
 def main(argv):
Eric Sandeen 579853
     mode='unknown'
Eric Sandeen 579853
@@ -403,14 +408,14 @@ def main(argv):
Eric Sandeen 579853
     if not os.path.isfile(gpm_dir+'math.gpm'):
Eric Sandeen 579853
 	    gpm_dir="/usr/local/share/fio/"
Eric Sandeen 579853
     	    if not os.path.isfile(gpm_dir+'math.gpm'):
Eric Sandeen 579853
-		    print "Looks like fio didn't get installed properly as no gpm files found in '/usr/share/fio' or '/usr/local/share/fio'\n"
Eric Sandeen 579853
+		    print("Looks like fio didn't get installed properly as no gpm files found in '/usr/share/fio' or '/usr/local/share/fio'\n")
Eric Sandeen 579853
 		    sys.exit(3)
Eric Sandeen 579853
 
Eric Sandeen 579853
     try:
Eric Sandeen 579853
 	    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'])
Eric Sandeen 579853
     except getopt.GetoptError:
Eric Sandeen 579853
-	 print "Error: One of the options passed to the cmdline was not supported"
Eric Sandeen 579853
-	 print "Please fix your command line or read the help (-h option)"
Eric Sandeen 579853
+	 print("Error: One of the options passed to the cmdline was not supported")
Eric Sandeen 579853
+	 print("Please fix your command line or read the help (-h option)")
Eric Sandeen 579853
          sys.exit(2)
Eric Sandeen 579853
 
Eric Sandeen 579853
     for opt, arg in opts:
Eric Sandeen 579853
@@ -457,7 +462,7 @@ def main(argv):
Eric Sandeen 579853
 
Eric Sandeen 579853
     fio_data_file=find_file('.',pattern)
Eric Sandeen 579853
     if len(fio_data_file) == 0:
Eric Sandeen 579853
-	    print "No log file found with pattern %s!" % pattern
Eric Sandeen 579853
+	    print("No log file found with pattern %s!" % pattern)
Eric Sandeen 579853
 	    # Try numjob log file format if per_numjob_logs=1
Eric Sandeen 579853
             if (pattern == '*_bw.log'):
Eric Sandeen 579853
                 fio_data_file=find_file('.','*_bw.*.log')
Eric Sandeen 579853
@@ -466,13 +471,13 @@ def main(argv):
Eric Sandeen 579853
             if len(fio_data_file) == 0:
Eric Sandeen 579853
                 sys.exit(1)
Eric Sandeen 579853
             else:
Eric Sandeen 579853
-                print "Using log file per job format instead"
Eric Sandeen 579853
+                print("Using log file per job format instead")
Eric Sandeen 579853
     else:
Eric Sandeen 579853
-	    print "%d files Selected with pattern '%s'" % (len(fio_data_file), pattern)
Eric Sandeen 579853
+	    print("%d files Selected with pattern '%s'" % (len(fio_data_file), pattern))
Eric Sandeen 579853
 
Eric Sandeen 579853
     fio_data_file=sorted(fio_data_file, key=str.lower)
Eric Sandeen 579853
     for file in fio_data_file:
Eric Sandeen 579853
-	print ' |-> %s' % file
Eric Sandeen 579853
+	print(' |-> %s' % file)
Eric Sandeen 579853
 	if "_bw.log" in file :
Eric Sandeen 579853
 		mode="Bandwidth (KB/sec)"
Eric Sandeen 579853
 	if "_iops.log" in file :
Eric Sandeen 579853
@@ -483,7 +488,7 @@ def main(argv):
Eric Sandeen 579853
 	    if "IO" in mode:
Eric Sandeen 579853
 		    title='IO benchmark with %d fio results' % len(fio_data_file)
Eric Sandeen 579853
 
Eric Sandeen 579853
-    print
Eric Sandeen 579853
+    print()
Eric Sandeen 579853
     #We need to adjust the output filename regarding the pattern required by the user
Eric Sandeen 579853
     if (pattern_set_by_user == True):
Eric Sandeen 579853
 	    gnuplot_output_filename=pattern
Eric Sandeen 579853
@@ -514,9 +519,9 @@ def main(argv):
Eric Sandeen 579853
 	# Shall we clean the temporary files ?
Eric Sandeen 579853
 	if keep_temp_files==False and force_keep_temp_files==False:
Eric Sandeen 579853
 	    	# Cleaning temporary files
Eric Sandeen 579853
-		if verbose: print "Cleaning temporary files"
Eric Sandeen 579853
+		if verbose: print("Cleaning temporary files")
Eric Sandeen 579853
 		for f in enumerate(temporary_files):
Eric Sandeen 579853
-		    	if verbose: print " -> %s"%f[1]
Eric Sandeen 579853
+			if verbose: print(" -> %s"%f[1])
Eric Sandeen 579853
 			try:
Eric Sandeen 579853
 			    os.remove(f[1])
Eric Sandeen 579853
 			except:
Eric Sandeen 579853
Index: fio-3.6/tools/hist/fiologparser_hist.py
Eric Sandeen 579853
===================================================================
Eric Sandeen 579853
--- fio-3.6.orig/tools/hist/fiologparser_hist.py
Eric Sandeen 579853
+++ fio-3.6/tools/hist/fiologparser_hist.py
Eric Sandeen 579853
@@ -1,4 +1,4 @@
Eric Sandeen 579853
-#!/usr/bin/python2.7
Eric Sandeen 579853
+#!/usr/bin/python3
Eric Sandeen 579853
 """ 
Eric Sandeen 579853
     Utility for converting *_clat_hist* files generated by fio into latency statistics.
Eric Sandeen 579853
     
Eric Sandeen 579853
Index: fio-3.6/tools/hist/half-bins.py
Eric Sandeen 579853
===================================================================
Eric Sandeen 579853
--- fio-3.6.orig/tools/hist/half-bins.py
Eric Sandeen 579853
+++ fio-3.6/tools/hist/half-bins.py
Eric Sandeen 579853
@@ -1,4 +1,4 @@
Eric Sandeen 579853
-#!/usr/bin/python2.7
Eric Sandeen 579853
+#!/usr/bin/python3
Eric Sandeen 579853
 """ Cut the number bins in half in fio histogram output. Example usage:
Eric Sandeen 579853
 
Eric Sandeen 579853
         $ half-bins.py -c 2 output_clat_hist.1.log > smaller_clat_hist.1.log
Eric Sandeen 18ffcf
Eric Sandeen 18ffcf