pdns-mrubybackend benchmark

この記事はDNS Advent Calendar 2015 - Qiitaの23日目の記事です。

先日リリースしたpdns-mrubybackendですが、
どれくらい遅いのかなと思い、ベンチマークをとってみました。

pdns-mrubybackend は、PowerDNSのバックエンドをmrubyで記述することのできるモジュールです。

その前に、普通のDNSがどんなものなのか分かってないのでbindと比較してみます。

まずbind

bindはディストリビューション提供yumで入る最新版、設定は再帰問い合わせとDNSSECを切る以外はインストール時のまま。
named.empty をコピー、加工して上記のテストゾーンを作成。

続いてpdns-mrubybackend

PowerDNSの設定は以下のように。

benchmarkには、Nominum社のresperfを使用しました。

resperfを使用するにあたって作成したクエリ定義は

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
www.example.jp. A
www.example.jp. A
example.jp. A
example.jp. A
example.jp. A
example.jp. MX
example.jp. A
blog.example.jp. A
blog.example.jp. A
mail.example.jp. A
example.jp. A
now.example.jp. A
now.example.jp. A
now.example.jp. A
example.jp. A
example.jp. TXT
example.jp. SOA

を延々繰り返し記述し 57933824 行になったテキストファイルを使用します。

では実際のベンチ結果がこちら。

bindのほう

そしてmrubybackendのほう

残念ながらbindに対しピークでも40%程度のクエリしか捌けませんでした。

この結果を踏まえ、pdns-mrubybackendの性能改善を引き続き行っていこうと思います。

おまけ。
pdns-mrubybackendでもpdns.confから以下2行をコメントアウトしデフォルトの
キャッシュを効かせると(当然ながら)bindに近い数字になりました。

1
2
query-cache-ttl=0
cache-ttl=0