Performance Tuning — dnsdist documentation
dnsdistをとりあえず使用していると、思ったよりもパフォーマンスが向上しないなと思い、ドキュメントをちゃんと確認してみると色々と見落としがあったのでメモしておく。あと、luaの備忘録にもしておきたい。
基本的には、dnsdistのドキュメントのPerformance Tuningのページを見るのが早い。
listenするインターフェースはCPUのスレッド分作る。
基本的に一つのローカルバインドごとに1スレッドで処理するようなので、reuse portを有効にしたうえで、同一のローカルバインドをあたかも異なるIPやポートであるかのように追加し処理させるようにする。例では以下の通り。
addLocal("192.0.2.1:53", {reuseport=true})
addLocal("192.0.2.1:53", {reuseport=true})
addLocal("192.0.2.1:53", {reuseport=true})
addLocal("192.0.2.1:53", {reuseport=true})
for i=1,<コア数> do
addLocal("0.0.0.0:53", { doTCP=true, reusePort=true, tcpFastOpenSize=0 })
addLocal("[::]:53", { doTCP=true, reusePort=true, tcpFastOpenSize=0 })
end
少ない数なら良いが、増えてると行数だけが増えるので、以下のようにluaを設定してもよいかも。
コア数のところの数値を変更することで、繰り返し処理を行う。
厳密に設定するときは、1.3.0で追加になったcpusを設定して、CPUのaffinityを設定する
CPUのaffinityについては以下のWebサイトを参考にするのが良いかも。
追記(2019年4月12日):
振り分け対象サーバのnewServer()関数でsocketsを指定するとよいかも。
Configuration Reference — dnsdist documentation
sockets=NUM, -- Number of sockets (and thus source ports) used toward the backend server, defaults to a single one
バックエンドサーバーに対して使用されているソケットの数(送信元ポート)を指定できます。デフォルトでは1つなのですが、問い合わせ件数が多いようだとこれを増やしてやるのが良いかも。
ただし、バックエンドへの問い合わせも増大するので、パフォーマンスとの兼ね合いになるでしょうね。