题
当我启动Erlang模拟器时,第一位有很多信息。 (稍微重新格式化以效果。)
manoa:~ stu$ erl
Erlang (BEAM) emulator version 5.6.5
[source] [smp:2] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.6.5 (abort with ^G)
1>
我可以猜到其中有些可能是准确的,但是其中有些意味着“在这里是魔术”。
Erlang (BEAM) emulator version 5.6.5
: :当然,版本[source]
: :模拟器是从源头编译的?[smp:2]
: :检测到两个CPU核心[async-threads:0]
:目前正在运行作业?[hipe]
: ?[kernel-poll:false]
: ?
我也想知道还有其他 [foo]
可能弹出不同配置,构建或启动参数的项目。
那么,Erlang模拟器信息语句是什么意思?
解决方案
async-threads:0
可用于加载驱动程序的异步线池的尺寸。这允许在光束VM的单独内核螺纹中执行封闭SYSCALL。使用命令开关 +A N
调整池的大小。
hipe
支持Erlang源和字节码的本机汇编。倾向于大多对数字处理代码有用。 IO结合的代码在字节码解释器上做得很好。
kernel-poll:false
有一个旧的选择(2)和民意调查(2)系统呼叫,用于接收通知,某些文件描述符已准备好解释写作或阅读。它们不能很好地扩展到大量的打开文件描述符。现代操作系统具有替代界面,Linux具有EPOLL,FREEBSD具有kqueue。使用命令开关启用 +K true
其他提示
与Erlang一样 20.0, ,完整的版本字符串标签是:
64位
梁模拟器旨在充分使用64位CPU。
异步线:10
这是指Erlang仿真器的异步线池中的线程数,它或多或少地告诉您在模拟器失速之前可以将多少个阻止的系统调用旋转到背景线程中。
尽管目前默认为10,但默认值为0多年,这意味着所有系统调用都是在每个Erlang模拟器线程中同步运行的。当系统呼叫被阻止时,它阻止了Erlang模拟器线程运行,直到系统调用完成为止。当前的小默认值允许模拟器试图在系统调用阻止异步I/O线程之一时尝试进行其他操作。
您可以使用 +A
ERLANG运行时的选项。 (例如 erl +A 50
)如果要更改此操作,请注意您的结果将取决于您的特定系统和工作量。太高的价值可能会损害性能,因为它会导致系统在系统非常忙时尝试在后台做很多事情,这只会使其更加忙碌。在某些工作负载上,将功能禁用 erl +A 0
可能是最好的选择。
调试编译
仅当您竭尽全力使用编译器选项设置以使生成可执行的可执行式调试时,才会出现这一点 gdb
或类似。您还必须以特殊的方式运行此备用光束仿真器。
Erlang Beam仿真器通常是为了速度而制造的,这通常会使调试器的工作变得更加困难。如果您正在开发下一个版本的Beam Emulator,则可能会发现在完善工作时进行特殊调试构建很有帮助。
为了启用此模式, cd
进入 erts/emulator
运行后的Erlang源树 configure
在上面键入类似的内容 ERL_TOP=../.. make FLAVOR=smp debug
. 。然后,要运行新的可辩论光束仿真器,您必须运行 bin/cerl -debug
从Erlang源树的顶层开始,在构建了Erlang/OTP系统的其余部分之后。
看 如何构建启用调试的ERLANG运行时系统 有关此主题的更多信息。
DS:1:1:1
从ERTS 9.0开始,如果您在SMP支持的情况下构建了光束仿真器,则应始终出现。它指的是“肮脏的调度程序“功能。值描述该系统上功能的配置。
此功能是用Erlang 19.0引入的,最初是一个实验功能,默认情况下在SMP构建中没有编译,因为它在Erlang 20.0中。
dtrace
如果您通过了 --with-dynamic-trace=dtrace
到 configure
脚本启用实验 dtrace R15B01中添加的仪器功能。预计此功能仅在OS X,Solaris和FreeBSD上使用。将来它可能会在其他平台上使用。看 SystemTap 下面为Linux系统同时添加了替代方案。
帧机
这是一个特殊情况 调试编译 上面的选项,除了它仅禁用 框架指针优化. 。利用 frmptr
代替 debug
在上面的命令中启用此模式。
hipe
模拟器与 hipe 启用功能,这是ERLANG的正式本机代码编译器。它仅适用于Erlang支持的最流行的CPU类型,即使在这些CPU上也无法与所有配置一起使用,这就是为什么它是可选的。
指导计数
如果您定义 ERTS_OPCODE_COUNTER_SUPPORT
在构建过程中,可以实现光束OpCode计数功能,大概对那些分析束模拟器性能有用。
kernel-poll:false
ERLANG模拟器代码知道询问OS网络堆栈的几种不同方法,其中哪一组文件描述符和套接字可用于I/O。几乎到处都可以工作的是旧的BSD select()
呼叫由于其设计而相对较慢,并且除了除此之外还有其他可扩展性问题。因此,大多数系统具有更快,更可扩展的替代品 - 例如,kqueue, epoll()
, 等等 - 但是它们无处不在。当模拟器启动消息说 false
在这里,这可能意味着不可用的内核投票,或者是不可用的,但您没有通过 +K true
至 erl
.
锁检查
如果您通过了 --enable-lock-check
到配置脚本。
锁定
如果您通过了 --enable-lock-counter
到配置脚本。
lttng
如果您通过了 --with-dynamic-trace=lttng
到 configure
脚本以支持 lttng, ,Linux的追踪框架。
净化编译
当您运行特别 净化- Erlang Beam Emulator的意识版本。说明与 调试编译 上面的部分,除了您使用 purify
在命令中而不是 debug
.
共享保护
如果您通过 --enable-sharing-preserving
到 configure
脚本,导致 分享不变的术语内部 而不是扁平和重新创建它们。该选项是使您的程序更快还是较慢取决于程序的详细信息,因此为什么在默认构建中未设置它。
SMP:2:2
这 SMP:2 标签更改为Erlang R13中的这种格式,这意味着2个调度程序,两者都在线。如果您说“ ERL +S1”,它说 SMP:1:1 反而。您可以在运行时与ERLANG:SYSTEM_FLAG(SECHENULERS_ONLINE,N)脱机的调度程序,其中N可以在1和检测到的内核数之间进行任何内容。
源]或[源代码
这意味着某些第三方(也许您,也许您的OS发行版维护器,也许是您的Sysadmin)从源代码构建了Erlang。替代方案是从erlang.org下载官方二进制版本。
如果您从 GIT存储库, ,此消息更改为类似 Source-8ACC644, ,其中十六进制是存储库电流的片段 git哈希, ,这使您可以查看构建给定可执行文件的源的确切版本。
SystemTap
如果您通过了 --with-dynamic-trace=systemtap
到 configure
脚本。这是替代 =dtrace
此配置选项的值,使用Linux上基本相同的功能 SystemTap, ,由于dtrace通常在Linux上不可用。看 dtrace 以上。
类型评估
当您不输入时出现 ET_DEBUG
行进 erts/emulator/beam/erl_term.h
, ,启用所有特定类型数据访问的运行时检查。默认情况下未启用,因为它会减慢仿真器。
Valgrind编译
当您运行特别 Valgrind- Erlang Beam Emulator的意识版本。说明与 调试编译 上面的部分,除了您使用 valgrind
在命令中而不是 debug
.
(此列表来自 erts/emulator/beam/erl_bif_info.c
在Erlang OTP源树中。参见的定义 erts_system_version
在文件顶部附近。)
过时的标签: