Опция Erlang SMP enable на многоядерных серверах - PullRequest
1 голос
/ 17 августа 2011

Мы запускаем Erlang 14B03 на следующем хосте:

Сервер HP Proliant G6, имеет 2 процессора Intel, каждый процессор имеет частоту 2,4 ГГц, кэш-память 8 МБ, каждый процессор имеет 4 ядра.Сервер имеет 20 ГБ ОЗУ.

Как мы можем применить опцию эмулятора -smp, чтобы полностью использовать возможности Hyper Threading сервера.Каких преимуществ с точки зрения производительности мы бы достигли с помощью планировщика на каждом ядре каждого процессора (всего их будет 8)?

1 Ответ

4 голосов
/ 17 августа 2011

По умолчанию 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 виртуальных ядер).

...