All of lore.kernel.org
 help / color / mirror / Atom feed
From: Erwan Velu <erwan@enovance.com>
To: "fio@vger.kernel.org" <fio@vger.kernel.org>
Subject: [Pull Request] Updating tools
Date: Tue, 30 Jul 2013 14:08:35 +0200	[thread overview]
Message-ID: <51F7ACC3.2000904@enovance.com> (raw)

Hi Jens,

I've been pushing this branch featuring :
- installing fio2gnuplot (and .gpm files) & genfio during make install
- moving fio_generate_plot into tools/ for more coherency
- Adding a option to fio2gnuplot to render gnuplot is a separate dir

Thanks for watching ;o)

Erwan,

The following changes since commit bf974737b15bad8d740f10503e9eab6e0b420aa2:

   Update sample atomic write job file (2013-07-26 13:11:52 -0600)

are available in the git repository at:

   git@github.com:enovance/fio.git erwan/outputdir

for you to fetch changes up to 1cc6579e7dc114347467ed359f015943b83bb4e9:

   fio2gnuplot: Using default install dir for gpm files (2013-07-30 
14:07:14 +0200)

----------------------------------------------------------------
Erwan Velu (5):
       fio2gnuplot: Option to select gnuplot's output dir
       Makefile: Installing fio2gnuplot & sons
       Makefile: Installing genfio at install time
       Tree: Moving fio_generate_plots in tools/
       fio2gnuplot: Using default install dir for gpm files

  Makefile                                           |  8 ++++++--
  fio_generate_plots => tools/fio_generate_plots     |  0
  fio_generate_plots.1 => tools/fio_generate_plots.1 |  0
  tools/plot/fio2gnuplot.py                          | 82 
++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------
  4 files changed, 56 insertions(+), 34 deletions(-)
  rename fio_generate_plots => tools/fio_generate_plots (100%)
  rename fio_generate_plots.1 => tools/fio_generate_plots.1 (100%)

diff --git a/Makefile b/Makefile
index 3de9735..8494b27 100644
--- a/Makefile
+++ b/Makefile
@@ -20,7 +20,7 @@ OPTFLAGS= -O3 -g -ffast-math
  CFLAGS    = -std=gnu99 -Wwrite-strings -Wall 
-Wdeclaration-after-statement $(OPTFLAGS) $(EXTFLAGS) $(BUILD_CFLAGS)
  LIBS    += -lm $(EXTLIBS)
  PROGS    = fio
-SCRIPTS = fio_generate_plots
+SCRIPTS = tools/fio_generate_plots tools/plot/fio2gnuplot.py tools/genfio

  ifdef CONFIG_GFIO
    PROGS += gfio
@@ -189,8 +189,10 @@ bindir = $(prefix)/bin

  ifeq ($(CONFIG_TARGET_OS), Darwin)
  mandir = /usr/share/man
+sharedir = /usr/share/fio
  else
  mandir = $(prefix)/man
+sharedir = $(prefix)/share/fio
  endif

  all: $(PROGS) $(SCRIPTS) FORCE
@@ -278,4 +280,6 @@ install: $(PROGS) $(SCRIPTS) FORCE
      $(INSTALL) $(PROGS) $(SCRIPTS) $(DESTDIR)$(bindir)
      $(INSTALL) -m 755 -d $(DESTDIR)$(mandir)/man1
      $(INSTALL) -m 644 fio.1 $(DESTDIR)$(mandir)/man1
-    $(INSTALL) -m 644 fio_generate_plots.1 $(DESTDIR)$(mandir)/man1
+    $(INSTALL) -m 644 tools/fio_generate_plots.1 $(DESTDIR)$(mandir)/man1
+    $(INSTALL) -m 755 -d $(DESTDIR)$(sharedir)
+    $(INSTALL) -m 644 tools/plot/*gpm $(DESTDIR)$(sharedir)/
diff --git a/fio_generate_plots b/tools/fio_generate_plots
similarity index 100%
rename from fio_generate_plots
rename to tools/fio_generate_plots
diff --git a/fio_generate_plots.1 b/tools/fio_generate_plots.1
similarity index 100%
rename from fio_generate_plots.1
rename to tools/fio_generate_plots.1
diff --git a/tools/plot/fio2gnuplot.py b/tools/plot/fio2gnuplot.py
index 03ef0dd..eeb15db 100755
--- a/tools/plot/fio2gnuplot.py
+++ b/tools/plot/fio2gnuplot.py
@@ -37,10 +37,11 @@ def find_file(path, pattern):

      return fio_data_file

-def 
generate_gnuplot_script(fio_data_file,title,gnuplot_output_filename,mode,disk_perf):
-    f=open("mygraph",'w')
+def 
generate_gnuplot_script(fio_data_file,title,gnuplot_output_filename,gnuplot_output_dir,mode,disk_perf,gpm_dir):
+    filename=gnuplot_output_dir+'mygraph'
+    f=open(filename,'w')
      if len(fio_data_file) > 1:
-            f.write("call \'graph3D.gpm\' \'%s' \'%s\' \'\' \'%s\' 
\'%s\'\n" % (title,gnuplot_output_filename,gnuplot_output_filename,mode))
+            f.write("call \'%s/graph3D.gpm\' \'%s' \'%s\' \'\' \'%s\' 
\'%s\'\n" % 
(gpm_dir,title,gnuplot_output_filename,gnuplot_output_filename,mode))

          pos=0
          # Let's create a temporary file for each selected fio file
@@ -51,26 +52,28 @@ def 
generate_gnuplot_script(fio_data_file,title,gnuplot_output_filename,mode,dis
                  smooth_filename = "%s-2Dsmooth" % (png_file)
                  trend_filename = "%s-2Dtrend" % (png_file)
                  avg  = average(disk_perf[pos])
-                f.write("call \'graph2D.gpm\' \'%s' \'%s\' \'\' \'%s\' 
\'%s\' \'%s\' \'%s\' \'%f\'\n" % 
(title,tmp_filename,raw_filename,mode,smooth_filename,trend_filename,avg))
+                f.write("call \'%s/graph2D.gpm\' \'%s' \'%s\' \'\' 
\'%s\' \'%s\' \'%s\' \'%s\' \'%f\'\n" % 
(gpm_dir,title,tmp_filename,raw_filename,mode,smooth_filename,trend_filename,avg))
                  pos = pos +1

      f.close()

-def 
generate_gnuplot_math_script(title,gnuplot_output_filename,mode,average):
-    f=open("mymath",'a')
-        f.write("call \'math.gpm\' \'%s' \'%s\' \'\' \'%s\' \'%s\' 
%s\n" % 
(title,gnuplot_output_filename,gnuplot_output_filename,mode,average))
+def 
generate_gnuplot_math_script(title,gnuplot_output_filename,mode,average,gnuplot_output_dir,gpm_dir):
+    filename=gnuplot_output_dir+'mymath';
+    f=open(filename,'a')
+        f.write("call \'%s/math.gpm\' \'%s' \'%s\' \'\' \'%s\' \'%s\' 
%s\n" % 
(gpm_dir,title,gnuplot_output_filename,gnuplot_output_filename,mode,average))
      f.close()

-def compute_aggregated_file(fio_data_file, gnuplot_output_filename):
+def compute_aggregated_file(fio_data_file, gnuplot_output_filename, 
gnuplot_output_dir):
      temp_files=[]
      pos=0
+
      # Let's create a temporary file for each selected fio file
      for file in fio_data_file:
-        tmp_filename = "gnuplot_temp_file.%d" % pos
+        tmp_filename = "%sgnuplot_temp_file.%d" % (gnuplot_output_dir, pos)
          temp_files.append(open(tmp_filename,'r'))
          pos = pos +1

-    f = open(gnuplot_output_filename, "w")
+    f = open(gnuplot_output_dir+gnuplot_output_filename, "w")
      index=0
      # Let's add some information
      for tempfile in temp_files:
@@ -83,14 +86,14 @@ def compute_aggregated_file(fio_data_file, 
gnuplot_output_filename):

  def average(s): return sum(s) * 1.0 / len(s)

-def compute_temp_file(fio_data_file,disk_perf):
+def compute_temp_file(fio_data_file,disk_perf,gnuplot_output_dir):
      files=[]
      temp_outfile=[]
      blk_size=0
      for file in fio_data_file:
          files.append(open(file))
          pos = len(files) - 1
-        tmp_filename = "gnuplot_temp_file.%d" % pos
+        tmp_filename = "%sgnuplot_temp_file.%d" % (gnuplot_output_dir,pos)
          gnuplot_file=open(tmp_filename,'w')
          temp_outfile.append(gnuplot_file)
          gnuplot_file.write("#Temporary file based on file %s\n" % file)
@@ -144,14 +147,14 @@ def compute_temp_file(fio_data_file,disk_perf):
                  file.close()
      return blk_size

-def compute_math(fio_data_file, 
title,gnuplot_output_filename,mode,disk_perf):
+def compute_math(fio_data_file, 
title,gnuplot_output_filename,gnuplot_output_dir,mode,disk_perf,gpm_dir):
      global_min=[]
      global_max=[]
-    average_file=open(gnuplot_output_filename+'.average', 'w')
-    min_file=open(gnuplot_output_filename+'.min', 'w')
-    max_file=open(gnuplot_output_filename+'.max', 'w')
-    stddev_file=open(gnuplot_output_filename+'.stddev', 'w')
-    global_file=open(gnuplot_output_filename+'.global','w')
+ 
average_file=open(gnuplot_output_dir+gnuplot_output_filename+'.average', 
'w')
+ min_file=open(gnuplot_output_dir+gnuplot_output_filename+'.min', 'w')
+ max_file=open(gnuplot_output_dir+gnuplot_output_filename+'.max', 'w')
+ stddev_file=open(gnuplot_output_dir+gnuplot_output_filename+'.stddev', 
'w')
+ global_file=open(gnuplot_output_dir+gnuplot_output_filename+'.global','w')

      min_file.write('DiskName %s\n' % mode)
      max_file.write('DiskName %s\n'% mode)
@@ -195,14 +198,14 @@ def compute_math(fio_data_file, 
title,gnuplot_output_filename,mode,disk_perf):
      stddev_file.close()
      global_file.close()
      try:
-        os.remove('mymath')
+        os.remove(gnuplot_output_dir+'mymath')
      except:
          True

-    generate_gnuplot_math_script("Average values of 
"+title,gnuplot_output_filename+'.average',mode,int(avg))
-    generate_gnuplot_math_script("Min values of 
"+title,gnuplot_output_filename+'.min',mode,average(global_min))
-    generate_gnuplot_math_script("Max values of 
"+title,gnuplot_output_filename+'.max',mode,average(global_max))
-    generate_gnuplot_math_script("Standard Deviation of 
"+title,gnuplot_output_filename+'.stddev',mode,int(standard_deviation))
+    generate_gnuplot_math_script("Average values of 
"+title,gnuplot_output_filename+'.average',mode,int(avg),gnuplot_output_dir,gpm_dir)
+    generate_gnuplot_math_script("Min values of 
"+title,gnuplot_output_filename+'.min',mode,average(global_min),gnuplot_output_dir,gpm_dir)
+    generate_gnuplot_math_script("Max values of 
"+title,gnuplot_output_filename+'.max',mode,average(global_max),gnuplot_output_dir,gpm_dir)
+    generate_gnuplot_math_script("Standard Deviation of 
"+title,gnuplot_output_filename+'.stddev',mode,int(standard_deviation),gnuplot_output_dir,gpm_dir)

  def parse_global_files(fio_data_file, global_search):
      max_result=0
@@ -249,11 +252,11 @@ def parse_global_files(fio_data_file, global_search):
      else:
          print "Global search %s is not yet implemented\n" % global_search

-def render_gnuplot():
+def render_gnuplot(gnuplot_output_dir):
      print "Running gnuplot Rendering\n"
      try:
-        os.system("gnuplot mymath")
-        os.system("gnuplot mygraph")
+        os.system("cd %s; gnuplot mymath" % gnuplot_output_dir)
+        os.system("cd %s; gnuplot mygraph" % gnuplot_output_dir)
      except:
          print "Could not run gnuplot on mymath or mygraph !\n"
          sys.exit(1);
@@ -268,6 +271,7 @@ def print_help():
      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'
@@ -280,13 +284,21 @@ def main(argv):
      pattern_set_by_user=False
      title='No title'
      gnuplot_output_filename='result'
+    gnuplot_output_dir='./'
+    gpm_dir="/usr/share/fio/"
      disk_perf=[]
      run_gnuplot=False
      parse_global=False
      global_search=''

+    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 got 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:],"ghbio:t:p:G:")
+        opts, args = getopt.getopt(argv[1:],"ghbio:d:t:p:G:")
      except getopt.GetoptError:
       print_help()
           sys.exit(2)
@@ -302,6 +314,12 @@ def main(argv):
       pattern=pattern.replace('\\','')
        elif opt in ("-o", "--outputfile"):
           gnuplot_output_filename=arg
+      elif opt in ("-d", "--outputdir"):
+         gnuplot_output_dir=arg
+     if not gnuplot_output_dir.endswith('/'):
+        gnuplot_output_dir=gnuplot_output_dir+'/'
+     if not os.path.exists(gnuplot_output_dir):
+        os.makedirs(gnuplot_output_dir)
        elif opt in ("-t", "--title"):
           title=arg
        elif opt in ("-g", "--gnuplot"):
@@ -352,14 +370,14 @@ def main(argv):
      if parse_global==True:
      parse_global_files(fio_data_file, global_search)
      else:
-        blk_size=compute_temp_file(fio_data_file,disk_perf)
+ blk_size=compute_temp_file(fio_data_file,disk_perf,gnuplot_output_dir)
          title="%s @ Blocksize = %dK" % (title,blk_size/1024)
-        compute_aggregated_file(fio_data_file, gnuplot_output_filename)
- compute_math(fio_data_file,title,gnuplot_output_filename,mode,disk_perf)
- 
generate_gnuplot_script(fio_data_file,title,gnuplot_output_filename,mode,disk_perf)
+        compute_aggregated_file(fio_data_file, gnuplot_output_filename, 
gnuplot_output_dir)
+ 
compute_math(fio_data_file,title,gnuplot_output_filename,gnuplot_output_dir,mode,disk_perf,gpm_dir)
+ 
generate_gnuplot_script(fio_data_file,title,gnuplot_output_filename,gnuplot_output_dir,mode,disk_perf,gpm_dir)

          if (run_gnuplot==True):
-            render_gnuplot()
+            render_gnuplot(gnuplot_output_dir)

      # Cleaning temporary files
      try:


             reply	other threads:[~2013-07-30 12:08 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-30 12:08 Erwan Velu [this message]
2013-07-31 10:36 ` [Pull Request] Updating tools Erwan Velu
2013-07-31 18:35   ` Jens Axboe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=51F7ACC3.2000904@enovance.com \
    --to=erwan@enovance.com \
    --cc=fio@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.