From: bert hubert Date: Fri, 26 Aug 2016 11:56:27 +0000 (+0200) Subject: add some more speedtests X-Git-Tag: dnsdist-1.1.0-beta2~166^2~11 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6b0ea82d658f37455e352d6609198a2a6892a4ab;p=thirdparty%2Fpdns.git add some more speedtests --- diff --git a/pdns/speedtest.cc b/pdns/speedtest.cc index b7576397b3..f18a7a89c3 100644 --- a/pdns/speedtest.cc +++ b/pdns/speedtest.cc @@ -4,16 +4,16 @@ #include "misc.hh" #include "dnswriter.hh" #include "dnsrecords.hh" +#include #include #ifndef RECURSOR #include "statbag.hh" #include "base64.hh" StatBag S; #endif - +#include volatile bool g_ret; // make sure the optimizer does not get too smart uint64_t g_totalRuns; - volatile bool g_stop; void alarmHandler(int) @@ -182,6 +182,25 @@ struct StringAppendTest }; +struct BoostStringAppendTest +{ + string getName() const + { + return "booststringappend"; + } + + void operator()() const + { + boost::container::string str; + static char i; + for(int n=0; n < 1000; ++n) + str.append(1, i); + i++; + } +}; + + + struct MakeARecordTest { string getName() const @@ -198,6 +217,96 @@ struct MakeARecordTest } }; +vector makeBigReferral() +{ + + vector packet; + DNSPacketWriter pw(packet, DNSName("www.google.com"), QType::A); + + string gtld="x.gtld-servers.net"; + for(char c='a'; c<= 'm';++c) { + pw.startRecord(DNSName("com"), QType::NS, 3600, 1, DNSResourceRecord::AUTHORITY); + gtld[0]=c; + DNSRecordContent* drc = DNSRecordContent::mastermake(QType::NS, 1, gtld); + drc->toPacket(pw); + delete drc; + } + + for(char c='a'; c<= 'k';++c) { + gtld[0]=c; + pw.startRecord(DNSName(gtld), QType::A, 3600, 1, DNSResourceRecord::ADDITIONAL); + DNSRecordContent* drc = DNSRecordContent::mastermake(QType::A, 1, "1.2.3.4"); + drc->toPacket(pw); + delete drc; + } + + + pw.startRecord(DNSName("a.gtld-servers.net"), QType::AAAA, 3600, 1, DNSResourceRecord::ADDITIONAL); + auto aaaarc = DNSRecordContent::mastermake(QType::AAAA, 1, "2001:503:a83e::2:30"); + aaaarc->toPacket(pw); + delete aaaarc; + + pw.startRecord(DNSName("b.gtld-servers.net"), QType::AAAA, 3600, 1, DNSResourceRecord::ADDITIONAL); + aaaarc = DNSRecordContent::mastermake(QType::AAAA, 1, "2001:503:231d::2:30"); + aaaarc->toPacket(pw); + delete aaaarc; + + + pw.commit(); + return packet; +} + +vector makeBigDNSPacketReferral() +{ + vector records; + DNSResourceRecord rr; + rr.qtype = QType::NS; + rr.ttl=3600; + rr.qname=DNSName("com"); + rr.d_place = DNSResourceRecord::ADDITIONAL; + + string gtld="x.gtld-servers.net"; + for(char c='a'; c<= 'm';++c) { + gtld[0]=c; + rr.content = gtld; + records.push_back(rr); + } + + rr.qtype = QType::A; + for(char c='a'; c<= 'k';++c) { + gtld[0]=c; + rr.qname=DNSName(gtld); + rr.content="1.2.3.4"; + records.push_back(rr); + } + + rr.qname=DNSName("a.gtld-servers.net"); + rr.qtype=QType::AAAA; + rr.content="2001:503:a83e::2:30"; + records.push_back(rr); + + rr.qname=DNSName("b.gtld-servers.net"); + rr.qtype=QType::AAAA; + rr.content="2001:503:231d::2:30"; + records.push_back(rr); + + + vector packet; + DNSPacketWriter pw(packet, DNSName("www.google.com"), QType::A); + shuffle(records); + for(const auto& rec : records) { + pw.startRecord(rec.qname, rec.qtype.getCode(), rec.ttl, 1, rec.d_place); + auto drc = DNSRecordContent::mastermake(rec.qtype.getCode(), 1, rec.content); + drc->toPacket(pw); + delete drc; + } + + pw.commit(); + return packet; +} + + + struct MakeARecordTestMM { string getName() const @@ -424,6 +533,35 @@ struct TypicalRefTest }; +struct BigRefTest +{ + string getName() const + { + return "write big referral"; + } + + void operator()() const + { + vector packet=makeBigReferral(); + } + +}; + +struct BigDNSPacketRefTest +{ + string getName() const + { + return "write big dnspacket referral"; + } + + void operator()() const + { + vector packet=makeBigDNSPacketReferral(); + } + +}; + + struct TCacheComp { bool operator()(const pair& a, const pair& b) const @@ -686,7 +824,8 @@ try doRun(EmptyQueryTest()); doRun(TypicalRefTest()); - + doRun(BigRefTest()); + doRun(BigDNSPacketRefTest()); auto packet = makeEmptyQuery(); doRun(ParsePacketTest(packet, "empty-query")); @@ -746,6 +885,7 @@ try doRun(StringtokTest()); doRun(VStringtokTest()); doRun(StringAppendTest()); + doRun(BoostStringAppendTest()); doRun(DNSNameParseTest()); doRun(DNSNameRootTest());