You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@quickstep.apache.org by ji...@apache.org on 2017/03/29 00:08:26 UTC

[22/40] incubator-quickstep git commit: Enhanced the execution DAG visualization

Enhanced the execution DAG visualization

- Added number of work orders per operator.
- Added mean time per work order for each operator.


Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/b9016a89
Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/b9016a89
Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/b9016a89

Branch: refs/heads/new-op
Commit: b9016a89b2255d923788d14867d083d6c2959558
Parents: 4ad6cec
Author: Harshad Deshmukh <hb...@apache.org>
Authored: Sat Mar 18 12:40:47 2017 -0500
Committer: Harshad Deshmukh <hb...@apache.org>
Committed: Sun Mar 19 00:58:39 2017 -0500

----------------------------------------------------------------------
 utility/ExecutionDAGVisualizer.cpp | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/b9016a89/utility/ExecutionDAGVisualizer.cpp
----------------------------------------------------------------------
diff --git a/utility/ExecutionDAGVisualizer.cpp b/utility/ExecutionDAGVisualizer.cpp
index 2938808..dd34796 100644
--- a/utility/ExecutionDAGVisualizer.cpp
+++ b/utility/ExecutionDAGVisualizer.cpp
@@ -26,6 +26,7 @@
 #include <set>
 #include <sstream>
 #include <string>
+#include <unordered_map>
 #include <utility>
 #include <vector>
 
@@ -114,6 +115,8 @@ void ExecutionDAGVisualizer::bindProfilingStats(
   std::vector<std::size_t> time_elapsed(num_nodes_, 0);
   std::size_t overall_start_time = std::numeric_limits<std::size_t>::max();
   std::size_t overall_end_time = 0;
+  std::unordered_map<std::size_t, std::size_t> workorders_count;
+  std::unordered_map<std::size_t, float> mean_time_per_workorder;
   for (const auto &entry : execution_time_records) {
     const std::size_t relop_index = entry.operator_id;
     DCHECK_LT(relop_index, num_nodes_);
@@ -128,6 +131,16 @@ void ExecutionDAGVisualizer::bindProfilingStats(
     time_end[relop_index] =
         std::max(time_end[relop_index], workorder_end_time);
     time_elapsed[relop_index] += (workorder_end_time - workorder_start_time);
+
+    if (workorders_count.find(relop_index) == workorders_count.end()) {
+      workorders_count[relop_index] = 0;
+    }
+    ++workorders_count[relop_index];
+    if (mean_time_per_workorder.find(relop_index) ==
+        mean_time_per_workorder.end()) {
+      mean_time_per_workorder[relop_index] = 0;
+    }
+    mean_time_per_workorder[relop_index] += workorder_end_time - workorder_start_time;
   }
 
   double total_time_elapsed = 0;
@@ -176,6 +189,20 @@ void ExecutionDAGVisualizer::bindProfilingStats(
           static_cast<double>(relop_elapsed_time) / (relop_end_time - relop_start_time);
       node_info.labels.emplace_back(
           "effective concurrency: " + FormatDigits(concurrency, 2));
+
+      DCHECK(workorders_count.find(node_index) != workorders_count.end());
+      const std::size_t workorders_count_for_node = workorders_count.at(node_index);
+      if (workorders_count_for_node > 0) {
+        mean_time_per_workorder[node_index] =
+            mean_time_per_workorder[node_index] /
+            (1000 * static_cast<float>(workorders_count_for_node));
+      } else {
+        mean_time_per_workorder[node_index] = 0;
+      }
+      node_info.labels.emplace_back(std::to_string(workorders_count_for_node) + " work orders");
+      node_info.labels.emplace_back(
+          "Mean work order execution time: " +
+          FormatDigits(mean_time_per_workorder[node_index], 2) + " ms");
     }
   }
 }