Stu*_*son 30 erlang emulation erl
当我启动我的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>
Run Code Online (Sandbox Code Playgroud)
其中一些我可以猜到,可能是准确的,但有些意味着'这里是魔术'.
Erlang (BEAM) emulator version 5.6.5:版本,当然[source]:模拟器是从源代码编译的?[smp:2]:检测到两个CPU核心并且可用[async-threads:0]:[hipe]:?[kernel-poll:false]:?我也想知道是否有其他[foo]项目可能弹出不同的配置,构建或启动参数.
那么,Erlang模拟器信息语句意味着什么呢?
War*_*ung 59
从Erlang 20.0开始,完整的版本字符串标记集是:
BEAM仿真器旨在充分利用64位CPU.
这是指Erlang模拟器的异步线程池中的线程数,它或多或少地告诉您在模拟器停止之前可以将多少阻塞的系统调用分离到后台线程中.
虽然它目前默认为10,默认为0多年,这意味着所有的系统调用分别二郎模拟器线程中同步运行.当系统调用被阻止时,它会阻止Erlang仿真器线程运行直到系统调用完成.当前的小默认值允许模拟器在系统调用阻止其中一个异步I/O线程时尝试关闭并执行其他操作.
您可以使用+AErlang运行时选项更改默认值.(例如erl +A 50)如果您要更改此设置,请注意您的结果将取决于您的特定系统和工作负载.太高的值可能会损害性能,因为当系统非常繁忙时,它会导致系统在后台尝试做很多事情,这只会让它更加忙碌.在某些工作负载上,禁用该功能erl +A 0可能是最佳选择.
只有在您不遗余力地构建备用BEAM仿真器并且编译器选项设置为使得生成的可执行文件更易于调试(如gdb或类似)时,才会出现这种情况.您还必须以特殊方式运行此备用BEAM仿真器.
Erlang BEAM仿真器通常是为速度而构建的,这通常会使调试器的工作更加困难.如果您正在开发下一版本的BEAM仿真器,您可能会发现在优化工作时运行它的特殊调试版本会很有帮助.
要启用此模式,在运行它之后cd进入erts/emulatorErlang源代码树下 configure,然后键入类似的内容ERL_TOP=../.. make FLAVOR=smp debug.然后,要运行新的可调试BEAM仿真器,必须bin/cerl -debug在构建Erlang/OTP系统的其余部分之后从Erlang源代码树的顶层运行.
有关此主题的更多信息,请参见如何构建启用调试的Erlang RunTime系统.
从ERTS 9.0开始,如果您构建了具有SMP支持的BEAM仿真器,则应始终显示此内容.它指的是" 脏调度程序 "功能.这些值描述了此系统上功能的配置.
这个功能是在Erlang 19.0中引入的,最初是作为一个实验性功能,默认情况下在SMP构建中没有像在Erlang 20.0中那样编译.
如果您传递--with-dynamic-trace=dtrace给configure脚本以启用R15B01中添加的实验性DTrace检测功能,则会出现.此功能仅适用于OS X,Solaris和FreeBSD.它可能在将来适用于其他平台.有关Linux系统同时添加的替代方法,请参阅下面的[systemtap].
这是上面[debug-compiled]选项的一个特例,除了它只禁用帧指针优化.使用frmptr而不是debug在上面的命令中启用此模式.
模拟器是在启用HiPE功能的情况下编译的,这是一个用于Erlang的动态本机代码编译器.它只适用于Erlang支持的最流行的CPU类型,即使在那些CPU上也不能用于所有配置,这就是它可选的原因.
如果您ERTS_OPCODE_COUNTER_SUPPORT在构建期间定义,则会出现,这将启用BEAM操作码计数功能,可能对那些分析BEAM仿真器性能有用.
Erlang仿真器代码知道几种不同的方式来询问OS的网络堆栈,哪一组文件描述符和套接字可用于I/O. 唯一可以在各处工作的是旧的BSD select()调用,由于其设计而相对较慢,并且还存在其他可扩展性问题.因此,大多数系统具有一个或多个更快且更具可扩展性的替换 - 例如,kqueue epoll()等 - 但是它们中的任何一个都不受支持.当模拟器启动消息false在此处显示时,它可能意味着内核轮询不可用或者它是,但您没有传递+K true给它erl.
如果您传递--enable-lock-check给configure脚本,则会出现.
如果您传递--enable-lock-counter给configure脚本,则会出现.
如果您传递--with-dynamic-trace=lttng给configure脚本以启用对Linux的跟踪框架LTTNG的支持,则会出现此问题.
当您运行特殊的Purify -aware版本的Erlang BEAM仿真器时,会出现此问题.这些说明与上面[debug-compiled]部分中的说明相同,只是您purify在命令中使用而不是debug.
如果您传递--enable-sharing-preserving给configure脚本,则会出现这种情况,这会导致在节点内共享不可变项而不是展平并重新创建它们.此选项是使程序更快还是更慢取决于程序的详细信息,因此它未在默认构建中设置.
在[SMP:2]标签变更为这种格式二郎R13,这意味着2个调度,这两者都是在网上.如果你说"erl + S1",它会改为[smp:1:1].您可以在运行时使用erlang:schedu_flag(schedulers_online,N)使调度程序脱机,其中N可以是介于1和检测到的核心数之间的任何值.
这意味着一些第三方(也许你,也许是你的OS发行版的软件包维护者,也许是你的系统管理员)从源代码构建了Erlang.另一种方法是从Erlang.org下载官方二进制版本.
如果你从Git存储库构建Erlang ,这个消息会改为[source-8acc644],其中十六进制数是存储库当前Git哈希的一个片段,它允许你查看构建一个源的确切版本的源代码.可执行文件.
如果您传递--with-dynamic-trace=systemtap给configure脚本,则会出现.这是为了在一个替代=dtrace该配置的选项值,基本上提供在Linux上使用相同的功能的SystemTap,由于DTrace是通常不用于Linux.见上面的[dtrace].
取消注释该ET_DEBUG行时出现erts/emulator/beam/erl_term.h,启用运行时检查所有特定于类型的数据访问.默认情况下不启用,因为它会降低模拟器的速度.
当您运行特殊的Valgrind -aware版本的Erlang BEAM仿真器时会出现这种情况.这些说明与上面[debug-compiled]部分中的说明相同,只是您valgrind在命令中使用而不是debug.
(此列表来自erts/emulator/beam/erl_bif_info.cErlang OTP源代码树.请参阅erts_system_version文件顶部附近的定义.)
过时的标签:
的[64位半字]优化为64位构建BEAM仿真器在R14中的溶液,然后在没有说明在19.0去除.这也消除了查看与半字仿真器关联的[no-c-stack-objects]标记的可能性.
的[RQ:2]被称为旨在SMP改善可扩展性的运行队列系统标记构建的Erlang BEAM仿真器.在R13B中添加,它在R15B中被更好的解决方案所取代.
在[混合堆]和[增量GC]标签和相关特征R15B02被拆除主要是因为他们未能experiements.
Chr*_*ian 24
可供加载的驱动程序使用的异步线程池的大小.这允许阻止系统调用在来自波束vm的单独内核线程中执行.使用命令开关+A N调整池的大小.
支持本地编译erlang源和字节码.趋向于主要用于数字运算代码.IO绑定代码在字节码解释器上运行良好.
旧的select(2)和poll(2)系统调用接收通知,即某些文件描述符已准备好解锁写入或读取.它们不能很好地扩展到大量的打开文件描述符.现代操作系统有替代接口,linux有epoll,freebsd有kqueue.使用命令开关启用+K true
| 归档时间: |
|
| 查看次数: |
5637 次 |
| 最近记录: |