queryperf
BINDに付属している、DNSのパフォーマンスを測定するツール
指定のDNSサーバに対して大量のDNS問い合わせを投げて、その応答時間や処理数を測定する
(検証環境: CentOS5.4 , bind-9.6-ESV-R4-P1、またはsolaris10、bind-9.4-ESV-R4-P1)
queryperfのインストール
queryperfは、解凍したbindのcontrib/queryperfディレクトリに用意されている
make installはない
セキュリティ上、rootだけがqueryperfを使用できるようにする (個人的な考え)
/usr/local/bin以下に、シンボリックリンクを作成 (個人的な考え)
# cd /usr/local/src/bind-9.6-ESV-R4-P1/contrib/queryperf/ 解凍したbind内の、contrib/queryperfディレクトリへ移動
# ./configure 一般ユーザで実施するとqueryperfの所有者が一般ユーザに
checking for gcc... gcc なるのでrootで実施
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for library containing res_mkquery... -lresolv
checking for library containing __res_mkquery... none required
checking for socket in -lsocket... no
checking for inet_ntoa in -lnsl... yes
checking for gethostbyname2... yes
checking for getaddrinfo... yes
checking for getnameinfo... yes
checking for socklen_t... yes
checking for sa_len... no
configure: creating ./config.status
config.status: creating Makefile
config.status: creating config.h
# make make 実行
gcc -DHAVE_CONFIG_H -c queryperf.c queryperf実行ファイルが生成される
gcc -DHAVE_CONFIG_H queryperf.o -lnsl -lresolv -lm -o queryperf
# ls -l queryperf queryperfのアクセス権をrootのみに変更する
-rwxr-xr-x 1 root root 34131 7月 11 10:16 queryperf (一般ユーザが使用できないようにする)
# chmod 500 queryperf
# ls -l queryperf
-r-x------ 1 root root 34131 7月 11 10:16 queryperf
# cd /usr/local/bin /usr/local/bin配下にシンボリックリンクを作成
(コピーだと実体が複数作られて管理しにくいと判断し、
# ln -s /usr/local/src/bind-9.6-ESV-R4-P1/contrib/queryperf/queryperf queryperf シンボリックリンクとした)
# ls -l /usr/local/bin/queryperf
lrwxrwxrwx 1 root root 80 7月 11 10:24 /usr/local/bin/queryperf -> \
/usr/local/src/bind-9.6-ESV-R4-P1/contrib/queryperf/queryperf
# which queryperf パスが通っていることを確認
/usr/local/bin/queryperf
queryperfの利用方法
注意1:  自分が管理していないDNSサーバに対してqueryperfを行わないこと
注意2:  再帰問い合わせを許可している場合は、問い合わせ対象のサーバが保持しているゾーン情報以外の登録はしないこと
いずれも、大量のDNS問い合わせが外部のDNSに投げられるため
@ 問い合わせ対象を登録したファイルの作成
queryperfコマンド実行時に指定する、問い合わせ対象のレコードを登録したファイルを作成する
[ 書式 ]
問い合わせ対象 レコードの種類
[ 設定例 ]
# cd /tmp /tmp内に作成することにした
# vi queryperf-test-target.txt とりあえず4つ
example.co.jp soa すべてローカルサーバが権威となっているもの
example.co.jp ns
www.example.co.jp a
mx1.example.co.jp a
A queryperfの実施
queryperfの結果に対するベンチマークは特にないので、何かある度に測定しておくことが望ましい
今回の検証で使用した筐体は、CPUがPentium III 1000MHz、メモリ512MBのノートPC
測定時間が短すぎると信頼性も低いので、1分以上が望ましい できればCPU負荷のある時間帯に行うことが望ましい(個人的な検証結果より)
問い合わせるレコードが多いほど、信頼性は高い
[ 書式 ]
queryperf オプション [ オプション ]
[ オプション ]  その他のオプションの確認は、queryperf -h
-d 問い合わせ対象を登録したファイル
-s 対象のDNSサーバ 省略時は、127.0.0.1
-l 測定時間 省略時は、1回
-v 問い合わせ結果を出力  省略時は出力しない
-e EDNS0を有効にする 省略時は無効
-D DNSSECによる問い合わせを実施  省略時は実施しない
[ 設定例 ]
# queryperf -d /tmp/queryperf-test-target.txt -s 127.0.0.1 -l 5 ローカルのDNSサーバを対象に5秒間実施
DNS Query Performance Testing Tool
Version: $Id: queryperf.c,v 1.12 2007-09-05 07:36:04 marka Exp $
[Status] Processing input data
[Status] Sending queries (beginning with 127.0.0.1)
[Status] Testing complete
Statistics:
Parse input file: multiple times
Run time limit: 5 seconds 送信時間
Ran through file: 4065 times
Queries sent: 16261 queries クエリーの送信回数
Queries completed: 16261 queries 応答のあったクエリー数
Queries lost: 0 queries 応答が無かったクエリー数
Queries delayed(?): 0 queries 応答に遅延のあったクエリー数
RTT max: 2.144678 sec 応答時間
RTT min: 0.001618 sec
RTT average: 0.008604 sec
RTT std deviation: 0.073983 sec
RTT out of range: 0 queries
Percentage completed: 100.00% クエリーに対する応答率 100%でない場合は何らかの問題あり
Percentage lost: 0.00%
Started at: Mon Jul 11 10:30:36 2011
Finished at: Mon Jul 11 10:30:43 2011
Ran for: 7.140166 seconds 測定にかかった時間
Queries per second: 2277.398032 qps 1秒あたりのクエリー数
= クエリーの送信回数 / Ran Forの時間(秒)
# queryperf -d /tmp/queryperf-test-target.txt -s 127.0.0.1 -l 10 測定時間を10秒に変えた場合
(省略)
Queries per second: 3165.600567 qps
# queryperf -d /tmp/queryperf-test-target.txt -s 127.0.0.1 -l 60 測定時間を60秒に変えた場合
(省略)
Queries per second: 3724.763111 qps
# queryperf -d /tmp/queryperf-test-target.txt -s 127.0.0.1 -l 600 測定時間を600秒に変えた場合
(省略)
Queries per second: 3317.599231 qps
# queryperf -d /tmp/test.txt -s 192.168.24.60 -l 60 ローカルネット上にあるSunFireV120サーバ(solaris10)
(省略) からこのPCに対してqueryperfを実施した場合
Queries per second: 3730.917999 qps
# queryperf -d /tmp/queryperf-test-target.txt -s 127.0.0.1 -l 10 -v -vオプションをつけた場合
DNS Query Performance Testing Tool
Version: $Id: queryperf.c,v 1.12 2007-09-05 07:36:04 marka Exp $
[Status] Processing input data
[Status] Sending queries (beginning with 127.0.0.1)
> NOERROR example.co.jp soa -vオプションをつけると、問い合わせ結果が大量に出力されるので注意
> NOERROR example.co.jp ns
> NOERROR www.example.co.jp a
> NOERROR mx1.example.co.jp a
> NOERROR example.co.jp soa
> NOERROR example.co.jp ns
> NOERROR www.example.co.jp a
(省略)