名前解決のコスト
アプリケーションのConfigとかでホスト名を使っていることが多いのだけど、ホスト名からIPへの名前解決、gethostbynameのコストが気になったのでテスト
テストのパターンは
- 名前解決なし
- /etc/hostsファイルに書いた場合
- DNSに問い合わせるパターン
をやってみた。
Perlのコードは以下。
#!/usr/bin/perl use strict; use warnings; use Benchmark; timethese( 50000, { 'no_lookup' => sub { gethostbyname('10.101.100.51') }, 'hosts_lookup' => sub { gethostbyname('nomadscafe') }, 'named_lookup' => sub { gethostbyname('nomadscafe.jp') } } );
環境はFedoraCore6のkernel-2.6.20です
実行結果
Benchmark: timing 50000 iterations of hosts_lookup, named_lookup, no_lookup... hosts_lookup: 2 wallclock secs ( 0.71 usr + 0.83 sys = 1.54 CPU) @ 32467.53/s (n=50000) named_lookup: 18 wallclock secs ( 1.47 usr + 1.99 sys = 3.46 CPU) @ 14450.87/s (n=50000) no_lookup: 0 wallclock secs ( 0.04 usr + 0.00 sys = 0.04 CPU) @ 1250000.00/s (n=50000) (warning: too few iterations for a reliable count)
hostsに書いたとしても、名前解決をするコストはかなり大きい。
ただ、設定ファイルの中身をIPにするのは、運用上のコストが高くなるので、
サーバへの配布時に自動変換とか考えることにしよう。