- 浏览: 982289 次
- 性别:
- 来自: 广州
最新评论
-
qingchuwudi:
有用,非常感谢!
erlang进程的优先级 -
zfjdiamond:
你好 这条命令 在那里输入??
你们有yum 我有LuaRocks -
simsunny22:
这个是在linux下运行的吧,在window下怎么运行escr ...
escript的高级特性 -
mozhenghua:
http://www.erlang.org/doc/apps/ ...
mnesia 分布协调的几个细节 -
fxltsbl:
A new record of 108000 HTTP req ...
Haproxy 1.4-dev2: barrier of 100k HTTP req/s crossed
前篇文章http://mryufeng.iteye.com/blog/428845 讲述了如何启用erlang hipe支持,但是用户程序大量依赖的标准库如stdlib, kernel等默认都不是native模式的, 所以我们的程序虽然启用了hipe,但是只是部分启用了。用oprofile等工具可以看到我们的程序还是在process_main(虚拟机的代码解释在这里)里面打转。 我们来个极致的,通通hipe化。
有2个方案可以解决:
1. 在编译otp_src的时候 export ERL_COMPILE_FLAGS='+native +"{hipe, [o3]}"' 但是这个方案有个问题就是
native方式是和beam的模式有关的 如beam和beam.smp它的代码是不同的,但是所有的beam又公用一套库,这样只能舍弃一个了。所以这个方案就比较麻烦。
# erl
Erlang R13B01 (erts-5.7.2) [source] [64-bit] [smp:8:8] [rq:8] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.7.2 (abort with ^G)
1> %%没问题
#erl -smp disable
<HiPE (v 3.7.2)> Warning: not loading native code for module fib: it was compiled for an incompatible runtime system; please regenerate native code for this runtime system
....
Erlang R13B01 (erts-5.7.2) [source] [64-bit] [rq:1] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.7.2 (abort with ^G)
1>
这个也可以通过修改 alias erl=erl -smp disable 以便欺骗编译器生成单cpu模式的beam
去绕过去
2. 动态编译, 等系统运行起来以后,动态把相关的模块编译一遍,这个思路看起来最简单。
我做了个原型 证明这样是可行的。。。
# cat hi.erl
-module(hi).
-export([do/0]).
do()->
[ turn(M, P)|| {M, P} <-code:all_loaded(), P=/=preloaded].
turn(M, P) ->
P1 = binary_to_list(iolist_to_binary(re:replace(filename:join(filename:dirname(P), filename:basename(P, ".beam")), "ebin", "src"))),
L = M:module_info(),
COpts = get_compile_options(L),
COpts1 = lists:foldr(fun({K, V}, Acc) when is_list(V) and is_integer(hd(V)) ->[{K, tr(V)}] ++ Acc ; (Skip, Acc) -> Acc ++ [Skip] end, [], COpts),
c:c(P1, COpts1 ++ [native, "{hipe, [o3]}"]).
tr(P)->
binary_to_list(iolist_to_binary(re:replace(P, "/net/isildur/ldisk/daily_build/otp_prebuild_r13b01.2009-06-07_20/", "/home/yufeng/"))). %%%这个地方要根据实际情况调整 具体的参看 m(lists).
get_compile_options(L) ->
case get_compile_info(L, options) of
{ok,Val} -> Val;
error -> []
end.
get_compile_info(L, Tag) ->
case lists:keysearch(compile, 1, L) of
{value, {compile, I}} ->
case lists:keysearch(Tag, 1, I) of
{value, {Tag, Val}} -> {ok,Val};
false -> error
end;
false -> error
end.
#erl -nostick
Erlang R13B01 (erts-5.7.2) [source] [64-bit] [smp:8:8] [rq:8] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.7.2 (abort with ^G)
1> mnesia:start(). %启动我们的应用程序
ok
2> hi:do().
[{ok,io},
{ok,erl_distribution},
{ok,edlin},
{ok,error_handler},
{ok,io_lib},
{ok,hi},
{ok,filename},
{ok,orddict},
{ok,gb_sets},
{ok,inet_db},
{ok,inet},
{ok,ordsets},
{ok,group},
{ok,gen},
{ok,erl_scan},
{ok,kernel},
{ok,erl_eval},
{ok,ets},
{ok,lists},
{ok,sets},
{ok,inet_udp},
{ok,code},
{ok,ram_file},
{ok,dict},
{ok,packages},
{ok,gen_event},
{ok,heart},
{ok,...},
{...}|...]
3> m(dict).
Module dict compiled: Date: August 23 2009, Time: 17.20
Compiler options: [{cwd,"/home/yufeng/otp_src_R13B01/lib/stdlib/src"},
{outdir,"/home/yufeng/otp_src_R13B01/lib/stdlib/src/../ebin"},
{i,"/home/yufeng/otp_src_R13B01/lib/stdlib/src/../include"},
{i,"/home/yufeng/otp_src_R13B01/lib/stdlib/src/../../kernel/include"},
debug_info,native,"{hipe, [o3]}"]
Object file: /home/yufeng/otp_src_R13B01/lib/stdlib/src/../ebin/dict.beam
。。。
看到了是用native模式编译的哦。。。
不过编译过程中有几个模块是有点问题, 得改进下。
有2个方案可以解决:
1. 在编译otp_src的时候 export ERL_COMPILE_FLAGS='+native +"{hipe, [o3]}"' 但是这个方案有个问题就是
native方式是和beam的模式有关的 如beam和beam.smp它的代码是不同的,但是所有的beam又公用一套库,这样只能舍弃一个了。所以这个方案就比较麻烦。
# erl
Erlang R13B01 (erts-5.7.2) [source] [64-bit] [smp:8:8] [rq:8] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.7.2 (abort with ^G)
1> %%没问题
#erl -smp disable
<HiPE (v 3.7.2)> Warning: not loading native code for module fib: it was compiled for an incompatible runtime system; please regenerate native code for this runtime system
....
Erlang R13B01 (erts-5.7.2) [source] [64-bit] [rq:1] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.7.2 (abort with ^G)
1>
这个也可以通过修改 alias erl=erl -smp disable 以便欺骗编译器生成单cpu模式的beam
去绕过去
2. 动态编译, 等系统运行起来以后,动态把相关的模块编译一遍,这个思路看起来最简单。
我做了个原型 证明这样是可行的。。。
# cat hi.erl
-module(hi).
-export([do/0]).
do()->
[ turn(M, P)|| {M, P} <-code:all_loaded(), P=/=preloaded].
turn(M, P) ->
P1 = binary_to_list(iolist_to_binary(re:replace(filename:join(filename:dirname(P), filename:basename(P, ".beam")), "ebin", "src"))),
L = M:module_info(),
COpts = get_compile_options(L),
COpts1 = lists:foldr(fun({K, V}, Acc) when is_list(V) and is_integer(hd(V)) ->[{K, tr(V)}] ++ Acc ; (Skip, Acc) -> Acc ++ [Skip] end, [], COpts),
c:c(P1, COpts1 ++ [native, "{hipe, [o3]}"]).
tr(P)->
binary_to_list(iolist_to_binary(re:replace(P, "/net/isildur/ldisk/daily_build/otp_prebuild_r13b01.2009-06-07_20/", "/home/yufeng/"))). %%%这个地方要根据实际情况调整 具体的参看 m(lists).
get_compile_options(L) ->
case get_compile_info(L, options) of
{ok,Val} -> Val;
error -> []
end.
get_compile_info(L, Tag) ->
case lists:keysearch(compile, 1, L) of
{value, {compile, I}} ->
case lists:keysearch(Tag, 1, I) of
{value, {Tag, Val}} -> {ok,Val};
false -> error
end;
false -> error
end.
#erl -nostick
Erlang R13B01 (erts-5.7.2) [source] [64-bit] [smp:8:8] [rq:8] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.7.2 (abort with ^G)
1> mnesia:start(). %启动我们的应用程序
ok
2> hi:do().
[{ok,io},
{ok,erl_distribution},
{ok,edlin},
{ok,error_handler},
{ok,io_lib},
{ok,hi},
{ok,filename},
{ok,orddict},
{ok,gb_sets},
{ok,inet_db},
{ok,inet},
{ok,ordsets},
{ok,group},
{ok,gen},
{ok,erl_scan},
{ok,kernel},
{ok,erl_eval},
{ok,ets},
{ok,lists},
{ok,sets},
{ok,inet_udp},
{ok,code},
{ok,ram_file},
{ok,dict},
{ok,packages},
{ok,gen_event},
{ok,heart},
{ok,...},
{...}|...]
3> m(dict).
Module dict compiled: Date: August 23 2009, Time: 17.20
Compiler options: [{cwd,"/home/yufeng/otp_src_R13B01/lib/stdlib/src"},
{outdir,"/home/yufeng/otp_src_R13B01/lib/stdlib/src/../ebin"},
{i,"/home/yufeng/otp_src_R13B01/lib/stdlib/src/../include"},
{i,"/home/yufeng/otp_src_R13B01/lib/stdlib/src/../../kernel/include"},
debug_info,native,"{hipe, [o3]}"]
Object file: /home/yufeng/otp_src_R13B01/lib/stdlib/src/../ebin/dict.beam
。。。
看到了是用native模式编译的哦。。。
不过编译过程中有几个模块是有点问题, 得改进下。
评论
7 楼
whrllm
2009-11-03
已经看懂了,呵呵,谢谢.
6 楼
whrllm
2009-11-03
请问一下
tr(P)->
binary_to_list(iolist_to_binary(re:replace(P, "/net/isildur/ldisk/daily_build/otp_prebuild_r13b01.2009-06-07_20/", "/home/yufeng/"))). %%%这个地方要根据实际情况调整 具体的参看 m(lists).
中的路径,主要是看m(lists)中的哪个路径啊? 谢谢
tr(P)->
binary_to_list(iolist_to_binary(re:replace(P, "/net/isildur/ldisk/daily_build/otp_prebuild_r13b01.2009-06-07_20/", "/home/yufeng/"))). %%%这个地方要根据实际情况调整 具体的参看 m(lists).
中的路径,主要是看m(lists)中的哪个路径啊? 谢谢
5 楼
whrllm
2009-11-03
哈哈,这招真的是太狠了,佩服.
正在使用老大的方式编译hipe.
好象在5.7.3上面运行 erl -smp disable hipe没有爆warning
linux:~ # erl -smp disable
Erlang R13B02 (erts-5.7.3) [source] [rq:1] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.7.3 (abort with ^G)
1>
正在使用老大的方式编译hipe.
好象在5.7.3上面运行 erl -smp disable hipe没有爆warning
linux:~ # erl -smp disable
Erlang R13B02 (erts-5.7.3) [source] [rq:1] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.7.3 (abort with ^G)
1>
4 楼
mryufeng
2009-09-20
hipe:c(Module) 更能解决问题。
3 楼
mryufeng
2009-08-23
这个操作 http://avindev.iteye.com/blog/82560
编译选项
c(test_list, [native,{hipe,[o3]}]).
R13B02 stdlib hipe before:
1> test_list:main().
Concat Duration 390ms
Flatten Duration 938ms
Append tail Duration 622ms
Append header Duration 85ms
R13B02 stdlib hipe after:
1> test_list:main().
Concat Duration 146ms
Flatten Duration 736ms
Append tail Duration 222ms
Append header Duration 53ms
编译选项
c(test_list, [native,{hipe,[o3]}]).
R13B02 stdlib hipe before:
1> test_list:main().
Concat Duration 390ms
Flatten Duration 938ms
Append tail Duration 622ms
Append header Duration 85ms
R13B02 stdlib hipe after:
1> test_list:main().
Concat Duration 146ms
Flatten Duration 736ms
Append tail Duration 222ms
Append header Duration 53ms
2 楼
mryufeng
2009-08-23
测试效果很好:
速度提高了百分之大几十!
速度提高了百分之大几十!
1 楼
mryufeng
2009-08-23
源码编译的时候用这招:
alias erl="erl -smp disable"
export ERLC_EMULATOR="erl -smp disable"
搞定native和emulator相关的问题。
it rocks!
alias erl="erl -smp disable"
export ERLC_EMULATOR="erl -smp disable"
搞定native和emulator相关的问题。
it rocks!
发表评论
-
OTP R14A今天发布了
2010-06-17 14:36 2677以下是这次发布的亮点,没有太大的性能改进, 主要是修理了很多B ... -
R14A实现了EEP31,添加了binary模块
2010-05-21 15:15 3030Erlang的binary数据结构非常强大,而且偏向底层,在作 ... -
如何查看节点的可用句柄数目和已用句柄数
2010-04-08 03:31 4814很多同学在使用erlang的过程中, 碰到了很奇怪的问题, 后 ... -
获取Erlang系统信息的代码片段
2010-04-06 21:49 3475从lib/megaco/src/tcp/megaco_tcp_ ... -
iolist跟list有什么区别?
2010-04-06 20:30 6529看到erlang-china.org上有个 ... -
erlang:send_after和erlang:start_timer的使用解释
2010-04-06 18:31 8386前段时间arksea 同学提出这个问题, 因为文档里面写的很不 ... -
Latest news from the Erlang/OTP team at Ericsson 2010
2010-04-05 19:23 2013参考Talk http://www.erlang-factor ... -
对try 异常 运行的疑问,为什么出现两种结果
2010-04-05 19:22 2842郎咸武<langxianzhe@163.com> ... -
Erlang ERTS Async基础设施
2010-03-19 00:03 2517其实Erts的Async做的很不错的, 相当的完备, 性能又高 ... -
CloudI 0.0.9 Released, A Cloud as an Interface
2010-03-09 22:32 2476基于Erlang的云平台 看了下代码 质量还是不错的 完成了不 ... -
Memory matters - even in Erlang (再次说明了了解内存如何工作的必要性)
2010-03-09 20:26 3439原文地址:http://www.lshift.net/blog ... -
Some simple examples of using Erlang’s XPath implementation
2010-03-08 23:30 2050原文地址 http://www.lshift.net/blog ... -
lcnt 环境搭建
2010-02-26 16:19 2614抄书:otp_doc_html_R13B04/lib/tool ... -
Erlang强大的代码重构工具 tidier
2010-02-25 16:22 2486Jan 29, 2010 We are very happy ... -
[Feb 24 2010] Erlang/OTP R13B04 has been released
2010-02-25 00:31 1387Erlang/OTP R13B04 has been rele ... -
R13B04 Installation
2010-01-28 10:28 1390R13B04后erlang的源码编译为了考虑移植性,就改变了编 ... -
Running tests
2010-01-19 14:51 1486R13B03以后 OTP的模块加入了大量的测试模块,这些模块都 ... -
R13B04在细化Binary heap
2010-01-14 15:11 1508从github otp的更新日志可以清楚的看到otp R13B ... -
R13B03 binary vheap有助减少binary内存压力
2009-11-29 16:07 1668R13B03 binary vheap有助减少binary内存 ... -
erl_nif 扩展erlang的另外一种方法
2009-11-26 01:02 3218我们知道扩展erl有2种方法, driver和port. 这2 ...
相关推荐
它们描述了我们要在整个Indy生态系统中标准化的重要主题()。 有关及其状态的最新列表,请参见。 请参阅以获取有关Hyperledger Indy与Hyperledger Aries的关系的注释。 HIPE适用于在Indy上构建的开发人员。 ...
高度(可伸缩)增量模式匹配引擎(HiPE)是支持并行模式匹配的工具。 当前,它已在基于EMF的通用图形和模型转换工具eMoflon中使用。 更新站点: ://hipe-devops.github.io/HiPE-Updatesite/hipe.updatesite/ 文档...
erlang-hipe-19.3.6.4-1.el7.x86_64.rpm
- Erlang 22.x版本不再支持HiPE(高级并发和并行执行环境),这可能会影响某些特定的应用性能。 **2. Erlang/OTP版本兼容性变化:** - 从RabbitMQ 3.7.2到3.7.25,最低支持的Erlang版本为21.3,最高为22.x。Erlang...
“分层图像去皮:灵活的比例空间过滤框架”的代码介绍分层图像组织的重要性已经在计算机视觉和图形学中的广泛应用中得到了证明。 与考虑空间整体性的图像分割不同,这项工作设计了一个现代框架,用于从比例空间角度...
Hipe 是基于 Webkit 的 Linux 图形层和窗口系统,使用嵌套的 HTML 标签,应用程序直接操作这些标签来创建 GUI。 它旨在提供与 X(在类 Unix 系统上)或 Quartz(在 Apple OS-X 上)等现有系统等效的功能,但使用 ...
Erlang是一种高级编程语言,特别为并发、分布式计算和实时系统设计,广泛应用于电信、银行、互联网服务等领域。Erlang21.2是该语言的一个特定版本,提供了许多新特性和改进,以增强其性能和稳定性。下面将详细介绍...
配置文件中需要指定安装目录、SSL支持、线程支持、内核poll支持、Hipe支持等参数。 在安装Erlang后,需要配置环境变量,包括设置ERLANG_HOME和PATH环境变量,以便后续使用。然后,需要测试是否生效,使用erl命令来...
Erlang同时支持的操作系统有linux,windows,unix等,可以说适用于主流的操作系统上,尤其是它支持多核的特性非常适合多核CPU,而分布式特性也可以很好融合各种分布式集群。 Erlang是一种通用的面向并发的编程语言,它...
2. **多核心SMP支持**:BEAM虚拟机能够充分利用多核处理器,通过SMP(Symmetric Multi-Processing)优化,实现并行计算,提高系统整体性能。 3. **透明分布式支持**:Erlang的分布式特性允许在多个节点间无缝通信,...
它是一个解释型语言,运行于虚拟机之上,但后来增加了乌普萨拉大学高性能Erlang计划(HiPE)开发的原生代码编译器,从R11B-4版本开始也支持脚本方式执行。 Erlang采用函数式、并行及分布式多重范型编程语言设计,...
`advanced.config.example`文件包含更高级和特定场景的配置选项,这些选项不推荐对新手开发者开放,因为错误的配置可能导致系统不稳定。通常,只有在需要自定义RabbitMQ行为时才会使用这个文件。以下是一些可能的...
Erlang是运行于虚拟机的解释性语言,但是现在也包含有乌普萨拉大学高性能Erlang计划(HiPE)开发的本地代码编译器,自R11B-4版本开始,Erlang也开始支持脚本式解释器。在编程范型上,Erlang属于多重范型编程语言,...
- **OTP库**:一个开放电信平台(Open Telecom Platform)的集合,提供了一组用于构建可扩展和可靠系统的工具和框架。 - **开源**:Erlang是根据MPL许可证发布的开源软件,鼓励社区参与其发展。 #### 在乌普萨拉...
RabbitMQ是一款开源的消息代理和队列服务器,基于AMQP 0-9-1标准协议开发,它支持多种消息发布模式,如简单模式、发布/订阅模式、路由模式等。本篇文档将详细介绍如何在CentOS环境下安装RabbitMQ。 #### 二、安装前...
RabbitMQ是一个开源的消息代理和队列服务器,用于在分布式系统中处理异步任务和消息传递。本报告主要分析了RabbitMQ内部消息处理路径、性能瓶颈、CPU使用情况、网络和磁盘使用情况,以及优化实验。 1.1 消息处理...
附件中,公司还对比了其品质治理系统与ISO 9001:2000标准,以及详细列出了公司的组织结构和各部门职责,进一步强化了公司品质管理体系的系统性和合规性。 总之,《公司RT纺织品质办法》是RT纺织公司品质管理的蓝图...
接着,从Erlang官网下载源码包,解压后配置安装路径,例如`./configure --prefix=/usr/local/erlang --with-ssl --enable-threads --enable-smp-support --enable-kernel-poll --enable-hipe --without-javac`。...
Erlang是运行于虚拟机的解释性语言,但是现在也包含有乌普萨拉大学高性能Erlang计划(HiPE)开发的本地代码编译器,自R11B-4版本开始,Erlang也开始支持脚本式解释器。在编程范型上,Erlang属于多重范型编程语言,...
Erlang是运行于虚拟机的解释性语言,但是现在也包含有乌普萨拉大学高性能Erlang计划(HiPE)开发的本地代码编译器,自R11B-4版本开始,Erlang也开始支持脚本式解释器。在编程范型上,Erlang属于多重范型编程语言,...