]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
*** empty log message ***
authorsage <sage@29311d96-e01e-0410-9327-a35deaab8ce9>
Wed, 15 Jun 2005 00:11:01 +0000 (00:11 +0000)
committersage <sage@29311d96-e01e-0410-9327-a35deaab8ce9>
Wed, 15 Jun 2005 00:11:01 +0000 (00:11 +0000)
git-svn-id: https://ceph.svn.sf.net/svnroot/ceph@319 29311d96-e01e-0410-9327-a35deaab8ce9

ceph/include/lru.h
ceph/mds/MDBalancer.cc
ceph/mds/MDCache.cc
ceph/mds/MDS.cc

index 3a387369d8ca47e195702b26c06e3c3ee732db36..343f36e7511099de69b10f750de12a9482e42638 100644 (file)
@@ -13,7 +13,7 @@ using namespace std;
 class LRUObject {
  private:
   LRUObject *lru_next, *lru_prev;
-  bool lru_expireable;
+  bool lru_pinned;
   class LRU *lru;
   class LRUList *lru_list;
 
@@ -21,14 +21,14 @@ class LRUObject {
   LRUObject() {
        lru_next = lru_prev = NULL;
        lru_list = 0;
-       lru_expireable = true;
+       lru_pinned = false;
        lru = 0;
   }
 
   // pin/unpin item in cache
   void lru_pin(); 
   void lru_unpin();
-  bool lru_is_expireable() { return lru_expireable; }
+  bool lru_is_expireable() { return !lru_pinned; }
 
   friend class LRU;
   friend class LRUList;
@@ -121,15 +121,13 @@ class LRU {
        lru_max = max;
   }
 
-  __uint32_t lru_get_size() {
-       return lru_num;
-  }
-  __uint32_t lru_get_max() {
-       return lru_max;
-  }
-  __uint32_t lru_get_num_pinned() {
-       return lru_num_pinned;
-  }
+  __uint32_t lru_get_size() { return lru_num; }
+  __uint32_t lru_get_top() { return lru_top.get_length(); }
+  __uint32_t lru_get_bot() { return lru_bot.get_length(); }
+  __uint32_t lru_get_pintail() { return lru_pintail.get_length(); }
+  __uint32_t lru_get_max() { return lru_max; }
+  __uint32_t lru_get_num_pinned() { return lru_num_pinned; }
+
   void lru_set_max(__uint32_t m) { lru_max = m; }
   void lru_set_midpoint(float f) { lru_midpoint = f; }
   
@@ -142,7 +140,7 @@ class LRU {
        o->lru = this;
        lru_top.insert_head( o );
        lru_num++;
-       lru_num_pinned += !o->lru_expireable;
+       if (o->lru_pinned) lru_num_pinned++;
        lru_adjust();
   }
 
@@ -154,7 +152,7 @@ class LRU {
        o->lru = this;
        lru_bot.insert_head(o);
        lru_num++;
-       lru_num_pinned += !o->lru_expireable;
+       if (o->lru_pinned) lru_num_pinned++;
   }
 
   // insert at bottom of lru
@@ -163,20 +161,22 @@ class LRU {
        o->lru = this;
        lru_bot.insert_tail(o);
        lru_num++;
-       lru_num_pinned += !o->lru_expireable;
+       if (o->lru_pinned) lru_num_pinned++;
   }
 
+  /*
   // insert at bottom of lru
   void lru_insert_pintail(LRUObject *o) {
        assert(!o->lru);
        o->lru = this;
        
-       assert(!o->lru_is_expireable());
+       assert(o->lru_pinned);
 
        lru_pintail.insert_head(o);
        lru_num++;
-       lru_num_pinned += !o->lru_expireable;
+       lru_num_pinned += o->lru_pinned;
   }
+  */
 
   
 
@@ -186,7 +186,7 @@ class LRU {
        if (!lru_max) return;
 
        __uint32_t topwant = (__uint32_t)(lru_midpoint * (double)lru_max);
-       while (0 && lru_top.get_length() > 0 && 
+       while (lru_top.get_length() > 0 && 
                   lru_top.get_length() > topwant) {
          // remove from tail of top, stick at head of bot
          // FIXME: this could be way more efficient by moving a whole chain of items.
@@ -216,7 +216,7 @@ class LRU {
          assert(0);
 
        lru_num--;
-       lru_num_pinned -= !o->lru_expireable;
+       if (o->lru_pinned) lru_num_pinned--;
        o->lru = 0;
        return o;
   }
@@ -253,20 +253,22 @@ class LRU {
        while (lru_bot.get_length()) {
          p = lru_bot.get_tail();
 
-         if (p->lru_expireable
+         if (!p->lru_pinned
                return lru_remove(p);   // yay.
 
          // move to pintail
+         lru_bot.remove(p);
          lru_pintail.insert_head(p);
        }
 
        // ok, try head then
        while (lru_top.get_length()) {
          p = lru_top.get_tail();
-         if (p->lru_expireable
+         if (!p->lru_pinned
                return lru_remove( p );
 
          // move to pintail
+         lru_top.remove(p);
          lru_pintail.insert_head(p);
        }
        
@@ -284,15 +286,15 @@ class LRU {
 
 inline void LRUObject::lru_pin() 
 {
-  lru_expireable = false;
+  lru_pinned = true;
   if (lru) lru->lru_num_pinned++;
 }
 inline void LRUObject::lru_unpin() {
-  lru_expireable = true;
+  lru_pinned = false;
   if (lru) {
        lru->lru_num_pinned--;
 
-       // move out of tail?
+       // move from pintail -> bot
        if (lru_list == &lru->lru_pintail) {
          lru->lru_pintail.remove(this);
          lru->lru_bot.insert_tail(this);
index 97fceda99d0e2b13b1ea4239d4c82043e5b394b2..dbeb42639eb57ad29fc6643a712aadd4c6945904 100644 (file)
@@ -529,7 +529,8 @@ void MDBalancer::show_imports(bool external)
 {
   int db = 7; //debug level
 
-  if (mds->mdcache->imports.size() == 0) {
+  int num = mds->mdcache->imports.size();
+  if (num == 0) {
        dout(db) << "no imports/exports" << endl;
        return;
   }
index 3b4ef8339f2229baa3442d11b9eb5271510acf94..1a226c0b7e0b3258aed138a618270e313514853a 100644 (file)
@@ -505,6 +505,8 @@ bool MDCache::trim(__int32_t max) {
                export_empty_import(diri->dir);
          
        } 
+
+       mds->logger->inc("cex");
   }
 
   /* hack
@@ -1491,7 +1493,9 @@ void MDCache::request_cleanup(Message *req)
   // log some stats *****
   mds->logger->set("c", lru.lru_get_size());
   mds->logger->set("cpin", lru.lru_get_num_pinned());
-  mds->logger->set("cmax", lru.lru_get_max());
+  mds->logger->set("ctop", lru.lru_get_top());
+  mds->logger->set("cbot", lru.lru_get_bot());
+  mds->logger->set("cptail", lru.lru_get_pintail());
 
   if (g_conf.log_pins) {
        // pin
index 5a06c6559e327ab8a9b038059bc12db17341a293..8192a2314e85e8ae0363963bb4d42b6315ee8bb3 100644 (file)
@@ -130,9 +130,13 @@ MDS::MDS(MDCluster *mdc, int whoami, Messenger *m) {
   mds_logtype.add_inc("fw");
   mds_logtype.add_inc("cfw");
 
+  mds_logtype.add_set("cmax");
   mds_logtype.add_set("c");
+  mds_logtype.add_set("ctop");
+  mds_logtype.add_set("cbot");
+  mds_logtype.add_set("cptail");  
   mds_logtype.add_set("cpin");
-  mds_logtype.add_set("cmax");
+  mds_logtype.add_inc("cex");
   mds_logtype.add_inc("dis");
   mds_logtype.add_inc("cmiss");
 
@@ -144,6 +148,9 @@ MDS::MDS(MDCluster *mdc, int whoami, Messenger *m) {
   mds_logtype.add_set("nex");
   mds_logtype.add_set("nim");
 
+  mds->logger->set("cmax", lru.lru_get_max());
+
+  
   char n[80];
   sprintf(n, "mds%d.cache", whoami);
   logger2 = new Logger(n, (LogType*)&mds_cache_logtype);
@@ -168,6 +175,7 @@ MDS::~MDS() {
   if (messenger) { delete messenger; messenger = NULL; }
 
   if (logger) { delete logger; logger = 0; }
+  if (logger2) { delete logger2; logger2 = 0; }
 
 }