我们在以下主机上运行 Erlang 14B03:
HP Proliant G6 服务器,有 2 个 Intel 处理器,每个处理器有 2.4GHz 速度,8MB 缓存,每个处理器有 4 个内核。服务器有 20 GB RAM。
我们将如何应用-smp
模拟器选项来充分利用服务器的超线程功能。在每个处理器的每个核心上使用一个调度器(使它们总共有 8 个调度器),我们将获得哪些性能优势?
默认情况下,如果 Erlang 使用 SMP 编译,它应该为您启动 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 手册,因为它非常复杂。
但是请注意,如果操作系统公开了 Erlang,则应该已经为每个内核启动了一个调度程序(即使它们是超线程)。确保您没有在已经可见超线程的双四核系统上运行(使其总共有 8 个虚拟内核)。