__thread unsigned int t_id;
unsigned int g_maxTCPPerClient;
unsigned int g_networkTimeoutMsec;
+uint64_t g_latencyStatSize;
bool g_logCommonErrors;
bool g_anyToTcp;
uint16_t g_udpTruncationThreshold;
g_stats.answersSlow++;
uint64_t newLat=(uint64_t)(spent*1000000);
- if(newLat < 1000000) // outliers of several minutes exist..
- g_stats.avgLatencyUsec=(uint64_t)((1-0.0001)*g_stats.avgLatencyUsec + 0.0001*newLat);
+ newLat = min(newLat,(uint64_t)(g_networkTimeoutMsec*1000)); // outliers of several minutes exist..
+ g_stats.avgLatencyUsec=(1-1.0/g_latencyStatSize)*g_stats.avgLatencyUsec + (float)newLat/g_latencyStatSize;
delete dc;
dc=0;
memcpy(&dh, response.c_str(), sizeof(dh));
updateRcodeStats(dh.rcode);
}
- g_stats.avgLatencyUsec=(uint64_t)((1-0.0001)*g_stats.avgLatencyUsec + 0); // we assume 0 usec
+ g_stats.avgLatencyUsec=(1-1.0/g_latencyStatSize)*g_stats.avgLatencyUsec + 0.0; // we assume 0 usec
return 0;
}
}
g_initialDomainMap = parseAuthAndForwards();
+ g_latencyStatSize=::arg().asNum("latency-statistic-size");
g_logCommonErrors=::arg().mustDo("log-common-errors");
::arg().set("etc-hosts-file", "Path to 'hosts' file")="/etc/hosts";
::arg().set("serve-rfc1918", "If we should be authoritative for RFC 1918 private IP space")="";
::arg().set("lua-dns-script", "Filename containing an optional 'lua' script that will be used to modify dns answers")="";
+ ::arg().set("latency-statistic-size","Number of latency values to calculate the qa-latency average")="10000";
// ::arg().setSwitch( "disable-edns-ping", "Disable EDNSPing - EXPERIMENTAL, LEAVE DISABLED" )= "no";
::arg().setSwitch( "disable-edns", "Disable EDNS - EXPERIMENTAL, LEAVE DISABLED" )= "";
::arg().setSwitch( "disable-packetcache", "Disable packetcache" )= "no";
return broadcastAccFunction<uint64_t>(pleaseGetCacheSize);
}
+uint64_t doGetAvgLatencyUsec()
+{
+ return (uint64_t) g_stats.avgLatencyUsec;
+}
+
+
uint64_t doGetCacheBytes()
{
return broadcastAccFunction<uint64_t>(pleaseGetCacheBytes);
addGetStat("answers100-1000", &g_stats.answers100_1000);
addGetStat("answers-slow", &g_stats.answersSlow);
- addGetStat("qa-latency", &g_stats.avgLatencyUsec);
+ addGetStat("qa-latency", doGetAvgLatencyUsec);
addGetStat("unexpected-packets", &g_stats.unexpectedCount);
addGetStat("case-mismatches", &g_stats.caseMismatchCount);
addGetStat("spoof-prevents", &g_stats.spoofCount);