Queryperf est un outil pour tester les performances d'un serveur DNS.

Il est fourni dans les sources de Bind.. Il n'y a qu'à compiler.

/xxx/bind-9.5.0-P2/contrib/queryperf/


Il y a plusieurs options, une des principales est de lui fournir en entrée un fichier avec des noms de domaines à résoudre...

$ queryperf -v -d /tmp/fichier

Ce fichier est sous la forme:

$ cat /tmp/fichier
nom1.fr A
nom2.com MX


Par défaut il utilise 127.0.0.1 comme serveur à interroger mais ceci, comme le reste se change par les options.


Pour créer un fichier source avec quelques entrées, j'ai utilisé comme base une de mes règles de rejet dans les logs de Postfix.. à coups de :

| grep "from=<" | awk -F@ '{print $3}' | awk -F\> '{print $1}'

Puis on ajoute A ou MX à la fin de la ligne à coups de:

| awk '{print $0"\tA"}'
| awk '{print $0"\tMX"}'

On obtient au final:

$ wc -l /tmp/file
880000 /tmp/file
$ ll /tmp/files | awk '{print $5'}
13M
$ head /tmp/file
fhs.com A
bluejean.com.tr A
geeo.org A
bluessiden.com MX
americanhomestaffing.com A
$

Ce sont des domaines trouvés dans les MAIL FROM:<> d'un des règles de rejet. On doit donc avoir un peu de tout, des domaines qui existent, d'autres non, des DNS non joignables.. Bref quelquechose qui doit être a peu près représentatif d'un trafic réel. (On n'a pas de "vrais" noms de machine, c'est vrai).


On obtient donc pour du récursif sur un Bind:

Statistics:

Parse input file: once
Ended due to: reaching end of file

Queries sent: 880000 queries
Queries completed: 872400 queries
Queries lost: 7600 queries
Queries delayed(?): 0 queries

RTT max: 5.006302 sec
RTT min: 0.000009 sec
RTT average: 0.064140 sec
RTT std deviation: 0.156662 sec
RTT out of range: 3 queries

Percentage completed: 99.14%
Percentage lost: 0.86%

Started at: Tue xxx x 11:59:54 2008
Finished at: Tue xxx x 13:18:25 2008
Ran for: 4710.344667 seconds

Queries per second: 185.209377 qps


Un dump du cache pour vérifier:

$ rndc dumpdb
$ ll /var/chroot-named/etc/namedb/named_dump.db | awk '{print $5}'
6.9M
$

On peut ensuite gréper dans un domaine de la liste pour trouver les entrées correspondantes dans le cache.


Le test en cours:

Ce n'est probablement pas ce qui se fait de mieux pour des stats, mais ca peut aider lors de manipulations diverses sur des serveurs DNS.