我们在以下主机上运行erlang 14b03:
HP ProLiant G6服务器,有2个Intel处理器,每个处理器有2.4GHz速度,8MB缓存,每个处理器有4核。服务器有20 GB的RAM。
我们将如何应用-smp模拟器选项来充分利用服务器的超线程功能。如果在每个处理器的每个核心上都有一个调度程序(总共8个调度程序),我们将获得哪些性能优势?

最佳答案

默认情况下,如果用smp编译,erlang应该为您启动8个调度程序。您可以在启动头中看到这一点:

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 manual,因为它相当复杂。
但是请注意,如果操作系统公开了一个调度程序,erlang应该已经为每个内核启动了一个调度程序(即使它们是超线程)。确保你没有运行在已经可见超线程的双核四核系统上(使其总共有8个虚拟内核)。

10-08 08:28