INTRODUCCION:

Recientemente tuve la necesidad de realizar un estudio sobre el funcionamiento de dos servidores DNS los cuales soy responsable por su administración. Mis dudas eran relacionadas al performance de los servidores. En el mundo de los DNS el performance se mide de dos maneras:

  • Throughput (numero de queries por segundo que el DNS Server es capaz de manejar)
  • Latencia (tiempo de resolución de los queries)

En base a lo anterior uno mismo puede contruir unos scripts y apoyandonos en el comando DIG obtener gran información. Sin embargo durante mi investigación y a través de una lista conseguí dos herramientas que pueden realizar un excelente estudio: dnsperf y resperf (http://www.nominum.com/services/measurement_tools.php)

OBJETIVO

Realizar y evaluar el performance de un DNS Server

SOFTWARE NECESARIO:

En mi caso hice todas las pruebas sobre un DNS Server en mandriva las herramientas sobre mandriva. Software adicional: dnsperf y resperf. Se puede conseguir: http://www.nominum.com/services/measurement_tools.php GNUplot

INSTALACION

wget ftp://ftp.nominum.com/pub/nominum/dnsperf/1.0.1.0/dnsperf-1.0.1.0-1-rhel-5-i386.tar.gz 
tar -zxvf dnsperf-1.0.1.0-1-rhel-5-i386.tar.gz 
cd dnsperf-1.0.1.0-1 
rpm -ivh dnsperf-1.0.1.0-1.i386.rpm 
urpmi gnuplot (MUY RECOMENDADO para generar unas gráficas más adelantes) 

Los archivos binarios quedaran instalados en:

/usr/local/nom/bin 

DOCUMENTACION:

Luego de la instalación del paquete existe una excelente documentación en formato pdf ubicada en:

/usr/local/nom/doc/dnsperf 

FUNCIONAMIENTO:

En fin, basicamente lo que ambos programas hacen es tomar una enorme lista (un archivo de texto) donde existen miles de dominios separados por el tipo de query (A, AAAA, PTR, TXT, etc), lo envia a un servidor DNS (indicado por linea de comando) y luego empieza a recabar información para finalmente ofrecer un resumen de los resultados. El archivo de texto puede ser editado, cambiado, modificado, etc por uno mismo sin inconveniente (archivo original: queryfile-example-100thousand).

EJEMPLOS:

Vamos a nombrar dos diferentes comandos con los cuales podemos hacer una evaluación. Recomiendo ampliamente leer la documentación oficial antes de proseguir. Estas herramientas consumen alto procesamiento de CPU, consumo de memoria y ancho de banda. Es muy sencillo saturar un servidor y dejarlo fuera de linea con estas herramientas. Adicionalmente hay que tener mucho cuidado con diversos firewalls que pueden encontrarse en el medio entre el DNS Server y el cliente que ejecuta la aplicación. Aquí van los ejemplos:

Comando 1: resperf

Ejemplo 1-1:

Query de 100000 consultas al DNS Server de localhost con un máximo de 100 consultas por segundo:

./resperf -s 127.0.0.1 -d queryfile-example-100thousand.orig -m 100 

Ejemplo de la salida:

DNS Resolution Performance Testing Tool

Nominum Version 1.0.1.0 

[Status] Sending 
[Status] Waiting for more responses 
^C 
[root@localhost bin]# ./resperf -s 127.0.0.1 -d queryfile-example-100thousand -m 100 

DNS Resolution Performance Testing Tool

Nominum Version 1.0.1.0 

[Status] Sending 
[Status] Waiting for more responses 
[Status] Testing complete 

Statistics: 

Queries sent: 2999 
Queries completed: 2985 
Queries lost: 14 
Ran for: 100.000002 seconds 
Maximum throughput: 98.000000 qps 
Lost at that point: 2.00% 
Ejemplo 1-2:

Query de 100000 consultas al DNS Server de localhost con un máximo de 10 consultas por segundo pero con un reporte en una página Web:

./resperf-report -s 127.0.0.1 -d queryfile-example-100thousand.orig -m 10 

Ejemplo de la página Web:

Ejemplo 1-3:

Query de 100000 consultas al DNS Server de localhost con un máximo de 100000 consultas por segundo pero con un reporte en una página Web:

./resperf-report -s 127.0.0.1 -d queryfile-example-100thousand.orig 

Comando 2: dnsperf

Ejemplo 2-1:

Ejecutar 3 queries maximos al servidor localhost con un histograma de 20 por 10 segundos:

./dnsperf -d ../examples/dnsperf/queryfile-example-100thousand -q 3 -H 20 -l 10 -s 127.0.0.1 

Salida del comando anterior:

[root@localhost bin]# ./dnsperf -d queryfile-example-100thousand -q 10 -H20 -l 10 

DNS Performance Testing Tool

Nominum Version 1.0.1.0 

[Status] Processing input data 
[Status] Sending queries (to 127.0.0.1) 
[Status] Testing complete 

Statistics: 

Parse input file: multiple times 
Run time limit: 10 seconds 
Ran through file: 144 times 

Queries sent: 870 queries 
Queries completed: 870 queries 
Queries lost: 0 queries 

Avg request size: 37 bytes 
Avg response size: 161 bytes 

Percentage completed: 100.00% 
Percentage lost: 0.00% 

Started at: Mon Feb 22 18:17:43 2010 
Finished at: Mon Feb 22 18:17:53 2010 
Ran for: 10.105866 seconds 

Queries per second: 86.088614 qps 

Latency: Min: 0.000284 s; Max: 1.121552 s; Avg: 0.111007 s; StdDev: 0.169328 

Response latency distribution (total 870 responses): 

Latency Success Fail | 
<>= 1.000s 8 0 |# 

Legend: 

##### = success responses (RCODE was NOERROR or NXDOMAIN) 
----- = failure responses (any other RCODE) 
Ejemplo 2-2:

Ejecutar 20 queries maximos al servidor localhost con un histograma de 4 por 20 segundos con una cantidad máxima de 25 queries por segundo:

./dnsperf -d queryfile-example-100thousand -q 20 -H4 -l 20 -Q 25 

Suerte, espero sea de tu utilidad