]> granicus.if.org Git - pdns/commitdiff
add packetcache statistics, plus qps counter in statistics. remove edns stats since...
authorBert Hubert <bert.hubert@netherlabs.nl>
Thu, 7 Jan 2010 11:57:04 +0000 (11:57 +0000)
committerBert Hubert <bert.hubert@netherlabs.nl>
Thu, 7 Jan 2010 11:57:04 +0000 (11:57 +0000)
git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1493 d19b8d6e-7fed-0310-83ef-9ca221ded41b

pdns/pdns_recursor.cc
pdns/rec_channel_rec.cc
pdns/recpacketcache.cc
pdns/recpacketcache.hh
pdns/syncres.hh

index 6f2345ca557e9543c2dce827043c03e494437476..4ce55a00913b8ce81d59a98e516288e87e0bdccc 100644 (file)
@@ -93,7 +93,7 @@ SyncRes::domainmap_t* g_initialDomainMap; // new threads needs this to be setup
 #include "namespaces.hh"
 
 __thread MemRecursorCache* t_RC;
-static __thread RecursorPacketCache* t_packetCache;
+__thread RecursorPacketCache* t_packetCache;
 RecursorStats g_stats;
 bool g_quiet;
 
@@ -985,7 +985,9 @@ void usr2Handler(int)
 
 void doStats(void)
 {
-
+  static time_t lastOutputTime;
+  static uint64_t lastQueryCount;
+  
   if(g_stats.qcounter && (t_RC->cacheHits + t_RC->cacheMisses) && SyncRes::s_queries && SyncRes::s_outqueries) {  // this only runs once thread 0 has had hits
     uint64_t cacheHits = broadcastAccFunction<uint64_t>(pleaseGetCacheHits);
     uint64_t cacheMisses = broadcastAccFunction<uint64_t>(pleaseGetCacheMisses);
@@ -1004,10 +1006,18 @@ void doStats(void)
     L<<Logger::Warning<<"stats: "<<SyncRes::s_tcpoutqueries<<" outgoing tcp connections, "<<
       broadcastAccFunction<uint64_t>(pleaseGetConcurrentQueries)<<" queries running, "<<SyncRes::s_outgoingtimeouts<<" outgoing timeouts"<<endl;
 
-    L<<Logger::Warning<<"stats: "<<g_stats.ednsPingMatches<<" ping matches, "<<g_stats.ednsPingMismatches<<" mismatches, "<<
-      g_stats.noPingOutQueries<<" outqueries w/o ping, "<< g_stats.noEdnsOutQueries<<" w/o EDNS"<<endl;
-    // L<<Logger::Warning<<"stats: "<<
-     // cacheHits <<" packet cache hits ("<<(int)(100.0*cacheHits/SyncRes::s_queries) << "%)"<<endl;
+    //L<<Logger::Warning<<"stats: "<<g_stats.ednsPingMatches<<" ping matches, "<<g_stats.ednsPingMismatches<<" mismatches, "<<
+      //g_stats.noPingOutQueries<<" outqueries w/o ping, "<< g_stats.noEdnsOutQueries<<" w/o EDNS"<<endl;
+    
+    L<<Logger::Warning<<"stats: " <<  broadcastAccFunction<uint64_t>(pleaseGetPacketCacheSize) <<
+    " packet cache entries, "<<(int)(100.0*broadcastAccFunction<uint64_t>(pleaseGetPacketCacheHits)/SyncRes::s_queries) << "% packet cache hits"<<endl;
+    
+    time_t now = time(0);
+    if(lastOutputTime && lastQueryCount && now != lastOutputTime) {
+      L<<Logger::Warning<<"stats: "<< (SyncRes::s_queries - lastQueryCount) / (now - lastOutputTime) <<" qps (average over "<< (now - lastOutputTime) << " seconds)"<<endl;
+    }
+    lastOutputTime = now;
+    lastQueryCount = SyncRes::s_queries;
   }
   else if(statsWanted) 
     L<<Logger::Warning<<"stats: no stats yet!"<<endl;
index a391f275e6a9fa1e6b08818f3cd1a753680127ae..dc46e229b06cdc05adfedda59131ba1e64351804 100644 (file)
@@ -289,6 +289,39 @@ uint64_t doGetCacheMisses()
 }
 
 
+
+
+uint64_t* pleaseGetPacketCacheSize()
+{
+  return new uint64_t(t_packetCache->size());
+}
+
+uint64_t doGetPacketCacheSize()
+{
+  return broadcastAccFunction<uint64_t>(pleaseGetPacketCacheSize);
+}
+
+uint64_t* pleaseGetPacketCacheHits()
+{
+  return new uint64_t(t_packetCache->d_hits);
+}
+
+uint64_t doGetPacketCacheHits()
+{
+  return broadcastAccFunction<uint64_t>(pleaseGetPacketCacheHits);
+}
+
+uint64_t* pleaseGetPacketCacheMisses()
+{
+  return new uint64_t(t_packetCache->d_misses);
+}
+
+uint64_t doGetPacketCacheMisses()
+{
+  return broadcastAccFunction<uint64_t>(pleaseGetPacketCacheMisses);
+}
+
+
 RecursorControlParser::RecursorControlParser()
 {
   addGetStat("questions", &g_stats.qcounter);
@@ -296,8 +329,14 @@ RecursorControlParser::RecursorControlParser()
 
   addGetStat("cache-hits", doGetCacheHits);
   addGetStat("cache-misses", doGetCacheMisses); 
-
   addGetStat("cache-entries", doGetCacheSize); 
+  
+  addGetStat("packetcache-hits", doGetPacketCacheHits);
+  addGetStat("packetcache-misses", doGetPacketCacheMisses); 
+  addGetStat("packetcache-entries", doGetPacketCacheSize); 
+  
+  
+  
   addGetStat("servfail-answers", &g_stats.servFails);
   addGetStat("nxdomain-answers", &g_stats.nxDomains);
   addGetStat("noerror-answers", &g_stats.noErrors);
index d18e55d93db9ac7a7f0cccd1dc15f8b10d6038cb..0393bda9b8f4597a8b1e2d7b1c1baaafe2b5c15b 100644 (file)
@@ -7,6 +7,7 @@
 
 RecursorPacketCache::RecursorPacketCache()
 {
+  d_hits = d_misses = 0;
 }
 
 bool RecursorPacketCache::getResponsePacket(const std::string& queryPacket, time_t now, std::string* responsePacket)
@@ -19,8 +20,10 @@ bool RecursorPacketCache::getResponsePacket(const std::string& queryPacket, time
     uint16_t id = ((struct dnsheader*)queryPacket.c_str())->id;
     *responsePacket = iter->d_packet;
     ((struct dnsheader*)responsePacket->c_str())->id=id;
+    d_hits++;
     return true;
   }
+  d_misses++;
   return false;
 }
 
@@ -38,4 +41,7 @@ void RecursorPacketCache::insertResponsePacket(const std::string& responsePacket
     d_packetCache.insert(e);
 }
 
-
+uint64_t RecursorPacketCache::size()
+{
+  return d_packetCache.size();
+}
index c0c8d63adf5dd29726f949156c29f54d1817474a..aca00de7e6f86218ea79f59039afe2acc0399c90 100644 (file)
@@ -15,6 +15,9 @@ public:
   void insertResponsePacket(const std::string& responsePacket, time_t now, uint32_t ttd);
   
   void prune();
+  uint64_t d_hits, d_misses;
+  uint64_t size();
+
 private:
 
   struct Entry 
index 54aa1e30035ca8ad17cdf0df3e038f319714ae03..5f297f3b15a7df7067cf5ad32fa90e6e0560772d 100644 (file)
@@ -14,6 +14,7 @@
 #include <boost/utility.hpp>
 #include "sstuff.hh"
 #include "recursor_cache.hh"
+#include "recpacketcache.hh"
 #include <boost/tuple/tuple.hpp>
 #include <boost/optional.hpp>
 #include <boost/tuple/tuple_comparison.hpp>
@@ -22,8 +23,6 @@
 
 void primeHints(void);
 
-
-
 struct NegCacheEntry
 {
   string d_name;
@@ -450,6 +449,7 @@ struct PacketIDBirthdayCompare: public binary_function<PacketID, PacketID, bool>
   }
 };
 extern __thread MemRecursorCache* t_RC;
+extern __thread RecursorPacketCache* t_packetCache;
 typedef MTasker<PacketID,string> MT_t;
 extern __thread MT_t* MT;
 
@@ -527,4 +527,7 @@ uint64_t* pleaseGetCacheHits();
 uint64_t* pleaseGetCacheMisses();
 uint64_t* pleaseGetConcurrentQueries();
 uint64_t* pleaseGetThrottleSize();
+uint64_t* pleaseGetPacketCacheHits();
+uint64_t* pleaseGetPacketCacheSize();
+
 #endif