DNSPerf y ResPerf son dos herramientas de Nominum que permiten realizar pruebas de carga a servidores DNS e interpretar sus datos con informes y gráficas. Vamos a ver su instalación y ejemplos de uso.
Instalación
# wget ftp://ftp.nominum.com/pub/nominum/dnsperf/2.0.0.0/dnsperf-2.0.0.0-1-rhel-6-x86_64.tar.gz
# tar -xzvf dnsperf-2.0.0.0-1-rhel-6-x86_64.tar.gz
Instalamos el RPM a través de yum para que resuelva automáticamente todas las dependencias necesarias (en caso de que las haya, no tiene porqué). También está disponible para otras distribuciones y arquitecturas:
# yum install dnsperf-2.0.0.0-1.el6.x86_64.rpm
Hay que tener en cuenta que dnsperf se instala en un path fuera de nuestro $PATH:
# ls -l /usr/local/nom/bin/ total 1348 -rwxr-xr-x. 1 root root 692911 Mar 2 2012 dnsperf -rwxr-xr-x. 1 root root 676597 Mar 2 2012 resperf -rwxr-xr-x. 1 root root 1943 Mar 2 2012 resperf-report
Si queremos ejecutarlo sin especificar la ruta, añadimos «/usr/local/nom/bin/» a nuestro $PATH.
PATH="$PATH:/usr/local/nom/bin/"
Después, nos podemos bajar los ficheros de ejemplo que usaremos para los tests. Se trata de ficheros con consultas aleatorias que se ejecutarán contra el DNS, hay de 3 y 10 millones de consultas por fichero:
ftp://ftp.nominum.com/pub/nominum/dnsperf/data/
ftp> ls 150 Opening ASCII mode data connection for file list -rw-r--r-- 1 ftp ftp 75956910 Mar 7 2012 queryfile-example-10million-201202.gz -rw-r--r-- 1 ftp ftp 370 Mar 7 2012 queryfile-example-3million.gz lrwxrwxrwx 1 ftp ftp 37 Mar 7 2012 queryfile-example-current.gz -> queryfile-example-10million-201202.gz -rw-r--r-- 1 ftp ftp 556 Mar 7 2012 README
Podemos generar nosotros mismos estos ficheros, siempre y cuando tengan la misma estructura, ejemplo:
thumbs2.ebaystatic.com. AAAA mountaineerpublishing.com. MX www.mediafire.com. A s-static.ak.fbcdn.net. A lachicabionica.com. A www.freemarket.com. A
DNSPerf
Ya sólo nos queda comenzar a hacer pruebas de stress contra el servidor DNS que queramos. La ayuda nos dará información sobre los parámetros y posibilidades de la herramienta:
# /usr/local/nom/bin/dnsperf -h DNS Performance Testing Tool Nominum Version 2.0.0.0 Usage: dnsperf [-f family] [-s server_addr] [-p port] [-a local_addr] [-x local_port] [-d datafile] [-c clients] [-n maxruns] [-l timelimit] [-b buffer_size] [-t timeout] [-e] [-D] [-y [alg:]name:secret] [-q num_queries] [-Q max_qps] [-S stats_interval] [-u] [-v] [-h] -f address family of DNS transport, inet or inet6 (default: any) -s the server to query (default: 127.0.0.1) -p the port on which to query the server (default: 53) -a the local address from which to send queries -x the local port from which to send queries (default: 0) -d the input data file (default: stdin) -c the number of clients to act as -n run through input at most N times -l run for at most this many seconds -b socket send/receive buffer size in kilobytes -t the timeout for query completion in seconds (default: 5) -e enable EDNS 0 -D set the DNSSEC OK bit (implies EDNS) -y the TSIG algorithm, name and secret -q the maximum number of queries outstanding (default: 100) -Q limit the number of queries per second -S print qps statistics every N seconds -u send dynamic updates instead of queries -v verbose: report each query to stdout -h print this help
DNSPerf simula tráfico DNS y reporta información relativa al número de consultas completadas, fallidas, latencia, códigos de respuesta, etc. Por ejemplo, podemos ejecutarlo contra el servidor 10.0.0.100, usando el fichero de queries descargado:
# /usr/local/nom/bin/dnsperf -s 10.0.0.100 -p 53 -d queryfile-example-current DNS Performance Testing Tool Nominum Version 2.0.0.0 [Status] Command line: dnsperf -s 10.0.0.100 -p 53 -d queryfile-example-current [Status] Sending queries (to 10.0.0.100) [Status] Started at: Sat Dec 29 09:54:39 2012 [Status] Stopping after 1 run through file ... ... ... [Status] Testing complete (interruption) Statistics: Queries sent: 230 Queries completed: 131 (56.96%) Queries lost: 0 (0.00%) Queries interrupted: 99 (43.04%) Response codes: NOERROR 120 (91.60%), NXDOMAIN 11 (8.40%) Average packet size: request 37, response 232 Run time (s): 0.383002 Queries per second: 342.034767 Average Latency (s): 0.123774 (min 0.002237, max 0.252755) Latency StdDev (s): 0.069324
ResPerf
Por otro lado tenemos ResPerf, que lo que hace es simular un servidor de cacheo (Caching name-server) , aumentando progresivamente el ratio de consultas por segundo y monitorizando su respuesta. Como véis, podemos especificar el número máximo de queries por segundo (-m):
# /usr/local/nom/bin/resperf -s 10.0.0.100 -d queryfile-example-current -m 50 DNS Resolution Performance Testing Tool Nominum Version 2.0.0.0 [Status] Command line: resperf -s 10.0.0.100 -d queryfile-example-current -m 50 [Status] Sending [Status] Waiting for more responses [Status] Testing complete Statistics: Queries sent: 1500 Queries completed: 1500 Queries lost: 0 Run time (s): 100.000004 Maximum throughput: 50.000000 qps Lost at that point: 0.00%
Con Resperf, el resultado se guarda en un fichero resperf.gnuplot que podemos utilizar para graficar los resultados de la prueba:
# yum install gnuplot
Pero todavía hay otra utilidad, que nos generará automáticamente el informe en formato HTML y con los gráficos insertados, básicamente ejecutamos lo mismo que antes pero con el comando resperf-report:
# /usr/local/nom/bin/resperf-report -s 10.0.0.100 -d queryfile-example-current -m 50 ... ... Done, report is in 20121229-1007.html
Y ya tendremos el reporte 20121229-1007.html disponible para su visualización:
A partir de aquí se trata de jugar con los valores y parámetros del comando y simultaneamente del servidor DNS para mejorar su rendimiento.