Самое простое, что нужно сделать, это указать виртуальной машине Erlang, сколько ядер использовать, используя параметр +S
:
erl +S 2
Он называется S
, потому что виртуальная машина Erlang использует один s cheduler на ядро.
По умолчанию планировщики не привязаны ни к какому ядру. Вы можете проверить это, используя erlang:system_info(scheduler_bindings)
:
3> erlang:system_info(scheduler_bindings).
{unbound,unbound}
Вы можете попросить виртуальную машину Erlang привязать планировщики к ядрам, передав аргументы +sbt db
, но это может иметь неприятные последствия, если вы запустите более одной виртуальной машины на одном компьютере, поскольку они будут привязаны к те же ядра. Таким образом, вам также необходимо использовать +sct
параметр , чтобы использовать собственную топологию ЦП. Во-первых, выясните, что виртуальная машина Erlang считает настоящей топологией. Вот что он говорит о моем ноутбуке:
2> erlang:system_info({cpu_topology,detected}).
[{processor,[{core,[{thread,{logical,0}},
{thread,{logical,4}}]},
{core,[{thread,{logical,1}},{thread,{logical,5}}]},
{core,[{thread,{logical,2}},{thread,{logical,6}}]},
{core,[{thread,{logical,3}},{thread,{logical,7}}]}]}]
Итак, давайте свяжем первую виртуальную машину с логическими потоками 0 и 4, находящимися в потоке 0 и 1 соответственно, на ядре 0 процессора 0:
erl +S 2 +sbt db +sct L0T0C0P0:L4T1C0P0
И давайте свяжем вторую виртуальную машину с логическими потоками 1 и 5 в потоке 0 и 1 ядра 1 процессора 0:
erl +S 2 +sbt db +sct L1T0C1P0:L5T1C1P0
Если вы используете Elixir, вы можете передать все эти параметры с аргументом --erl
в elixir
или iex
:
iex --erl "+S 2 +sbt db"