Kaynağa Gözat

batch task graph

David 10 yıl önce
ebeveyn
işleme
be44cea10f
2 değiştirilmiş dosya ile 122 ekleme ve 0 silme
  1. 116 0
      scripts/batchplotter.py
  2. 6 0
      scripts/tasks1.json

+ 116 - 0
scripts/batchplotter.py

@@ -0,0 +1,116 @@
+#!/usr/bin/env python3
+import json
+import numpy as np
+import matplotlib.pyplot as plt
+import sys
+from subprocess import Popen, PIPE
+from stats import parseData
+
+bar_width = 0.25
+index = []
+def plot(process_data):
+    fig, ax = plt.subplots(figsize=(10,5))
+    
+    task_output = []
+    for p in process_data:
+        cmd = ["./simusched",p["tasks"]]
+        cmd.extend(p["args"].split(" "))
+        process = Popen(cmd, stdout=PIPE)
+        (out, _) = process.communicate()
+        process.wait()
+        out = out.decode("utf-8")
+        parsed = parseData(out.split("\n"))
+
+        ap  = {}
+        ap["processes"] = parsed
+        ap["tasks"] = p["tasks"]
+        ap["args"] = p["args"]
+        task_output.append(ap)
+
+
+    m_latencies = []
+    m_ready = []
+    m_cpu = []
+    m_cpuio = []
+    for t in task_output:
+        m_latencies.append(meanLatency(t))
+        m_ready.append(meanReady(t))
+        m_cpu.append(meanCPU(t))
+        m_cpuio.append(meanCPUIO(t))
+
+    plot_data(0, m_latencies, 'r', 'M. Latency')
+    plot_data(1, m_ready, 'g', 'M. Ready')
+    plot_data(2, m_cpu, 'b', 'M. CPU')
+    plot_data(3, m_cpuio, '#deadbe', 'M. CPUIO')
+
+    ax.set_ylabel('Time')
+    ax.set_title('title')
+    ax.set_xticks([ i + 1.5 * bar_width for i in index])
+    ax.set_xticklabels( ["%s %s" % (task_output[i]["tasks"], task_output[i]["args"])
+                        for i in range(len(process_data))])
+    
+    for tick in ax.xaxis.get_major_ticks():
+        tick.label.set_fontsize(8)
+
+    plt.legend()
+    
+    plt.tight_layout()
+    plt.grid()
+    plt.savefig('out.png')
+    plt.show()
+
+
+def meanLatency(pl):
+    totLatency = sum([ latency(p) for p in pl["processes"]])
+    mean = totLatency / len(pl["processes"])
+    return mean
+
+def meanReady(pl):
+    totReady = sum([ ready(p) for p in pl["processes"]])
+    mean = totReady / len(pl["processes"])
+    return mean
+
+def meanCPU(pl):
+    totCPU = sum([ cpu(p) for p in pl["processes"]])
+    mean = totCPU / len(pl["processes"])
+    return mean
+
+def meanCPUIO(pl):
+    totCPUIO = sum([ cpu_io(p) for p in pl["processes"]])
+    mean = totCPUIO / len(pl["processes"])
+    return mean
+
+def latency(p):
+    return p["primerTick"]-p["cargaTick"]
+
+def ready(p):
+    return (p["ultimoTick"]-p["primerTick"])-(p["ticksBlock"]+p["ticksCpu"])+(p["primerTick"]-p["cargaTick"])
+
+def cpu(p):
+    return p["ticksCpu"]
+
+def cpu_io(p):
+    return p["ticksBlock"]+p["ticksCpu"]
+
+def plot_data(ind, data, color, label):
+    opacity = 1
+    plt.bar([i + bar_width*ind for i in index],
+        data,
+        bar_width,
+        alpha=opacity,
+        color=color,
+        label=(label))
+
+if len(sys.argv) != 2:
+    print("1 arg, json file")
+    sys.exit(1)
+
+try:
+    data = open(sys.argv[1]).read()
+    j = json.loads(data)
+    index = [ 1.2*i for i in list(range(len(j["list"]))) ]
+    plot(j["list"])
+except Exception as e:
+    print("Exception")
+    print(data)
+    print(e)

+ 6 - 0
scripts/tasks1.json

@@ -0,0 +1,6 @@
+{ "list" : [
+	{ "tasks": "ejer2.tsk", "args": "1 2 99 SchedFCFS" },
+	{ "tasks": "ejer2.tsk", "args": "2 2 99 SchedFCFS" },
+	{ "tasks": "ejer2.tsk", "args": "4 2 99 SchedFCFS" },
+	{ "tasks": "ejer3.tsk", "args": "1 2 99 SchedFCFS" }
+] }