随笔分类 -  Erlang运行时代码分析

摘要:Erlang核心开发者Lukas Larsson在2014年3月份Erlang Factory上一个演讲的听写稿,详细介绍了Erlang内存体系的原理以及调优案例。 阅读全文
posted @ 2014-05-03 12:01 siyao 阅读(4837) 评论(1) 推荐(4) 编辑
摘要:本文是对BEAM虚拟机指令中和内存分配/解除分配相关指令的简单介绍。本文简要介绍了Erlang进程的堆栈模型以及虚拟机寄存器的应用,还介绍了这些指令中live参数的意义。 阅读全文
posted @ 2014-03-26 23:31 siyao 阅读(1927) 评论(2) 推荐(0) 编辑
摘要:本文简单分析了一下 Erlang R16 中新引入的数据结构 map。 阅读全文
posted @ 2014-03-09 23:25 siyao 阅读(10484) 评论(3) 推荐(1) 编辑
摘要:最近在做一些和 NIF 有关的事情,看到 OTP 团队发布的 17 rc1 引入了一个新的特性“脏调度器”,为的是解决 NIF 运行时间过长耗死调度器的问题。本文首先简单介绍脏调度器机制的用法,然后简要分析虚拟机中的实现原理,最后讨论了一下脏调度器的局限性。 阅读全文
posted @ 2014-02-15 23:54 siyao 阅读(4166) 评论(1) 推荐(2) 编辑
摘要:这是一篇流水账,记录了优化一个对 binary 操作的 Erlang 程序,然后发现真正瓶颈所在的过程。本文纯粹是流水账,没有什么结论,只是觉得 Erlang 很好玩:) 阅读全文
posted @ 2013-12-22 16:51 siyao 阅读(11310) 评论(4) 推荐(6) 编辑
摘要:在对 Erlang 虚拟机做 profiling 的时候,发现在 Vtune 中会出现源代码和汇编指令映射错误的现象。本文分析了这种映射错误的原因,那就是在源码文件中 #include 了另外的源码,所以编译器记录的是另外源码的行号。解决方法是手工将被 #include 的源码文件拷贝到被分析的源码中。 阅读全文
posted @ 2013-12-07 23:48 siyao 阅读(2232) 评论(0) 推荐(1) 编辑
摘要:本文简单探讨了一下 Erlang 调度器发生进程抢占的条件,然后通过示例展示 Erlang 在大部分情况下都是能做到软实时的,但是在某些极端情况下一些 misbehave 的进程会阻塞整个调度器。本文不纠细节,只是提供一个感性的认识。 阅读全文
posted @ 2013-12-01 22:47 siyao 阅读(2704) 评论(3) 推荐(0) 编辑
摘要:本系列介绍 Erlang 语言中使用的各种数据类型以及这些数据类型在 Erlang 虚拟机内部的表示和实现。了解数据类型的实现可以帮助大家在实际开发过程中正确选择数据类型,并且可以更好更高效地操作这些数据类型。本文对 Erlang 数据类型及实现的总结目前是最全面的,可以作为 Erlang 数据结构的参考手册。尽管我写的内容都试图在各种参考资料和 Erlang 虚拟机源代码中验证,但是难免会有理解错误或各种低级错误,希望大家指正,也希望能对 Erlang 爱好者们有帮助。第五部分:binary。 阅读全文
posted @ 2013-12-01 18:15 siyao 阅读(7812) 评论(7) 推荐(1) 编辑
摘要:本系列介绍 Erlang 语言中使用的各种数据类型以及这些数据类型在 Erlang 虚拟机内部的表示和实现。了解数据类型的实现可以帮助大家在实际开发过程中正确选择数据类型,并且可以更好更高效地操作这些数据类型。本文对 Erlang 数据类型及实现的总结目前是最全面的,可以作为 Erlang 数据结构的参考手册。尽管我写的内容都试图在各种参考资料和 Erlang 虚拟机源代码中验证,但是难免会有理解错误或各种低级错误,希望大家指正,也希望能对 Erlang 爱好者们有帮助。第四部分:boxed 对象。 阅读全文
posted @ 2013-12-01 18:12 siyao 阅读(4531) 评论(3) 推荐(0) 编辑
摘要:本系列介绍 Erlang 语言中使用的各种数据类型以及这些数据类型在 Erlang 虚拟机内部的表示和实现。了解数据类型的实现可以帮助大家在实际开发过程中正确选择数据类型,并且可以更好更高效地操作这些数据类型。本文对 Erlang 数据类型及实现的总结目前是最全面的,可以作为 Erlang 数据结构的参考手册。尽管我写的内容都试图在各种参考资料和 Erlang 虚拟机源代码中验证,但是难免会有理解错误或各种低级错误,希望大家指正,也希望能对 Erlang 爱好者们有帮助。第三部分:列表。 阅读全文
posted @ 2013-11-15 00:41 siyao 阅读(4704) 评论(7) 推荐(1) 编辑
摘要:本系列介绍 Erlang 语言中使用的各种数据类型以及这些数据类型在 Erlang 虚拟机内部的表示和实现。了解数据类型的实现可以帮助大家在实际开发过程中正确选择数据类型,并且可以更好更高效地操作这些数据类型。本文对 Erlang 数据类型及实现的总结目前是最全面的,可以作为 Erlang 数据结构的参考手册。尽管我写的内容都试图在各种参考资料和 Erlang 虚拟机源代码中验证,但是难免会有理解错误或各种低级错误,希望大家指正,也希望能对 Erlang 爱好者们有帮助。第二部分:Eterm 和立即数 阅读全文
posted @ 2013-11-15 00:40 siyao 阅读(5925) 评论(1) 推荐(1) 编辑
摘要:本系列介绍 Erlang 语言中使用的各种数据类型以及这些数据类型在 Erlang 虚拟机内部的表示和实现。了解数据类型的实现可以帮助大家在实际开发过程中正确选择数据类型,并且可以更好更高效地操作这些数据类型。本文对 Erlang 数据类型及实现的总结目前是最全面的,可以作为 Erlang 数据结构的参考手册。尽管我写的内容都试图在各种参考资料和 Erlang 虚拟机源代码中验证,但是难免会有理解错误或各种低级错误,希望大家指正,也希望能对 Erlang 爱好者们有帮助。第一部分:Erlang 数据类型回顾。 阅读全文
posted @ 2013-11-15 00:38 siyao 阅读(3609) 评论(1) 推荐(1) 编辑
摘要:本文首先介绍 Erlang 运行时中需要使用无锁队列的场合,然后介绍无锁队列的基本原理及会遇到的问题,接下来介绍 Erlang 运行时中如何通过“线程进度”机制解决无锁队列的问题,并介绍 Erlang 运行时中提供的一个通用无锁队列的实现及其在 ERTS 异步线程池中的应用。 阅读全文
posted @ 2013-10-30 00:08 siyao 阅读(4818) 评论(6) 推荐(3) 编辑
摘要:线程进度机制是Erts 5.9引入的一项性能改进,是Erlang运行时面向多核处理器的优化措施之一。线程进度机制可以跟踪所有受管的线程的进度,以此判断线程是否完成了某个进度点的执行。Erlang运行时中的系统阻塞功能被新的基于这项机制的系统阻塞功能替代。基于这项机制,Erlang运行时还实现了无锁的同步数据结构,未来Erlang运行时会越来越多地采用无锁数据结构。本文分析了这项机制的基本原理,详细分析了运行时中相关的数据结构和源代码,还分析了全新系统阻塞功能的实现。 阅读全文
posted @ 2013-01-27 00:54 siyao 阅读(4809) 评论(1) 推荐(5) 编辑