Asakusa Framework Advent Calendar 2016の20日目です。
Asakusa on M3BPはマルチスレッドで動作します。スレッド数は、デフォルトでは(最大で)全ての論理CPUが使われます。
が、データ量によっては、そんなにCPU数があってもあまり意味が無いことがあります。(Hadoop(MapReduce)やSparkでタスク数を多くしても意味が無い場合があるのと同様です)
そうした場合は、ASAKUSA_HOME/m3bp/conf/m3bp.propertiesのcom.asakusafw.m3bp.thread.maxで、使用するCPU数(スレッド数)を指定することが出来ます。
上で「論理CPU」とわざわざ書いたのは、M3BPにおいては、物理CPUを意識してどれを使うのかを指定することが出来るからです。
CPU関連の用語については詳しくないのですが、マザーボードに物理的に設置できる個数がソケット数、1ソケットの物理CPUに対して複数コアが有り、1コアに対してハイパースレッディングで論理的に複数コアあるように見えているのが論理CPU。かな?
それぞれのレイヤーにキャッシュがあるそうです。
で、 com.asakusafw.m3bp.thread.affinity(デフォルトはnone)にcompactを指定すると同一ソケット上のコアから順番に割り当て、scatterを指定すると異なるソケットから順番に割り当てていくということが出来ます。
正直、どの方式が良いのかよく分からないので、興味があるなら試してみると良いでしょう。
(ただし、クラウド等の仮想マシン上で動いている場合は物理CPUの情報は正しく取れないでしょうから、意味が無いと思われます)
ちなみに、この物理CPUの情報を使用する為に(だと思いますが)、Linuxのライブラリーのバージョンがある程度高い必要があります。CentOSで言うなら、7以上ならOKです。6だとライブラリーを手動でバージョンアップしないと駄目そうですが、バージョンアップに成功した例を聞いたことがありません。下手するとLinuxの標準的なコマンド(cdとかlsとか)すらも使えなくなります(爆) 自分はそれで仮想マシンを1つ駄目にしましたorz