]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
CrushTester: dump histogram of choose attempts
authorSage Weil <sage@inktank.com>
Fri, 8 Jun 2012 02:21:51 +0000 (19:21 -0700)
committerSage Weil <sage@inktank.com>
Fri, 8 Jun 2012 17:58:12 +0000 (10:58 -0700)
Signed-off-by: Sage Weil <sage@inktank.com>
src/crush/CrushTester.cc
src/crush/CrushTester.h
src/crush/CrushWrapper.h
src/crushtool.cc
src/test/cli/crushtool/help.t

index cf0a0319e4fb8f0ea79bb50d10bd045f6d2d2f5e..a88aa9d869b8ca14261dbd27ff348d1563b0de5a 100644 (file)
@@ -90,7 +90,8 @@ int CrushTester::test()
   if (verbose > 3 )
     err << "devices weights (hex): " << hex << weight << dec << std::endl;
 
-
+  if (output_choose_tries)
+    crush.start_choose_profile();
   
   for (int r = min_rule; r < crush.get_max_rules() && r <= max_rule; r++) {
       
@@ -312,5 +313,20 @@ int CrushTester::test()
 #endif
     }
   }
+
+  if (output_choose_tries) {
+    __u32 *v;
+    int n = crush.get_choose_profile(&v);
+    for (int i=0; i<n; i++) {
+      cout.setf(std::ios::right);
+      cout << std::setw(2)
+          << i << ": " << std::setw(9) << v[i];
+      cout.unsetf(std::ios::right);
+      cout << std::endl;
+    }
+
+    crush.stop_choose_profile();
+  }
+
   return 0;
 }
index 4f06885d00bbfb0af5c3e8797987bf9ecf473213..0ae4ca57305d0d709290aa82d181f7d98ad29f7f 100644 (file)
@@ -29,6 +29,7 @@ class CrushTester {
   bool output_utilization_all;
   bool output_statistics;
   bool output_bad_mappings;
+  bool output_choose_tries;
 
 public:
   CrushTester(CrushWrapper& c, ostream& eo, int verbosity=0)
@@ -49,11 +50,13 @@ public:
   void set_output(bool set_output_utilization,
                  bool set_output_utilization_all,
                  bool set_output_statistics,
-                 bool set_output_bad_mappings) {
+                 bool set_output_bad_mappings,
+                 bool set_output_choose_tries) {
     output_utilization = set_output_utilization;
     output_utilization_all = set_output_utilization_all;
     output_statistics = set_output_statistics;
     output_bad_mappings = set_output_bad_mappings;
+    output_choose_tries = set_output_choose_tries;
   }
   void set_batches(int b) {
     num_batches = b;
index 86cbe2f3012c5d31b41c7da784eb77cac0042198..82b9e4b2de29f862ea255b90a224a866f832a6e2 100644 (file)
@@ -491,6 +491,26 @@ public:
     crush_finalize(crush);
   }
 
+  void start_choose_profile() {
+    free(crush->choose_tries);
+    crush->choose_tries = (__u32 *)malloc(sizeof(*crush->choose_tries) * crush->choose_total_tries);
+    memset(crush->choose_tries, 0,
+          sizeof(*crush->choose_tries) * crush->choose_total_tries);
+  }
+  void stop_choose_profile() {
+    free(crush->choose_tries);
+    crush->choose_tries = 0;
+  }
+
+  int get_choose_profile(__u32 **vec) {
+    if (crush->choose_tries) {
+      *vec = crush->choose_tries;
+      return crush->choose_total_tries;
+    }
+    return 0;
+  }
+
+
   void set_max_devices(int m) {
     crush->max_devices = m;
   }
index 6ef3ae4acff9a728e65f4d748991bab68680d49a..cd7aec9070038d50c7b6e3a0670056a49a3eaf95 100644 (file)
@@ -79,6 +79,7 @@ void usage()
   cout << "   --output utilization-all   include zero weight items\n";
   cout << "   --output-statistics        output chi squared statistics\n";
   cout << "   --output-bad-mappings      output bad mappings\n";
+  cout << "   --output-choose-tries      output choose tries histogram\n";
   cout << "   --set-choose-local-tries N\n";
   cout << "                         set choose local retries before re-descent\n";
   cout << "   --set-choose-local-fallback-tries N\n";
@@ -121,6 +122,7 @@ int main(int argc, const char **argv)
   bool output_utilization_all = false;
   bool output_statistics = false;
   bool output_bad_mappings = false;
+  bool output_choose_tries = false;
 
   bool reweight = false;
   int add_item = -1;
@@ -174,6 +176,8 @@ int main(int argc, const char **argv)
       output_statistics = true;
     } else if (ceph_argparse_flag(args, i, "--output_bad_mappings", (char*)NULL)) {
       output_bad_mappings = true;
+    } else if (ceph_argparse_flag(args, i, "--output_choose_tries", (char*)NULL)) {
+      output_choose_tries = true;
     } else if (ceph_argparse_witharg(args, i, &val, "-c", "--compile", (char*)NULL)) {
       srcfn = val;
       compile = true;
@@ -598,7 +602,7 @@ int main(int argc, const char **argv)
 
   if (test) {
     tester.set_output(output_utilization, output_utilization_all, output_statistics,
-                     output_bad_mappings);
+                     output_bad_mappings, output_choose_tries);
     int r = tester.test();
     if (r < 0)
       exit(1);
index 68ded1ca1494a3ef99084cfd53fad17ac103622c..0f4e257f070f60a480c3d93b2875a71ef9d539f1 100644 (file)
@@ -32,6 +32,7 @@
      --output utilization-all   include zero weight items
      --output-statistics        output chi squared statistics
      --output-bad-mappings      output bad mappings
+     --output-choose-tries      output choose tries histogram
      --set-choose-local-tries N
                            set choose local retries before re-descent
      --set-choose-local-fallback-tries N