]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
*** empty log message ***
authorsage <sage@29311d96-e01e-0410-9327-a35deaab8ce9>
Mon, 4 Sep 2006 22:26:06 +0000 (22:26 +0000)
committersage <sage@29311d96-e01e-0410-9327-a35deaab8ce9>
Mon, 4 Sep 2006 22:26:06 +0000 (22:26 +0000)
git-svn-id: https://ceph.svn.sf.net/svnroot/ceph@843 29311d96-e01e-0410-9327-a35deaab8ce9

ceph/ebofs/Ebofs.cc
ceph/osd/Ager.cc
ceph/osd/ObjectStore.h

index 5e7780161fbc1431b330f0c59cb58765eec10cb7..948133ee134ed4699be66e21751f1184f39cc639 100644 (file)
@@ -2767,6 +2767,8 @@ void Ebofs::_get_frag_stat(FragmentationStat& st)
   ebofs_lock.Lock();
 
   // free list is easy
+  st.total = dev.get_num_blocks();
+  st.total_free = get_free_blocks() + get_limbo_blocks();
   st.free_extent_dist.clear();
   st.num_free_extent = 0;
 
@@ -2791,10 +2793,11 @@ void Ebofs::_get_frag_stat(FragmentationStat& st)
                tfree += l;
                int b = 0;
                do {
-                 l = l >> 2;
-                 b++; b++;
+                 l = l >> 1;
+                 b++; 
                } while (l);
                st.free_extent_dist[b]++;
+               st.free_extent_dist_sum[b] += cursor.current().value;
                st.num_free_extent++;
 
                if (cursor.move_right() <= 0) break;
@@ -2808,6 +2811,7 @@ void Ebofs::_get_frag_stat(FragmentationStat& st)
   st.num_extent = 0;
   st.avg_extent = 0;
   st.extent_dist.clear();
+  st.extent_dist_sum.clear();
   st.avg_extent_per_object = 0;
   st.avg_extent_jump = 0;
 
@@ -2836,10 +2840,11 @@ void Ebofs::_get_frag_stat(FragmentationStat& st)
 
          int b = 0;
          do {
-               l = l >> 2;
-               b++; b++;
+               l = l >> 1;
+               b++; 
          } while (l);
          st.extent_dist[b]++;
+         st.extent_dist_sum[b] += p->second.length;
        }
        put_onode(on);
        if (cursor.move_right() <= 0) break;
index 2f772eb8a71f7aa79d7f204b48138f67c3324ba8..3e1213587ba7eac0eade380aaa22a1e7a6efc237 100644 (file)
@@ -144,28 +144,26 @@ void Ager::age_empty(float pc) {
   g_conf.ebofs_verify = false;
 }
 
-void pfrag(ObjectStore::FragmentationStat &st)
+void pfrag(__uint64_t written, ObjectStore::FragmentationStat &st)
 {
-  cout << st.num_extent << "\tavg\t" << st.avg_extent
-          << "\t" << st.avg_extent_per_object << "\tper obj,\t" 
-          << st.avg_extent_jump << "\t jump,\t"
-          << st.num_free_extent << "\tfree avg\t" << st.avg_free_extent;
-  
-  /*
-       for (map<int,int>::iterator p = st.free_extent_dist.begin();
-       p != st.free_extent_dist.end();
-       p++) 
-       cout << "\t" << p->first << "=\t" << p->second;
-       cout << endl;
-  */
-  
-  int n = st.num_free_extent;
-  for (__uint64_t i=2; i <= 30; i += 2) {
-       cout << "\t" 
-         //<< i
-         //<< "=\t" 
-                << st.free_extent_dist[i];
-       n -= st.free_extent_dist[i];
+  cout << "#gb wr\ttotal\tn x\tavg x\tavg per\tavg j\tfree\tn fr\tavg fr\tnum<2\tsum<2\tnum<4\tsum<4\t..." 
+          << endl;
+  cout << written
+          << "\t" << st.total
+          << "\t" << st.num_extent
+          << "\t" << st.avg_extent
+          << "\t" << st.avg_extent_per_object
+          << "\t" << st.avg_extent_jump 
+          << "\t" << st.total_free
+          << "\t" << st.num_free_extent
+          << "\t" << st.avg_free_extent;
+       
+  int n = st.num_extent;
+  for (__uint64_t i=1; i <= 30; i += 1) {
+       cout << "\t" << st.extent_dist[i];
+       cout << "\t" << st.extent_dist_sum[i];
+       //cout << "\ta " << (st.extent_dist[i] ? (st.extent_dist_sum[i] / st.extent_dist[i]):0);
+       n -= st.extent_dist[i];
        if (n == 0) break;
   }
   cout << endl;
@@ -235,29 +233,28 @@ void Ager::age(int time,
        
        //if (c == 7) start_debug = true;
        
-       dout(1) << "age " << c << "/" << count << " filling to " << high_water << endl;
+       dout(1) << "#age " << c << "/" << count << " filling to " << high_water << endl;
        __uint64_t w = age_fill(high_water, until);
-       dout(1) << "age wrote " << w << endl;
+       //dout(1) << "age wrote " << w << endl;
        wrote += w;
-       store->sync();
+       //store->sync();
        //store->_get_frag_stat(st);
        //pfrag(st);
 
 
        if (c == count) {
-         dout(1) << "age final empty to " << final_water << endl;
+         dout(1) << "#age final empty to " << final_water << endl;
          age_empty(final_water);       
        } else {
-         dout(1) << "age " << c << "/" << count << " emptying to " << low_water << endl;
+         dout(1) << "#age " << c << "/" << count << " emptying to " << low_water << endl;
          age_empty(low_water);
        }
-       store->sync();
-       store->_get_frag_stat(st);
+       //store->sync();
 
-       dout(1) << wrote / (1024ULL*1024ULL) << " GB written\t";// << endl;
-
-
-       pfrag(st);
+       // show frag state
+       store->_get_frag_stat(st);
+       pfrag(wrote / (1024ULL*1024ULL) ,  // GB
+                 st);
 
        // dump freelist?
        if (g_clock.now() > nextfl) {
index 2777783a6c451b3b99a5d8b4b73b791ccfba8eda..3eb32cb62acabe58f5f65710929555fb81b9261b 100644 (file)
@@ -43,16 +43,20 @@ public:
 
   class FragmentationStat {
   public:
+       int total;
        int num_extent;
        int avg_extent;
        map<int,int> extent_dist;          // powers of two
+       map<int,int> extent_dist_sum;          // powers of two
 
        float avg_extent_per_object;
        int avg_extent_jump;  // avg distance bweteen consecutive extents
 
+       int total_free;
        int num_free_extent;
        int avg_free_extent;
        map<int,int> free_extent_dist;     // powers of two
+       map<int,int> free_extent_dist_sum;     // powers of two
   };