名前解決のコスト
アプリケーションの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にするのは、運用上のコストが高くなるので、
                                 サーバへの配布時に自動変換とか考えることにしよう。