2ギガバイトの壁に久しぶりにぶち当たった・・・
今日は客先で、ProDHCPのセットアップをしてきました。かなり大規模な使い方をするので、dhcpd.confのサブネット定義は、Excelでデータをいただき、その場で変換プログラムを作って生成し、実行してみました。
もともとかなり大きな設定になるということは理解していたのですが、それにしても読み込みに時間がかかるなぁ、と思っていたら、ようやく設定読み込みを終えてリース情報の生成処理へ・・・と思ったらエラーで終了しました。。
ProDHCPは、リース情報をメモリーマッピングという技術、要するにファイルをメモリーのように使うのですが、そのファイルの生成でエラーになっています。
あらためてざっくり計算してみました。
サブネット数:240,000個
IPアドレス数:240,000×61=14,640,000個
ProDHCPの、IPアドレスごとのデータは、160バイトになっているので、それだけだとしても(本当はサブネットとかのデータも使いますが)・・・
14,640,000×160=2,342,400,000バイト=2.34ギガバイト
longの最大値は2,147,483,647なので、2.34ギガバイトだと超えてしまいます。
見事に2ギガバイトの壁にぶち当たったということになります。
まあ、今どきは64ビットのファイルオフセットを使えるので、対応することは簡単なのですが、そもそもProDHCPは性能上の問題(特に初期化時間)もあり、基本的に快適に動くのは100万IPまで、多くても200万IPで、と言っているので、オーバースペックなのです。。
設定ファイルをプログラムで変換すると、一瞬で変換を終えるので、あまり量に関して気を使わずに動かしてみてしまうものです。。
もちろん、お客さんと調整し、1台のProDHCPでそんなにたくさん動かす予定ではないということを確認し、分割して設定しました。
動画データなどでは2ギガバイトの壁はしょっちゅうあることなので、注意しているのですが、まさかDHCPでこの問題にぶち当たるとは思ってませんでした。
しかし、IP数が1464万個というと、日本の人口の10分の1くらいですよね。恐ろしい数です・・・。