DNSソフトウェアのパフォーマンステストをしてみた
2024年6月21日
DNS Summer Day 2024 LT
株式会社日本レジストリサービス (JPRS)阿部 信平
Copyright © 2024 株式会社日本レジストリサービス

1

自己紹介
• 氏名：阿部 信平 (あべ しんぺい)• 所属：株式会社日本レジストリサービス(JPRS) システム部• 現在の業務内容：– データセンターネットワークの設計・構築・運用– JP DNSの設計・構築・運用• 経歴：– 2020年4月
JPRS入社– 2021年1月~現在 システム部配属

Copyright © 2024 株式会社日本レジストリサービス

2

はじめに
• DNSソフトウェアといえば、BINDを思い浮かべることが多いと思います• ただ、BINDよりもNSDやKnot DNSのほうがパフォーマンスが出るよという話もよく聞きます

そこで
BIND9、NSD、Knot DNSの3つに焦点を絞って、権威DNSサーバ機能のパフォーマンスを測定してみました！
Copyright © 2024 株式会社日本レジストリサービス

3測定した環境10.10.0.6/24

dnsperf

10.10.0.7/24

dnsperf

10G-DACx1で直結
10.10.0.20/24

dnsperf

10.10.0.1/24• 機材– 物理サーバx2• 権威DNSサーバx1• 負荷生成器x1– スペック(共通):• CPU: 3.2GHz 8C/16T (Intel Xeon E-2388G)• メモリ: 128GB(DDR4 32GBx4)• NIC: 10Gbps(Intel X710)

・・・

dnsperf

・・・

権威DNSサーバ(BIND, NSD, Knot DNS)

10.10.0.5/24

負荷生成器(16 プロセス)• ソフトウェア– DNSソフトウェア(ソースからビルド):• BIND 9.18.25• NSD 4.9.1• Knot DNS 3.3.5– OS: Rocky Linux 9.3– Kernel Version: 5.14.0362.24.1.el9_3.x86_64– dnsperf 2.14.0

Copyright © 2024 株式会社日本レジストリサービス

4測定条件: 権威DNSサーバ• ゾーン数: 1• delegation only
• DNSSEC署名済み• RR数(NSEC3含む、opt-out): 490万レコード• DNSソフトウェアは1つのみ起動• ListenするIPアドレス数: 1• クエリログ: 「クエリログ無効」 と 「dnstapで取得」 の双方で測定

Copyright © 2024 株式会社日本レジストリサービス

5測定条件: 負荷生成器• dnsperf: 16プロセス並列かつ、それぞれに固有のソースアドレス付与• クライアント数: 256client / process• クエリ数： 計6千万 query (375万query / process)• クエリ内訳: NOERRORになるクエリ 0.01%
NXDOMAINになるクエリ 99.99%• RD bit: dnsperfの仕様により常時 on• DO bit: on と off の双方で測定• トランスポートプロトコル: 「UDP only(TCP fallbackなし)」 と「TCP only」の双方で測定• TCPコネクションは再利用する
Copyright © 2024 株式会社日本レジストリサービス

6

パラメータ設定: DNSソフトウェア• BIND
– tcp-clients: 8192
– スレッド数: デフォルト(CPU数と同一)• NSD– tcp-count: 8192
– server-count: 16 (CPUスレッド数と同一にした)• Knot DNS– tcp-max-clients: 8192
– スレッド数: デフォルト (CPU数と同一)
Copyright © 2024 株式会社日本レジストリサービス

7

パラメータ設定: Rocky Linux• UDPバッファサイズ: 4MB– net.core.rmem_max=4194304– net.core.wmem_max=4194304• TCPバッファサイズ: 100MB– net.ipv4.tcp_rmem=1048576000– net.ipv4.tcp_wmem=1048576000• Max open files: 1M– LimitNOFILE=1048576

Copyright © 2024 株式会社日本レジストリサービス

8測定結果と考察

Copyright © 2024 株式会社日本レジストリサービス

9UDP, DO bit on
dnstapで取得

3,500,000

3,500,000

3,000,000

3,000,000

2,500,000

2,500,000

2,000,000

2,000,000

QPS

QPS

クエリログ無効1,500,000

1,225,660

1,227,660

1,000,000

500,000

1,500,000

1,225,800

1,000,000

369,732

500,000

0342,984

256,876

0

BIND

NSD

Knot DNS
Copyright © 2024 株式会社日本レジストリサービス

BIND

NSD

Knot DNS
10

TCP, DO bit on
dnstapで取得

3,500,000

3,500,000

3,000,000

3,000,000

2,500,000

2,500,000

2,000,000

2,000,000

QPS

QPS

クエリログ無効1,500,000

1,143,380

1,000,000

500,000

1,500,000

1,000,000

770,346

500,000

177,9020719,108444,670
170,848

0BIND

NSD

Knot DNS
Copyright © 2024 株式会社日本レジストリサービス

BIND

NSD

Knot DNS
11

UDP, DO bit off
dnstapで取得

クエリログ無効3,500,000

3,500,000

3,028,560

3,000,000

2,467,290

2,500,000

2,000,000

1,500,000

1,000,000

2,000,000

1,500,000

1,000,000

725,625500,000

500,000

00

BIND

NSD

2,327,690

2,500,000

QPS

QPS

3,000,000

Knot DNS
Copyright © 2024 株式会社日本レジストリサービス

646,256
293,750
BIND

NSD

Knot DNS
12

TCP, DO bit off
dnstapで取得

3,500,000

3,500,000

3,000,000

3,000,000

2,500,000

2,500,000

1,801,240

2,000,000

1,500,000

1,146,220

1,000,000

500,000

QPS

QPS

クエリログ無効

2,000,000

1,500,000

1,015,350

1,000,000

282,392

500,000

0495,165

255,346

0

BIND

NSD

Knot DNS
Copyright © 2024 株式会社日本レジストリサービス

BIND

NSD

Knot DNS
13現時点の考察• NSD・Knot DNSのパフォーマンスはBINDと比較してかなり高い– NSD・Knot DNSはCPU使用率に余裕があり、ケースによってはNICの帯域をほぼ100%使用していた– BINDについてはCPU使用率が限界に近い• Knot DNSにてdnstapでのクエリログ取得を有効にすると、パフォーマンスがかなり低下する– topを眺める限りは、CPU・メモリともに余裕があった– 理由は調査中 (mod-dnstap?、 dnstap自身？、その他、、、)• 測定中に、負荷生成器の性能がほぼめいっぱいになった– dnsperf以外のツールや負荷生成器の性能強化などを検討する必要がある

Copyright © 2024 株式会社日本レジストリサービス

14

今後の展望• 更にパフォーマンスを引き出したい！
– Knot DNSのXDPモードを試してみる– Knot DNS with dnstap の最適化を図っていく– 複数サービスを立ち上げて、ロードバランスしてみる• パフォーマンステストの実施方法の検討– CPUスレッド数を変えて動かしてみるとどうか– 実環境に近いクエリパターンを構築してみる– NICの帯域を増やしてみる

その他アイデアがあれば、ぜひ教えてください！
Copyright © 2024 株式会社日本レジストリサービス

15