Erlang emulator info语句是什么意思?

Erlang emulator info语句是什么意思?,erlang,emulation,erl,Erlang,Emulation,Erl,当我启动Erlang emulator时,第一个部分有很多信息。稍微重新格式化以获得效果 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

当我启动Erlang emulator时,第一个部分有很多信息。稍微重新格式化以获得效果

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版本5.6.5:当然是这个版本 [源代码]:仿真器是从源代码编译的? [smp:2]:检测到两个CPU内核并可用 [异步线程:0]:当前正在运行作业? [hipe]:? [内核轮询:false]:? 我还想知道是否还有其他[foo]项可能会弹出不同的配置、构建或启动参数

那么,Erlang emulator info语句是什么意思?

[异步线程:0] 可供加载的驱动程序使用的异步线程池的大小。这允许在与beam vm分离的内核线程中执行阻塞系统调用。使用命令开关+A N调整池的大小

[重债穷国] 支持erlang源代码和字节码的本机编译。通常对数字运算代码非常有用。IO绑定的代码在字节码解释器上运行良好

[内核轮询:false] 旧的select2和poll2系统调用用于接收通知,告知某些文件描述符已准备好取消阻止写入或读取。它们不能很好地扩展到大量打开的文件描述符。现代操作系统有替代接口,linux有epoll,freebsd有kqueue。使用命令开关+K true启用自Erlang起,全套版本字符串标记为:

[64位] BEAM emulator是为了充分利用64位CPU而构建的

[异步线程:10] 这是指Erlang emulator的异步线程池中的线程数,它或多或少地告诉您,在emulator暂停之前,有多少阻塞的系统调用可以分拆到后台线程中

尽管当前默认值为10,但多年来默认值为0,这意味着所有系统调用都在每个Erlang emulator线程中同步运行。当系统调用被阻止时,它会停止该Erlang emulator线程的运行,直到系统调用完成。当前较小的默认值允许仿真器在系统调用阻塞其中一个异步I/O线程时尝试关闭并执行其他操作

您可以使用+A选项将默认值更改为Erlang运行时。e、 g.erl+A 50如果您要更改此设置,请注意您的结果将取决于您的特定系统和工作负载。过高的值可能会影响性能,因为它会导致系统在非常繁忙时尝试在后台执行许多操作,这只会使系统更加繁忙。在某些工作负载上,使用erl+A 0禁用该功能可能是最佳选择

[调试编译] 仅当您特意构建一个备用的BEAM仿真器,并将编译器选项设置为使生成的可执行文件更易于调试时,才会出现这种情况,就像使用或类似工具一样。您还必须以特殊方式运行此备用波束模拟器

Erlang BEAM仿真器通常是为提高速度而构建的,这通常会使调试器的工作更加困难。如果您正在开发下一个版本的BEAM emulator,您可能会发现在优化工作时运行它的特殊调试版本很有帮助

要启用此模式,请在Erlang源代码树下运行configure后,将cd插入Erlang源代码树下的erts/emulator中,然后键入类似于ERL_TOP=../。。makeflavor=smp调试。然后,要运行新的可调试BEAM emulator,必须在构建Erlang/OTP系统的其余部分之后,从Erlang源代码树的顶层运行bin/cerl-debug

有关此主题的详细信息,请参阅

[ds:1:1:1] 从ERTS 9.0开始,如果您使用SMP支持构建了BEAM emulator,则应该始终出现这种情况。它指的是功能。这些值描述了此系统上的功能配置

这个特性是在Erlang19.0中引入的,最初是作为一个实验特性,在SMP构建中默认情况下并不像在Erlang20.0中那样编译

[dtrace] 如果您将-with dynamic trace=dtrace传递到配置脚本以启用R15B01中添加的实验检测功能,则会显示此消息。此功能仅适用于OS X、Solaris和FreeBSD。它将来可能在其他平台上工作。请参阅下面的[systemtap],了解同时为Linux系统添加的替代方案

[帧指针] 这是上述[debug compiled]选项的特例,只是它只禁用了。在上面的命令中使用frmptr而不是debug来启用此模式

[重债穷国] emulator是在启用该功能的情况下编译的,该功能是一个用于Erlang的动态本机代码编译器。它只适用于Erlang支持的最流行的CPU类型,而且它不适用于所有配置,即使是在这些CPU上,这就是为什么它是可选的

[指令计数] 如果在构建过程中定义ERTS_操作码_计数器_支持,则会出现此消息,从而启用BEAM操作码cou 这一特性可能对那些分析波束模拟器性能的人有用

[内核轮询:false] Erlang emulator代码知道几种不同的方法来询问操作系统的网络堆栈哪些文件描述符和套接字可用于I/O。唯一一种几乎在任何地方都能工作的方法是旧的BSD select调用,由于其设计,该调用相对较慢,除此之外还有其他可伸缩性问题。因此,大多数系统都有一个或多个更快、更具可扩展性的替换,例如kqueue、epoll等,但它们都不受任何地方的支持。当emulator启动消息在这里显示false时,可能意味着内核轮询不可用,或者内核轮询不可用,但您没有将+K true传递给erl

[锁检查] 如果您通过了配置脚本的-启用锁定检查,则会显示

[锁计数] 如果向配置脚本传递了-enable lock counter,则会显示

[lttng] 如果将-with dynamic trace=lttng传递给配置脚本以启用对Linux跟踪框架的支持,则会出现此消息

[已编译] 当您运行Erlang BEAM emulator的特殊感知版本时,会出现这种情况。 这些指令与上面的[debug compiled]部分中的指令相同,只是在命令中使用purify而不是debug

[共享保存] 如果将-enable sharing-preserving传递给configure脚本,则会出现这种情况,这会导致将它们展开,而不是重新创建它们。此选项使您的程序更快还是更慢取决于程序的详细信息,因此为什么不在默认版本中设置它

[smp:2:2] [smp:2]标记在Erlang R13中更改为这种格式,这意味着两个调度器都在线。如果你说erl+S1,它说的是[smp:1:1]。您可以使用erlang:system_flagschedulers_online,N在运行时使调度程序脱机,其中N可以是介于1和检测到的内核数之间的任意值(包括1)

[来源]或[来源版本] 这意味着某些第三方可能是您,可能是您的OS发行版的软件包维护人员,可能是您的系统管理员从源代码构建了Erlang。另一种选择是从Erlang.org下载官方二进制版本

如果从中构建Erlang,此消息将更改为类似于[source-8acc644]的内容,其中十六进制数是存储库当前值的一个片段,这允许您查看构建给定可执行文件的源代码的确切版本

[系统点击] 如果您将-with dynamic trace=systemtap传递到配置脚本,则会出现此消息。这是此配置选项的=dtrace值的替代值,在Linux上使用提供基本相同的功能,因为dtrace在Linux上通常不可用。见上文[dtrace]

[类型断言] 在erts/emulator/beam/erl_term.h中取消对ET_调试行的注释时出现,以启用对所有特定类型数据访问的运行时检查。默认情况下未启用,因为它会降低仿真程序的速度

[瓦尔格林汇编] 当您运行Erlang BEAM emulator的特殊感知版本时,会出现这种情况。 除了在命令中使用valgrind而不是debug之外,这些指令与上面的[debug compiled]部分中的指令相同

此列表来自Erlang OTP源代码树中的erts/emulator/beam/erl_bif_info.c。请参阅文件顶部附近的erts_系统_版本定义

过时标签:

在R14中添加了针对64位版本的BEAM emulator的[64位半字]优化,然后在19.0中删除了该优化,未作解释。这也消除了看到[no-c-stack-objects]标记的可能性,该标记与半字仿真器关联

[rq:2]标记引用了一个运行队列系统,该系统旨在提高Erlang BEAM emulator的SMP构建中的可伸缩性。在R13B中添加,在R15B中替换为

R15B02中删除了[hybrid heap]和[incremental GC]标记以及相关功能,这主要是因为它们被删除了