NSD4 beta4 vs BIND9.8.1 ~NSDの逆襲~

前回の POST で BIND からの NSD4 の移行について書いたのだが、
その際にテスト程度に走らせたベンチマークについて物議を呼んだので
(NSDがBINDなんかに負けるはずが無い!とか config煮詰めろとか)
NSD4 側の config をいじりながら再度ベンチマークを取ってみた。

そうしたところ、とても興味深い結果が得られたので記しておく。

 

0. 検証環境

CPU : Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz stepping 07 × 2

Memory : DDR3 1333 NonReg ECC 16GB

HDD : 146GB 15000rpm SAS RAID 1

OS : Ubuntu 12.04.2

DNS : NSD4 beta4 / BIND9.8.1 -P1(Ubuntu Packege)

 

1. ベンチマーク方法

ベンチの方法は前回と同様に 32110行のクエリを dnsperf に食わせて行う。
クエリを飛ばす側のマシンも上記とほぼ同様のスペックで用意した。

コマンドは下記のとおり。

 # dnsperf -c 16 -s 10.200.4.230 -d querylist -l 300

※10.200.4.230 は被験体

  • nsd.conf の server-count を変更しながらベンチマーク
  • 16クライアント(並列)で300秒クエリを飛ばす

server-count はリクエストを受け付ける nsd の子プロセスの数なので、
多ければ多いほどクエリを捌けるはず(素人考え)

config は下記のとおり Rate limit は Off にしておく。

server:
server-count: 4
username: nsd
zonesdir: “/etc/nsd4/zones”
zonelistfile: “/var/cache/nsd4/zone.list”
database: “/var/cache/nsd4/zone.db”
logfile: “/var/log/nsd4.log”
pidfile: “/var/run/nsd4/nsd4.pid”
xfrdfile: “/var/cache/nsd4/xfrd.state”
rrl-ratelimit: 0
remote-control:
control-enable: yes
control-interface: 127.0.0.1
control-port: 8952
server-key-file: “/etc/nsd4/nsd_server.key”
server-cert-file: “/etc/nsd4/nsd_server.pem”
control-key-file: “/etc/nsd4/nsd_control.key”
control-cert-file: “/etc/nsd4/nsd_control.pem”

 

2. ベンチマーク結果

 

表1 BIND と NSD4 の qps 比較

 Server (server-count) qps
BIND9.8.1 -P1 362923.554683
NSD4 b4 (1) 237789.686302
NSD4 b4 (2) 287640.556382
NSD4 b4 (4) 409956.827579
NSD4 b4 (6) 178863.252545
NSD4 b4 (8) 129717.122177
NSD4 b4 (16) 70822.115927

 

nsd4_svcount
図1 NSD4 beta4 server-count と qps

nsd_bind_comp

図2 ベンチマーク中のロードアベレージの推移 (NSD4 beta4/BIND9.8.1-P1)

3. 考察

今回の実験では NSD4の server-count を 4 にした場合は最もパフォーマンスがよく、
サーバへの負荷(ロードアベレージ)も低目の値を推移している。
これはゾーンをバイナリ化してメモリに保持している効果と思われる。

また、当初想定していた結果とは異なり、server-count の値と qps は比例しないという結果が出たのが興味深い。
ハードウェア(CPU) 依存の可能性もあるので、AMD製のCPUなどでも試してみようかと思う。

BIND に関しては qps  で言うと NSD4 に匹敵する値をたたき出しているが、ロードアベレージが高めを推移している。
コスト的にはあまりお得な感じはしないと言えるだろう。

ざっとベンチマークを取り直してみて NSD4 が速いことを証明できたので、
今回の目的は達成できたかな。

 

4. 参考文献

Unbound/NSD最新情報(OSC 2013 Tokyo/Spring) http://www.slideshare.net/ttkzw/unboundnsdosc-2013-tokyospring-16708977

NLnetLabs : DNS Response Rate Limiting as implemented in NSD. http://www.nlnetlabs.nl/blog/tag/nsd4/

BIND9 からの卒業 – PowerDNS 3.0 編

BIND9  の脆弱性の対応に疲れた今日この頃、
なぜ BINDを使っているのか自問自答して欝になりかけた日もある(嘘)

そんなこんなで、 BIND9 との決別を決めた。

次の相棒は今 最もホットでナウい PowerDNSNSD4 (beta)
この Post では PowerDNS にフォーカスする。

0. 検証環境

CPU : Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz stepping 07

Memory : DDR3 1333 NonReg ECC 16GB

HDD : 146GB 15000rpm SAS RAID 1

OS : Ubuntu 12.04.2

DNS : PowerDNS 3.0

DB : MySQL 5.5.29

 

1. 構築手順(メモ程度) 

  • MySQL と PowerDNS のパッケージインストール

# apt-get install pdns-server pdns-backend-mysql mysql-server mysql-client

  • MySQL にログインしてデータベースとテーブルを作る

# mysql -u root -p

mysql> create database pdns;

Query OK, 1 row affected (0.00 sec)
Create MySQL User

mysql> GRANT ALL ON pdnstest.* TO ‘pdns’@’localhost’ IDENTIFIED BY ‘hogehogepasswd’;

mysql> FLUSH PRIVILEGES;
Change Database

mysql> use pdns;
Database changed
Create Tables

mysql> create table domains (
id INT auto_increment,
name VARCHAR(255) NOT NULL,
master VARCHAR(128) DEFAULT NULL,
last_check INT DEFAULT NULL,
type VARCHAR(6) NOT NULL,
notified_serial INT DEFAULT NULL,
account VARCHAR(40) DEFAULT NULL,
primary key (id)
) Engine=InnoDB;

CREATE UNIQUE INDEX name_index ON domains(name);

CREATE TABLE records (
id INT auto_increment,
domain_id INT DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
type VARCHAR(10) DEFAULT NULL,
content VARCHAR(64000) DEFAULT NULL,
ttl INT DEFAULT NULL,
prio INT DEFAULT NULL,
change_date INT DEFAULT NULL,
primary key(id)
) Engine=InnoDB;

CREATE INDEX rec_name_index ON records(name);
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);

create table supermasters (
ip VARCHAR(25) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) DEFAULT NULL
) Engine=InnoDB;

mysql> quit;

  • コンフィグを編集

ここでは Masterでの動作を念頭において設定している。

# vi /etc/powerdns/pdns.conf

allow-axfr-ips=10.200.8.0/24  # <- AXFRできるネットワーク or IPアドレス
config-dir=/etc/powerdns
daemon=yes
default-soa-name=ns0.mykw.jp  # <- SOAレコードに書くDNSのホスト名
disable-axfr=no
disable-tcp=no
local-port=53
log-dns-details=yes
log-failed-updates=yes
logfile=/var/log/pdns.log
logging-facility=0
loglevel=4
master=yes
module-dir=/usr/lib/powerdns
negquery-cache-ttl=60
setgid=pdns
setuid=pdns
use-logfile=yes
version-string=powerdns
include=/etc/powerdns/pdns.d 

DB接続情報は別ファイルに分けて書く

# vi /etc/powerdns/pdns.d/pdns.local.gmysql
# MySQL Configuration
#
# Launch gmysql backend

launch=gmysql
gmysql-socket=/var/run/mysqld/mysqld.sock  # <-ローカルの DB 使うなら Socket 使った方が
gmysql-user=pdns
gmysql-password=hogehogepasswd
gmysql-dbname=pdns

これで一通り使う準備は完了。

 

2. 既存のゾーンファイルを SQL に変換

PowerDNS には zone2sql という便利な SQL 変換スクリプトが標準で用意されている。

BIND で使っていたゾーンファイルを以下の手順で変換・DBへの投入を行う。
素直に変換できないことが多いので、named.conf 調整しながら変換しよう。

  • ゾーンファイルを変換

# zone2sql –gmysql –dnssec=no –named-conf=/etc/bind/named.conf –start-id=1 > zone.sql

  • 変換したレコードをDBにぶち込む

# mysql -updns -phogehogepasswd pdns < zone.sql

  • 変換したゾーンに MASTER のフラグを立てる

これをしないと AUTOSERIAL が有効にならない。

# mysql -u pdns -phogehogepasswd -e “update pdns.domains set type=’MASTER’;”

詳しい説明については公式サイトの Wiki にお任せしよう。

http://wiki.powerdns.com/trac/wiki/Zone2SQLFAQ

 

これでお引越しは完了したはずだ。

 

3. 動作確認

適当に dig とかして動作確認をしてみよう。

ちゃんと回答が帰ってくれば動いているはずだ。

# dig @10.200.4.230 mykw.jp soa

ついでに dnsperf でベンチマーク

32110 行のクエリリストを食わせて 4thread でいじめてみた

  • PowerDNS
# dnsperf -c 4 -s 10.200.4.230 -d querylist -l 300
DNS Performance Testing Tool
Nominum Version 2.0.0.0

[Status] Command line: dnsperf -c 4 -s 10.200.4.230 -d querylist -l 300
[Status] Sending queries (to 10.200.4.230)
[Status] Started at: Fri Mar 15 18:01:29 2013
[Status] Stopping after 300.000000 seconds
n[Status] Testing complete (time limit)

Statistics:

  Queries sent:         33040355
  Queries completed:    33040355 (100.00%)
  Queries lost:         0 (0.00%)

  Response codes:       NOERROR 32976558 (99.81%), NXDOMAIN 63797 (0.19%)
  Average packet size:  request 36, response 52
  Run time (s):         300.000634
  Queries per second:   110134.283916

  Average Latency (s):  0.000890 (min 0.000144, max 0.431226)
  Latency StdDev (s):   0.001421

ちなみにBINDは以下のような結果になった。

  • BIND 9.8.1-P1

# dnsperf -c 4 -s 10.200.4.230 -d querylist -l 300
DNS Performance Testing Tool
Nominum Version 2.0.0.0

[Status] Command line: dnsperf -c 4 -s 10.200.4.230 -d querylist -l 300
[Status] Sending queries (to 10.200.4.230)
[Status] Started at: Sun Mar 31 00:28:16 2013
[Status] Stopping after 300.000000 seconds

[Status] Testing complete (time limit)

Statistics:

Queries sent: 58084969
Queries completed: 58084969 (100.00%)
Queries lost: 0 (0.00%)

Response codes: NOERROR 57898647 (99.68%), NXDOMAIN 112154 (0.19%), REFUSED 74168 (0.13%)
Average packet size: request 36, response 225
Run time (s): 300.003788
Queries per second: 193614.118632

Average Latency (s): 0.000313 (min 0.000227, max 0.060098)
Latency StdDev (s): 0.000382

 

 

4. まとめ

前項の結果でも分かるように BIND9 は意外に早かった。

とはいえ、今年も夏のアップデート祭り(予定)に参戦するのはイヤということで
しばらく自宅環境はPowerDNSで頑張ってみることにした。

ちなみに今回使ったマシンの前にはRAIDキャッシュなしのマシンで検証していたのだが、
スコアは半分ぐらいであまりふるわない成績だった。
SQL を使っているので Disk I/O に引っ張られる印象があるが、
update が多いようなアプリケーションではないので DISKが遅いマシンでも
querycache をたんまり盛ってあげればそこそこ捌いてくれそうな気がする。

SSDとかNANDフラッシュ系の高級ストレージって楽するという選択もありですかね。
空から iodrive か intel SSD 910 降ってこないかな。

BIND9とAAAAレコードと私(追記あり)

自分のBlogを自宅サーバに移転していてDNSのゾーンファイルを弄っていたのですが変な挙動をしたのでメモします。

バージョンはUbuntuのパッケージ最新版の

sakura# named -v
BIND 9.7.0-P1
sakura#

です。

IPv6ユーザとしてはAレコードよりAAAAレコードが好きなので以下のようにゾーンを定義しました。

 

ゾーンファイル(Before)

sakura# cat yutarommx.com.zone
$TTL   180
@               IN SOA  yutarommx.com.  yutaro.mykw.jp. (
2012041506     ; serial (d. adams)
3H             ; refresh
15M            ; retry
1W             ; expiry
15M)           ; minimum

IN NS           ns0.mykw.jp.
IN NS           ns1.mykw.jp.

IN AAAA         240f:1:33f2:1::beef
www             IN AAAA         240f:1:33f2:1::beef
IN A            124.214.243.203
www             IN A            124.214.243.203

tumblr          IN A            72.32.231.8

そうしたところ、家のPCからはBlogが見えるのですが、リモートで繋いでいた会社(IPv4)から閲覧ができないorz
何だろなとおもい、自宅サーバから dig してみたところ、以下のような結果が。

AAAAレコードの結果(Before)

micro# dig @ns0.mykw.jp yutarommx.com aaaa

; <<>> DiG 9.7.0-P1 <<>> @ns0.mykw.jp yutarommx.com aaaa
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51434
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 4
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;yutarommx.com.                 IN      AAAA

;; ANSWER SECTION:
yutarommx.com.          180     IN      AAAA    240f:1:33f2:1::beef

;; AUTHORITY SECTION:
yutarommx.com.          180     IN      NS      ns1.mykw.jp.
yutarommx.com.          180     IN      NS      ns0.mykw.jp.

;; ADDITIONAL SECTION:
ns0.mykw.jp.            180     IN      A       49.212.22.200
ns0.mykw.jp.            180     IN      AAAA    2001:e41:31d4:16c8::1
ns1.mykw.jp.            180     IN      A       183.181.172.61
ns1.mykw.jp.            180     IN      AAAA    2001:2e8:603:0:2:1:0:3d

;; Query time: 15 msec
;; SERVER: 2001:e41:31d4:16c8::1#53(2001:e41:31d4:16c8::1)
;; WHEN: Sun Apr 15 12:08:35 2012
;; MSG SIZE  rcvd: 190

Aレコードの結果(Before)

micro# dig @ns0.mykw.jp yutarommx.com a

; <<>> DiG 9.7.0-P1 <<>> @ns0.mykw.jp yutarommx.com a
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50777
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;yutarommx.com.                 IN      A

;; AUTHORITY SECTION:
yutarommx.com.          180     IN      SOA     yutarommx.com. yutaro.mykw.jp. 2012041509 10800 900 604800 900

;; Query time: 15 msec
;; SERVER: 2001:e41:31d4:16c8::1#53(2001:e41:31d4:16c8::1)
;; WHEN: Sun Apr 15 12:08:30 2012
;; MSG SIZE  rcvd: 81

むむ!!?

Aレコードが引けてない・・・・
ということで以下のように書き換えてみたところ・・・

 

ゾーンファイル(Before2)

sakura# cat yutarommx.com.zone
$TTL   180
@               IN SOA  yutarommx.com.  yutaro.mykw.jp. (
2012041510     ; serial (d. adams)
3H             ; refresh
15M            ; retry
1W             ; expiry
15M)           ; minimum

IN NS           ns0.mykw.jp.
IN NS           ns1.mykw.jp.

IN A            124.214.243.203
www             IN A            124.214.243.203
IN AAAA         240f:1:33f2:1::beef
www             IN AAAA         240f:1:33f2:1::beef

tumblr          IN A            72.32.231.8

AAAAレコードの結果(Before2)

 

micro# dig @ns0.mykw.jp yutarommx.com aaaa

; <<>> DiG 9.7.0-P1 <<>> @ns0.mykw.jp yutarommx.com aaaa
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;yutarommx.com.                 IN      AAAA

;; AUTHORITY SECTION:
yutarommx.com.          180     IN      SOA     yutarommx.com. yutaro.mykw.jp. 2012041510 10800 900 604800 900

;; Query time: 15 msec
;; SERVER: 2001:e41:31d4:16c8::1#53(2001:e41:31d4:16c8::1)
;; WHEN: Sun Apr 15 12:29:57 2012
;; MSG SIZE  rcvd: 81

Aレコードの結果(Before2)

micro# dig @ns0.mykw.jp yutarommx.com a

; <<>> DiG 9.7.0-P1 <<>> @ns0.mykw.jp yutarommx.com a
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37995
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 4
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;yutarommx.com.                 IN      A

;; ANSWER SECTION:
yutarommx.com.          180     IN      A       124.214.243.203

;; AUTHORITY SECTION:
yutarommx.com.          180     IN      NS      ns0.mykw.jp.
yutarommx.com.          180     IN      NS      ns1.mykw.jp.

;; ADDITIONAL SECTION:
ns0.mykw.jp.            180     IN      A       49.212.22.200
ns0.mykw.jp.            180     IN      AAAA    2001:e41:31d4:16c8::1
ns1.mykw.jp.            180     IN      A       183.181.172.61
ns1.mykw.jp.            180     IN      AAAA    2001:2e8:603:0:2:1:0:3d

;; Query time: 15 msec
;; SERVER: 2001:e41:31d4:16c8::1#53(2001:e41:31d4:16c8::1)
;; WHEN: Sun Apr 15 12:29:41 2012
;; MSG SIZE  rcvd: 178

 

今度はAAAAレコードが返ってこない・・・
次にサブドメイン(FQDN)を揃えつつAレコードを優先して定義してみた。

ゾーンファイル(After)

sakura# cat yutarommx.com.zone
$TTL   180
@               IN SOA  yutarommx.com.  yutaro.mykw.jp. (
2012041507     ; serial (d. adams)
3H             ; refresh
15M            ; retry
1W             ; expiry
15M)           ; minimum

IN NS           ns0.mykw.jp.
IN NS           ns1.mykw.jp.

IN A            124.214.243.203
IN AAAA         240f:1:33f2:1::beef
www             IN A            124.214.243.203
www             IN AAAA         240f:1:33f2:1::beef

tumblr          IN A            72.32.231.8

AAAAレコードの結果(After)

micro# dig @ns0.mykw.jp yutarommx.com a

; <<>> DiG 9.7.0-P1 <<>> @ns0.mykw.jp yutarommx.com
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62064
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 4
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;yutarommx.com.                 IN      A

;; ANSWER SECTION:
yutarommx.com.          180     IN      A       124.214.243.203

;; AUTHORITY SECTION:
yutarommx.com.          180     IN      NS      ns1.mykw.jp.
yutarommx.com.          180     IN      NS      ns0.mykw.jp.

;; ADDITIONAL SECTION:
ns0.mykw.jp.            180     IN      A       49.212.22.200
ns0.mykw.jp.            180     IN      AAAA    2001:e41:31d4:16c8::1
ns1.mykw.jp.            180     IN      A       183.181.172.61
ns1.mykw.jp.            180     IN      AAAA    2001:2e8:603:0:2:1:0:3d

;; Query time: 16 msec
;; SERVER: 2001:e41:31d4:16c8::1#53(2001:e41:31d4:16c8::1)
;; WHEN: Sun Apr 15 12:39:01 2012
;; MSG SIZE  rcvd: 178

Aレコードの結果(After)

micro# dig @ns0.mykw.jp yutarommx.com aaaa

; <<>> DiG 9.7.0-P1 <<>> @ns0.mykw.jp yutarommx.com aaaa
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64265
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 4
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;yutarommx.com.                 IN      AAAA

;; ANSWER SECTION:
yutarommx.com.          180     IN      AAAA    240f:1:33f2:1::beef

;; AUTHORITY SECTION:
yutarommx.com.          180     IN      NS      ns1.mykw.jp.
yutarommx.com.          180     IN      NS      ns0.mykw.jp.

;; ADDITIONAL SECTION:
ns0.mykw.jp.            180     IN      A       49.212.22.200
ns0.mykw.jp.            180     IN      AAAA    2001:e41:31d4:16c8::1
ns1.mykw.jp.            180     IN      A       183.181.172.61
ns1.mykw.jp.            180     IN      AAAA    2001:2e8:603:0:2:1:0:3d

;; Query time: 16 msec
;; SERVER: 2001:e41:31d4:16c8::1#53(2001:e41:31d4:16c8::1)
;; WHEN: Sun Apr 15 12:39:21 2012
;; MSG SIZE  rcvd: 190

micro#

今度はちゃんと返ってきた。

教訓:FQDNはソートしてAAAAレコードはAレコードより後に書こう!(Aレコードを併記する場合)

これって昔の公務員より融通が利かないなw

この辺の挙動はバンディー君に期待しましょう。

 

追記

ブログを投稿した後に某JP〇〇の @OrangeMorishita 氏からご指摘がございました。
以下、引用文

これ、正しい動作なんじゃないかな。INの前の名前を省略した場合、*直前の行の*継続行になります。
なので、beforeの例ではIN A 124.214.243.203はwwwの継続行だし、before2の例ではIN AAAA 240f:1:33f2:1::beefはwwwの継続行になります。

なるほど、INの前を省略すると勝手にOriginのドメインが補完されると思っていたのですが、
そうではなく空白の場合は前の行の内容を引き継ぐとのことだそうです。

ということは、こんな書き方もできるということですね!

sakura# cat yutarommx.com.zone
$TTL   180
@               IN SOA  yutarommx.com.  yutaro.mykw.jp. (
2012041513     ; serial (d. adams)
3H             ; refresh
15M            ; retry
1W             ; expiry
15M)           ; minimum

IN NS           ns0.mykw.jp.
IN NS           ns1.mykw.jp.

IN AAAA         240f:1:33f2:1::beef
IN A            124.214.243.203

www                     IN A            124.214.243.203
IN AAAA         240f:1:33f2:1::beef

tumblr                  IN A            72.32.231.8
sakura#

 

ほんとにこんなんで大丈夫なのかなと思いながら dig してみると。

wktk# dig @ns0.mykw.jp yutarommx.com a +short
124.214.243.203

wktk# dig @ns0.mykw.jp yutarommx.com aaaa +short
240f:1:33f2:1::beef

wktk# dig @ns0.mykw.jp http://www.yutarommx.com a +short
124.214.243.203

wktk# dig @ns0.mykw.jp http://www.yutarommx.com aaaa +short
240f:1:33f2:1::beef

お!ちゃんと引けているではないですか!

ゾーンファイルの内容がわかりづらいのでわかってないと気持ち悪いけど、
ルールがわかってすっきりしました。

森下氏 ありがとうございました!

dnsperf で DNS DoS(違) ベンチマーク

大先生に教わりながら仕事で使ったので忘備録

 

0. 検証環境

筐体:IBM System X3550M2
OS:Ubuntu Server 11.10

 

1. 必要そうなパッケージを入れる

mykw# apt-get install bind9utils libbind-dev libkrb5-dev libssl-dev libcap-dev libxml2-dev gnuplot

GNU Plotは resperf-report するときに使うのかな。

2. ソースを拾って展開して make

mykw# wget ftp://ftp.nominum.com/pub/nominum/dnsperf/1.0.1.0/dnsperf-src-1.0.1.0-1.tar.gz

mykw# tar xzf dnsperf-src-1.0.1.0-1.tar.gz && cd dnsperf-src-1.0.1.0-1

mykw# ./configure prefix=/usr/local

mykw# make && make install

 

3. 実行してみる

初めに以下のようなリストを作る

mykw# cat domainlist

http://www.wktk.so A
yutarommx.com A

 

クエリー飛ばす先と、リストファイル名、実行時間を引数に入れて実行。

mykw# dnsperf -s ${DIST}  -d ${domainlist} -l ${exectime}

mykw# dnsperf -s 192.168.10.139  -d domainlist -l 60

 

ほかにもいろいろオプションがある模様。

mykw# dnsperf –help

DNS Performance Testing Tool

Nominum Version 1.0.1.0

dnsperf: invalid option — ‘-‘

Usage: dnsperf [-d datafile] [-s server_addr] [-p port]
               [-b bufsize] [-f family] [-e] [-D]
               [-y name:secret] [-v] [-A] [-h]
               [-q num_queries] [-t timeout] [-Q max_qps] [-1] [-l limit]
               [-c] [-H histogram_buckets] [-T histogram_seconds] [-u]
  -d specifies the input data file (default: stdin)
  -s sets the server to query (default: 127.0.0.1)
  -p sets the port on which to query the server (default: 53)
  -b set socket send/receive buffer size in kilobytes (default: 32 k)
  -f specify address family of DNS transport, inet or inet6 (default: any)
  -e enable EDNS 0
  -D set the DNSSEC OK bit (implies EDNS)
  -y specifies the TSIG name and secret (no default)
  -A report command-line arguments
  -h print this usage
  -q specifies the maximum number of queries outstanding (default: 20)
  -t specifies the timeout for query completion in seconds (default: 5)
  -Q limit the number of queries per second (no default)
  -1 run through input only once (default: multiple iff limit given)
  -l specifies how a limit for how long to run tests in seconds (no default)
  -c print the number of packets with each rcode
  -H print a response latency histogram with this many buckets
  -T include latencies up to this many seconds in histogram (use with -H)
  -u send dynamic updates instead of queries
  -v verbose: report the RCODE of each response on stdout

 

 5. 実行結果

mykw# dnsperf -s dti.mykw.jp -d domainlist -l 30

DNS Performance Testing Tool

Nominum Version 1.0.1.0

[Status] Processing input data
[Status] Sending queries (to 2001:2e8:603:0:2:1:0:3d)
[Status] Testing complete

Statistics:

Parse input file:     multiple times
Run time limit:       30 seconds
Ran through file:     12836 times

Queries sent:         25672 queries
Queries completed:    25672 queries
Queries lost:         0 queries

Avg request size:     28 bytes
Avg response size:    175 bytes

Percentage completed: 100.00%
Percentage lost:        0.00%

Started at:           Thu Mar 15 02:04:21 2012
Finished at:          Thu Mar 15 02:04:51 2012
Ran for:              30.113407 seconds

Queries per second:   852.510644 qps

mykw#

 

ちなみに、マルチコアな筐体で動かく場合はコア分並行して実行しないと全力投球できない模様。
そのような場合は screen を使うか、シェルスクリプト等で対応する形になるもよう。