From c1a6beba394de7db8590f6f92e7fa232ed6b2d45 Mon Sep 17 00:00:00 2001
From: Florian Fischer <florian.fl.fischer@fau.de>
Date: Mon, 23 Jul 2018 17:30:32 +0200
Subject: [PATCH] fix status output and add bar plot

---
 bench_mysql.py | 39 ++++++++++++++++++++++++++++++++-------
 1 file changed, 32 insertions(+), 7 deletions(-)

diff --git a/bench_mysql.py b/bench_mysql.py
index b8bec25..1e5c674 100644
--- a/bench_mysql.py
+++ b/bench_mysql.py
@@ -120,10 +120,10 @@ class Benchmark_MYSQL( Benchmark ):
                     print("Aborting Benchmark.")
                     return False
 
-                for i in self.nthreads:
-                    print(tname + ":", i, "of", n, "\r", end='')
+                for i, thread in enumerate(self.nthreads):
+                    print(tname + ":", i + 1, "of", n, "\r", end='')
 
-                    target_cmd = cmd.format(i, cwd).split(" ")
+                    target_cmd = cmd.format(thread, cwd).split(" ")
                     p = subprocess.run(target_cmd, stderr=subprocess.PIPE, stdout=subprocess.PIPE,
                                         universal_newlines=True)
 
@@ -144,7 +144,7 @@ class Benchmark_MYSQL( Benchmark ):
                     result["avg"] = re.search("avg:\s*(\d*.\d*)", p.stdout).group(1)
                     result["max"] = re.search("max:\s*(\d*.\d*)", p.stdout).group(1)
 
-                    key = (tname, i)
+                    key = (tname, thread)
                     if not key in self.results:
                         self.results[key] = [result]
                     else:
@@ -162,15 +162,17 @@ class Benchmark_MYSQL( Benchmark ):
 
                 self.server.kill()
                 self.server.wait()
-                
+
         if save:
             with open(self.name + ".save", "wb") as f:
                 pickle.dump(self.results, f)
         return True
 
     def summary(self):
+        # linear plot
         nthreads = self.results["args"]["nthreads"]
         targets = self.results["targets"]
+        y_mapping = {v: i for i, v in enumerate(nthreads)}
 
         for target in targets:
             y_vals = [0] * len(nthreads)
@@ -179,14 +181,37 @@ class Benchmark_MYSQL( Benchmark ):
                     d = []
                     for m in measures:
                         d.append(int(m["transactions"]))
-                    y_vals[mid[1]-nthreads[0]] = np.mean(d)
+                    y_vals[y_mapping[mid[1]]] = np.mean(d)
             plt.plot(nthreads, y_vals, label=target, linestyle='-', marker='.')
 
         plt.legend()
         plt.xlabel("threads")
         plt.ylabel("transactions")
         plt.title("sysbench oltp read only")
-        plt.savefig("mysql.ro.png")
+        plt.savefig(self.file_name + ".l.ro.png")
+        plt.clf()
+
+        # bar plot
+        nthreads = list(self.results["args"]["nthreads"])
+        targets = self.results["targets"]
+        y_mapping = {v: i for i, v in enumerate(nthreads)}
+
+        for i, target in enumerate(targets):
+            y_vals = [0] * len(nthreads)
+            for mid, measures in self.results.items():
+                if mid[0] == target:
+                    d = []
+                    for m in measures:
+                        d.append(int(m["transactions"]))
+                    y_vals[y_mapping[mid[1]]] = np.mean(d)
+            plt.bar([x-i/8 for x in range(1, len(nthreads) + 1)], y_vals, width=0.2, label=target, align="center")
+
+        plt.legend()
+        plt.xlabel("threads")
+        plt.xticks(range(1, len(nthreads) + 1), nthreads)
+        plt.ylabel("transactions")
+        plt.title("sysbench oltp read only")
+        plt.savefig(self.file_name + ".b.ro.png")
         plt.clf()
 
 mysql = Benchmark_MYSQL()
-- 
GitLab