From bf772efdfea18b1b7254fdc1fb5a6748a0e75774 Mon Sep 17 00:00:00 2001 From: sage Date: Mon, 4 Sep 2006 22:26:06 +0000 Subject: [PATCH] *** empty log message *** git-svn-id: https://ceph.svn.sf.net/svnroot/ceph@843 29311d96-e01e-0410-9327-a35deaab8ce9 --- ceph/ebofs/Ebofs.cc | 13 ++++++--- ceph/osd/Ager.cc | 61 ++++++++++++++++++++---------------------- ceph/osd/ObjectStore.h | 4 +++ 3 files changed, 42 insertions(+), 36 deletions(-) diff --git a/ceph/ebofs/Ebofs.cc b/ceph/ebofs/Ebofs.cc index 5e7780161fbc1..948133ee134ed 100644 --- a/ceph/ebofs/Ebofs.cc +++ b/ceph/ebofs/Ebofs.cc @@ -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; diff --git a/ceph/osd/Ager.cc b/ceph/osd/Ager.cc index 2f772eb8a71f7..3e1213587ba7e 100644 --- a/ceph/osd/Ager.cc +++ b/ceph/osd/Ager.cc @@ -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::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) { diff --git a/ceph/osd/ObjectStore.h b/ceph/osd/ObjectStore.h index 2777783a6c451..3eb32cb62acab 100644 --- a/ceph/osd/ObjectStore.h +++ b/ceph/osd/ObjectStore.h @@ -43,16 +43,20 @@ public: class FragmentationStat { public: + int total; int num_extent; int avg_extent; map extent_dist; // powers of two + map 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 free_extent_dist; // powers of two + map free_extent_dist_sum; // powers of two }; -- 2.39.5