« 高速Webサーバ Nginxの組み込みPerlを使ってみる | メイン | Perlで「もごもご」にアクセスする »

名前解決のコスト

アプリケーションのConfigとかでホスト名を使っていることが多いのだけど、ホスト名からIPへの名前解決、gethostbynameのコストが気になったのでテスト

テストのパターンは

  1. 名前解決なし
  2. /etc/hostsファイルに書いた場合
  3. 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にするのは、運用上のコストが高くなるので、
サーバへの配布時に自動変換とか考えることにしよう。