From e9a2778624890e8747c84064805a7cd5ca2d57a7 Mon Sep 17 00:00:00 2001 From: bert hubert Date: Sat, 31 Jan 2015 22:26:20 +0100 Subject: [PATCH] multithreading --- pdns/calidns.cc | 94 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 65 insertions(+), 29 deletions(-) diff --git a/pdns/calidns.cc b/pdns/calidns.cc index 5e8399c066..48e3b90a1f 100644 --- a/pdns/calidns.cc +++ b/pdns/calidns.cc @@ -54,12 +54,43 @@ static void setSocketSendBuffer(int fd, uint32_t size) setSocketBuffer(fd, SO_SNDBUF, size); } +void sendThread(const vector* sockets, const vector >* packets, int qps, bool even) +{ + + int burst=20; + struct timespec nsec; + nsec.tv_sec=0; + nsec.tv_nsec=(unsigned long)(burst*1000000000.0/qps); + + + int count=0; + + for(const auto& p : *packets) { + count++; + if((count%2)==even) + continue; + + (*sockets)[count % sockets->size()]->write((const char*)&p[0], p.size()); + if(!(count%burst)) + nanosleep(&nsec, 0); + } +} + // calidns queryfile destination qps + + + int main(int argc, char** argv) try { + struct sched_param param; + param.sched_priority=99; + + if(sched_setscheduler(0, SCHED_FIFO, ¶m) < 0) + unixDie("setting scheduler"); + ifstream ifs(argv[1]); string line; reportAllTypes(); @@ -74,39 +105,44 @@ try cout<<"Generated "< sockets; + ComboAddress dest(argv[2]); + for(int i=0; i < 6; ++i) { + Socket *sock = new Socket(AF_INET, SOCK_DGRAM); + + sock->connect(dest); + setSocketSendBuffer(sock->getHandle(), 2000000); + setSocketReceiveBuffer(sock->getHandle(), 2000000); + sockets.push_back(sock); + new thread(recvThread, sock); + } int qps=atoi(argv[3]); - cout<<"Calibration run, aiming at "<