Skip to content

Commit

Permalink
Add speedtest for shuffle, plus a speedup in shuffle itself
Browse files Browse the repository at this point in the history
  • Loading branch information
omoerbeek committed Oct 25, 2024
1 parent 8089aeb commit 5a98b0f
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 2 deletions.
1 change: 1 addition & 0 deletions pdns/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -964,6 +964,7 @@ speedtest_SOURCES = \
qtype.cc \
rcpgenerator.cc rcpgenerator.hh \
sillyrecords.cc \
shuffle.cc shuffle.hh \
speedtest.cc \
statbag.cc \
svc-records.cc svc-records.hh \
Expand Down
5 changes: 3 additions & 2 deletions pdns/shuffle.cc
Original file line number Diff line number Diff line change
Expand Up @@ -157,10 +157,11 @@ unsigned int pdns::dedup(vector<DNSRecord>& rrs)
unsigned int counter = 0;
unsigned int numDups = 0;

seen.reserve(rrs.size());
for (const auto& rec : rrs) {
const auto key = rec.getContent()->wireFormatContent(rec.d_name, true, true);
auto key = rec.getContent()->wireFormatContent(rec.d_name, true, true);
// This ignores class, ttl and place by using constants for those
if (!seen.emplace(key).second) {
if (!seen.emplace(std::move(key)).second) {
dups[counter] = true;
numDups++;
}
Expand Down
51 changes: 51 additions & 0 deletions pdns/speedtest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include "lock.hh"
#include "dns_random.hh"
#include "arguments.hh"
#include "shuffle.hh"

#if defined(HAVE_LIBSODIUM)
#include <sodium.h>
Expand Down Expand Up @@ -1181,6 +1182,47 @@ struct SipHashTest
};
#endif

struct DedupRecordsTest
{
explicit DedupRecordsTest(size_t howmany, bool dedup, bool withdup = false) : d_howmany(howmany), d_dedup(dedup), d_withdup(withdup)
{
}

[[nodiscard]] string getName() const
{
return std::to_string(d_howmany) + " DedupRecords" + std::string(d_dedup ? "" : " (generate only)") +
std::string(d_withdup ? " (with dup)" : "");
}

void operator()() const
{
std::vector<DNSRecord> vec;
vec.reserve(d_howmany);
std::string name("some.name.in.some.domain");
auto count = d_howmany;
if (d_withdup) {
count--;
}
for (size_t i = 0; i < count; i++) {
auto content = DNSRecordContent::make(QType::TXT, QClass::IN, "\"a text " + std::to_string(i) + "\"");
DNSRecord rec(name, content, QType::TXT);
if (i == 0 && d_withdup) {
vec.emplace_back(rec);
}
vec.emplace_back(std::move(rec));
}

if (d_dedup) {
pdns::dedup(vec);
}
}

private:
size_t d_howmany;
bool d_dedup;
bool d_withdup;
};

int main()
{
try {
Expand Down Expand Up @@ -1335,6 +1377,15 @@ int main()
#ifdef HAVE_LIBSODIUM
doRun(SipHashTest("a string of chars"));
#endif
doRun(DedupRecordsTest(2, false));
doRun(DedupRecordsTest(2, true));
doRun(DedupRecordsTest(2, true, true));
doRun(DedupRecordsTest(256, false));
doRun(DedupRecordsTest(256, true));
doRun(DedupRecordsTest(256, true, true));
doRun(DedupRecordsTest(4096, false));
doRun(DedupRecordsTest(4096, true));
doRun(DedupRecordsTest(4096, true, true));

cerr<<"Total runs: " << g_totalRuns<<endl;
}
Expand Down

0 comments on commit 5a98b0f

Please sign in to comment.