#!/usr/bin/perl -w # # Dieser Benchmark benutzt den Batchmodus von dig # use strict; use Time::HiRes('gettimeofday','tv_interval'); my $N=100000; my $F="/tmp/dig-$$"; my $CMD="dig \@127.0.0.1 -p 53000 -f /tmp/dig-$$ +noall +stats +cmd >/tmp/dig-$$-out"; my @CHARPOOL=('A'..'Z', 'a'..'z', 0..9); $|=1; print "Datei $F erzeugen ($N Domains)..."; open(TMP,">$F"); foreach(1..$N) { my $rnd=''; for(my $i=0; $i<10; $i++) { $rnd.=(@CHARPOOL)[rand(51)]; } print TMP "www.kacke-${rnd}.de\n"; } close(TMP); print "done\n"; print "Anfragen stellen ($CMD)..."; my $t=[gettimeofday]; system($CMD); my $used=tv_interval($t); print "\n\n$used Sekunden (".($N/$used)."/s)\n"; unlink("/tmp/dig-$$"); DetailedStats("/tmp/dig-$$-out"); exit(0); sub DetailedStats { my $fname=shift; my($min,$max,$timeouts,$cnt)=(0,0,0,0); local($/); open(FH,$fname) || die($!); my $str=; close(FH); #unlink($fname); my @times=(); foreach my $rec(split(/; \<\<\>\> DiG [^\n]+/,$str)) { my @lns=split(/\n/,$rec); if(@lns>0) { $cnt++; foreach(@lns) { if(m/^;; Query time\: (\d+) msec/) { push(@times,$1); } elsif(m/^;; connection timed out; no servers could be reached/) { $timeouts++; } else { #warn "unknown line: $_\n"; } } } } ($min,$max)=($times[0],$times[0]); foreach(@times) { if($_ < $min) { $min=$_; } elsif($_ >= $max) { $max=$_; } } print "Detailstatistiken\n"; print "Anfragen : $cnt\n"; print "Timeouts : $timeouts\n"; print "genommene Zeiten : ".scalar(@times)."\n"; print "langsamste Antwort: $max msec\n"; print "schnellste Antwort: $min msec\n"; return 1; }