По умолчанию Erlang должен запустить 8 планировщиков, если он скомпилирован с SMP. Вы можете увидеть это в заголовках запуска:
Erlang R14B03 (erts-5.8.4) [source] [64-bit] [smp:8:8] [rq:2] [async-threads:0]
[hipe] [kernel-poll:false] ^^^^^^^^^
Это эквивалентно присвоению -smp auto
в качестве флага. -smp enable
просто включит режим SMP даже в одноядерной системе (что обычно несколько снижает производительность).
Используя флаг +S
, вы можете контролировать, сколько планировщиков должно быть создано (и сколько должно быть в сети). Например:
$ erl +S16:16
Erlang R14B03 (erts-5.8.4) [source] [64-bit] [smp:16:16] [rq:16]
[async-threads:0] [hipe] [kernel-poll:false]
Если пойти еще дальше, вы можете использовать флаг +sct
, чтобы точно определить, какие планировщики должны находиться на каком именно ядре. См. Руководство по erlang для описания этого флага, поскольку он довольно сложный.
Обратите внимание, что Erlang уже должен запускать один планировщик на ядро (даже если они являются гиперпотоками), если ОС предоставляет их. Убедитесь, что вы не работаете в двухъядерной системе с уже видимыми гиперпотоками (всего 8 виртуальных ядер).