Repository: incubator-quickstep
Updated Branches:
  refs/heads/adaptive-bloom-filters 871ccac9e -> 2aa3a2d45


updates


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

Branch: refs/heads/adaptive-bloom-filters
Commit: 2aa3a2d45c0e3ad79a4bb90c35c32a2184d4e6ce
Parents: 871ccac
Author: Jianqiao Zhu <jianq...@cs.wisc.edu>
Authored: Thu Jun 16 01:38:53 2016 -0500
Committer: Jianqiao Zhu <jianq...@cs.wisc.edu>
Committed: Thu Jun 16 01:38:53 2016 -0500

----------------------------------------------------------------------
 query_execution/Worker.cpp |  1 -
 utility/DAGVisualizer.cpp  | 38 +++++++++++++++++++++++++++++++++++---
 utility/DAGVisualizer.hpp  |  2 ++
 utility/EventProfiler.hpp  | 14 +++++++++-----
 4 files changed, 46 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/2aa3a2d4/query_execution/Worker.cpp
----------------------------------------------------------------------
diff --git a/query_execution/Worker.cpp b/query_execution/Worker.cpp
index 1372e1d..539d956 100644
--- a/query_execution/Worker.cpp
+++ b/query_execution/Worker.cpp
@@ -63,7 +63,6 @@ void Worker::run() {
         line->emplace_back();
         message.getWorkOrder()->execute();
         line->back().endEvent();
-        container->startEvent(message.getRelationalOpIndex());
         const std::size_t query_id_for_workorder =
             message.getWorkOrder()->getQueryID();
         delete message.getWorkOrder();

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/2aa3a2d4/utility/DAGVisualizer.cpp
----------------------------------------------------------------------
diff --git a/utility/DAGVisualizer.cpp b/utility/DAGVisualizer.cpp
index 64c235d..ac8da47 100644
--- a/utility/DAGVisualizer.cpp
+++ b/utility/DAGVisualizer.cpp
@@ -28,6 +28,7 @@
 #include <vector>
 
 #include "query_optimizer/QueryPlan.hpp"
+#include "utility/EventProfiler.hpp"
 #include "utility/StringUtil.hpp"
 
 #include "glog/logging.h"
@@ -48,22 +49,34 @@ std::string DAGVisualizer::toDOT() {
 
   std::vector<double> time_elapsed(num_nodes, 0);
   std::vector<double> time_percentage(num_nodes, 0);
+  std::vector<double> time_start(num_nodes, 
std::numeric_limits<double>::max());
+  std::vector<double> time_end(num_nodes, 0);
+  const auto &zero_time = relop_profiler.zero_time();
   for (const auto &container : relop_profiler.containers()) {
     for (const auto &line : container.second.events) {
+      const std::size_t relop_index = line.first;
       for (const auto &event : line.second) {
-        time_elapsed[line.first] +=
-            std::chrono::duration<double>(event.start_time - 
event.end_time).count();
+        time_elapsed[relop_index] +=
+            std::chrono::duration<double>(event.end_time - 
event.start_time).count();
+        time_start[relop_index] =
+            std::min(time_start[relop_index],
+                     std::chrono::duration<double>(event.start_time - 
zero_time).count());
+        time_end[relop_index] =
+            std::max(time_end[relop_index],
+                     std::chrono::duration<double>(event.end_time - 
zero_time).count());
       }
     }
   }
   const std::size_t num_threads = relop_profiler.containers().size();
   double total_time_elapsed = 0;
+  double max_percentage = 0;
   for (std::size_t i = 0; i < time_elapsed.size(); ++i) {
     time_elapsed[i] /= num_threads;
     total_time_elapsed += time_elapsed[i];
   }
   for (std::size_t i = 0; i < time_elapsed.size(); ++i) {
     time_percentage[i] = time_elapsed[i] / total_time_elapsed;
+    max_percentage = std::max(max_percentage, time_percentage[i]);
   }
 
   std::vector<bool> display_ops(num_nodes, false);
@@ -71,12 +84,23 @@ std::string DAGVisualizer::toDOT() {
     const std::string relop_name = dag.getNodePayload(node_index).getName();
     if (no_display_op_names.find(relop_name) == no_display_op_names.end()) {
       display_ops[node_index] = true;
+
       nodes_.emplace_back();
       NodeInfo &node_info = nodes_.back();
       node_info.id = node_index;
+
+      std::string hue =
+          std::to_string(time_percentage[node_index] / max_percentage);
+      node_info.color = hue + " " + hue + " 1.0";
+
       node_info.labels.emplace_back(relop_name);
       node_info.labels.emplace_back(
-          std::to_string(std::lround(time_elapsed[node_index] / 100)));
+          std::to_string(std::lround(time_elapsed[node_index] * 1000)) +
+          "ms (" + PercentageToString(time_percentage[node_index] * 100) + 
"%)");
+      node_info.labels.emplace_back(
+          "span: [" +
+          std::to_string(std::lround(time_start[node_index] * 1000)) + "ms, " +
+          std::to_string(std::lround(time_end[node_index] * 1000)) + "ms]");
     }
   }
   for (std::size_t node_index = 0; node_index < num_nodes; ++node_index) {
@@ -135,4 +159,12 @@ std::string DAGVisualizer::toDOT() {
   return graph_oss.str();
 }
 
+std::string DAGVisualizer::PercentageToString(double percentage) {
+  std::ostringstream oss;
+  oss << static_cast<std::uint32_t>(percentage) << ".";
+  int digits = std::lround(percentage * 10000) % 100;
+  oss << digits / 10 << digits % 10;
+  return oss.str();
+}
+
 }  // namespace quickstep

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/2aa3a2d4/utility/DAGVisualizer.hpp
----------------------------------------------------------------------
diff --git a/utility/DAGVisualizer.hpp b/utility/DAGVisualizer.hpp
index 5736f4b..3e80c4d 100644
--- a/utility/DAGVisualizer.hpp
+++ b/utility/DAGVisualizer.hpp
@@ -49,6 +49,8 @@ class DAGVisualizer {
   std::string toDOT();
 
  private:
+  static std::string PercentageToString(double percentage);
+
   /**
    * @brief Information of a graph node.
    */

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/2aa3a2d4/utility/EventProfiler.hpp
----------------------------------------------------------------------
diff --git a/utility/EventProfiler.hpp b/utility/EventProfiler.hpp
index cd5b1e2..549033c 100644
--- a/utility/EventProfiler.hpp
+++ b/utility/EventProfiler.hpp
@@ -47,7 +47,7 @@ class EventProfiler {
 
  public:
   EventProfiler()
-      : zero_time(clock::now()) {
+      : zero_time_(clock::now()) {
   }
 
   struct EventInfo {
@@ -117,9 +117,9 @@ class EventProfiler {
 
           PrintTuple(event_info.payload, ",");
 
-          os << std::chrono::duration<double>(event_info.start_time - 
zero_time).count()
+          os << std::chrono::duration<double>(event_info.start_time - 
zero_time_).count()
              << ","
-             << std::chrono::duration<double>(event_info.end_time - 
zero_time).count()
+             << std::chrono::duration<double>(event_info.end_time - 
zero_time_).count()
              << "\n";
         }
       }
@@ -128,7 +128,7 @@ class EventProfiler {
   }
 
   void clear() {
-    zero_time = clock::now();
+    zero_time_ = clock::now();
     thread_map_.clear();
   }
 
@@ -136,6 +136,10 @@ class EventProfiler {
     return thread_map_;
   }
 
+  const clock::time_point &zero_time() {
+    return zero_time_;
+  }
+
  private:
   template<class Tuple, std::size_t N>
   struct TuplePrinter {
@@ -157,7 +161,7 @@ class EventProfiler {
     TuplePrinter<decltype(t), sizeof...(Args)>::Print(t, sep);
   }
 
-  clock::time_point zero_time;
+  clock::time_point zero_time_;
   std::map<std::thread::id, EventContainer> thread_map_;
   Mutex mutex_;
 };

Reply via email to