Dns tests
Сравнение производительности разных DNS-серверов
Задача теста
Задача теста: cравнить производительность 3-х авторитативных DNS-серверов и выбрать наиболее производительный для дальнейего использования Для тестирования используем утилиту dnsperf (http://www.nominum.com/services/measurement_tools.php)
Подготовка
Запускаем и настраиваем 3 сервиса - tinydns (из пакета djbdns), bind и powerdns
udp 0 0 172.16.30.146:53 0.0.0.0:* 14232/tinydns udp 0 0 172.16.30.147:53 0.0.0.0:* 16044/named udp 0 0 172.16.30.148:53 0.0.0.0:* 21494/pdns_server-i
Для tinydns - вытаскиваем зоны из bind при помощи axfr-get, для named - просто копируем файлы зон, powerdns имеет собственный механизм и вытаскивает зоны сам. Проверить это можно по соответсвующим записям в базе данных
mysql> select count(*) from records; +----------+ | count(*) | +----------+ | 21642 | +----------+ 1 row in set (0.00 sec)
итого - имеем 3 работающих авторитативных сервера, каждый слушает свой адрес, отвечают они за одни и те же зоны.
Из файлов зон bindа создаем файлик с запросами примерно такого вида
... forum.airbites.kh.ua A fleur.airbites.kh.ua A oberon.airbites.kh.ua A mill.airbites.kh.ua A foto.airbites.kh.ua A misery.airbites.kh.ua A ....
т.е. домен и что нас в тесте про него интересует. Всего у меня получилось 13921 записей.
Для чистоты эксперемнта каждый запрос записываем 4 раза.
TinyDNS
anarxist bin # ./dnsperf -d ./real_q3 -s 172.16.30.146 DNS Performance Testing Tool Nominum Version 1.0.1.0 [Status] Processing input data [Status] Sending queries (to 172.16.30.146) [Timeout] Query timed out: msg id 12387 [Timeout] Query timed out: msg id 12640 [Timeout] Query timed out: msg id 12988 [Timeout] Query timed out: msg id 13313 [Timeout] Query timed out: msg id 13340 [Timeout] Query timed out: msg id 13877 [Timeout] Query timed out: msg id 26308 [Timeout] Query timed out: msg id 26561 [Timeout] Query timed out: msg id 26909 [Timeout] Query timed out: msg id 27234 [Timeout] Query timed out: msg id 27261 [Timeout] Query timed out: msg id 27798 [Timeout] Query timed out: msg id 40229 [Timeout] Query timed out: msg id 40482 [Timeout] Query timed out: msg id 40830 [Timeout] Query timed out: msg id 41155 [Timeout] Query timed out: msg id 41182 [Timeout] Query timed out: msg id 41719 [Timeout] Query timed out: msg id 54150 [Timeout] Query timed out: msg id 54403 [Timeout] Query timed out: msg id 54751 [Timeout] Query timed out: msg id 55076 [Timeout] Query timed out: msg id 55103 [Timeout] Query timed out: msg id 55640 [Status] Testing complete Statistics: Parse input file: once Ended due to: reaching end of file Queries sent: 55684 queries Queries completed: 55660 queries Queries lost: 24 queries Avg request size: 55 bytes Avg response size: 156 bytes Percentage completed: 99.96% Percentage lost: 0.04% Started at: Sun Oct 19 20:36:29 2008 Finished at: Sun Oct 19 20:36:40 2008 Ran for: 11.231213 seconds Queries per second: 4955.831574 qps
Повторяем тест еще 2 раза
Queries per second: 4955.831574 qps Queries per second: 4953.973704 qps
Расхождения в разных замерах незначительны.
Bind
./dnsperf -d ./real_q3 -s 172.16.30.147 DNS Performance Testing Tool Nominum Version 1.0.1.0 [Status] Processing input data [Status] Sending queries (to 172.16.30.147) [Status] Testing complete Statistics: Parse input file: once Ended due to: reaching end of file Queries sent: 55684 queries Queries completed: 55684 queries Queries lost: 0 queries Avg request size: 55 bytes Avg response size: 130 bytes Percentage completed: 100.00% Percentage lost: 0.00% Started at: Sun Oct 19 20:39:40 2008 Finished at: Sun Oct 19 20:39:42 2008 Ran for: 2.267926 seconds Queries per second: 24552.829325 qps
Повторяем тест еще 2 раза
Queries per second: 24531.790573 qps Queries per second: 24697.852266 qps
PowerDNS
anarxist bin # ./dnsperf -d ./real_q3 -s 172.16.30.148 DNS Performance Testing Tool Nominum Version 1.0.1.0 [Status] Processing input data [Status] Sending queries (to 172.16.30.148) [Status] Testing complete Statistics: Parse input file: once Ended due to: reaching end of file Queries sent: 55684 queries Queries completed: 55684 queries Queries lost: 0 queries Avg request size: 55 bytes Avg response size: 73 bytes Percentage completed: 100.00% Percentage lost: 0.00% Started at: Sun Oct 19 20:42:24 2008 Finished at: Sun Oct 19 20:42:25 2008 Ran for: 1.668728 seconds Queries per second: 33369.129061 qps
и еще 2 теста
Queries per second: 33367.809328 qps Queries per second: 33868.718269 qps
Наводит на мысли, что такое отставание tinydns связано с тем что что-то не так с файлом запросов, только при запросе к tinydns возникают ошибки
Выводы
Дальнейшее исследование показало, что после "выразания" из файла блока доменов (я так и не нашел какие, просто делил файл на пополам, отбрасывая ту половину что вызывала ошибку) ситуация немного изменилась -
Queries per second: 14896.374058 qps
Однако, когда я попробовал увеличить файл с запросами раз в 10 (простым cat >> new_file) то ошибка стала возникать снова - причем в произвольных запросах, что меня немного смущает.
Думаю, что дело все же не в запрсах, а в работе tinydns. Соотетвенно, я не вижу причин его использовать.