nginxにはworker_cpu_affinity
というワーカープロセスを特定のCPUコアに割り振るディレクティブがある。これを使えばnginxの各ワーカープロセスをそれぞれ別のCPUコアに均等に割り当てることが可能になる。
# CPUのコア数(=4)分のワーカープロセスを起動(この場合はautoでもよい)
worker_processes 4;
# 各CPUコアに均等にワーカープロセスを割り当てる
worker_cpu_affinity 1000 0100 0010 0001;
さて、ここからが本題だが、worker_cpu_affinity
の設定を手で書くのは少々めんどくさい。上記の場合、CPUコア数は4だからまだ楽だが、8とか16とかになると結構つらい。というか高確率でtypoする。というわけでジェネレーターをGoで書いてみた。
nwcagen - worker_cpu_affinity configuration generator for nginx.
追記(2016/07/02):ngnx-1.9.15からworker_cpu_affinity
の値にauto
を設定することでCPUコアを各ワーカープロセスに均等に割り当てることができるようになりました。コメント欄を参照)
インストールは↓で。
go get -u github.com/cubicdaiya/nwcagen
あとはnwcagen
というコマンドにワーカー数(-n
)とCPUコア数(-c
)を与えて実行すればOK。引数なしの場合は実行されているマシンのCPUコア数を基に生成する。
$ nwcagen -n 4 -c 4
worker_cpu_affinity 1000 0100 0010 0001;
$
今のところ各CPUに割り振る設定しか吐けないけど、そもそも特定のCPUに偏る設定を書くケースってレアだよね?(多分)