erlang emulator implementation
Post on 26-Jun-2015
1.338 Views
Preview:
DESCRIPTION
TRANSCRIPT
Erlang emulator 实现分析
mryufeng@gmail.com2007/10
emulator 是什么
• Erlang vm + bif + 基础设施• 整个 erlang 系统的核心实现• 尺寸很小 适合于嵌入式
emulator 的特性
• 高性能• 分布式• 支持多核
emulator 的物理结构
• erlexec• escript• …
beamBeam.smpBeam.hybird
BeamDriverSysUtilts
UnixWindows…
tty_slram_file_drvzlib_drvudp_inettcp_inetEfileasync
emulator 的类型
BeamBeam.smpBeam.hybird
Emulator 的运行期
•单个 smp• 多个 smp 情况• erl_start->erl_init->process_main-
>schedule->sys_schedule
Beam 的物理模块
Beam 目录下的 .c .h这部份基本上是可移植的
Process
• Process 是调度的单元•轻量设计• 无耦合• 通过 message 交换信息
线程协调 multi_scheduling
• 可以按需开 N 个 scheduler• 随时停止所有线程进行维护
内存分配策略
• : binary_alloc • D: std_alloc • E: ets_alloc • F: fix_alloc • H: eheap_alloc • L: ll_alloc • M: mseg_alloc • S: sl_alloc • T: temp_alloc • Y: sys_alloc
dist
• Pid(x,y,z)•节点间通讯 • 透明实现
erl_ext_dist.txt
• Dist 和 cnode 原理
Info 模块
•详细的系统运行器信息• erl_crash.dump 丰富的内容
Benchmark
• 用于测量系统运行器的情况
ets
• erlang term strorage• Hash 和 tree 实现• Match vm
对信号的处理
SIGINTSIGUSR1SIGUSR2
在单独线程处理信号
Eterm 数据结构
• 用指针来分辨类型• 内部格式和外部格式• 是 GC 回收
表格和代码生成器
• 某些表格在源码里面找不到• Make 的时候调用 utility 程序动态生成
的
垃圾回收
•针对 Process 的 Message 进行的回收•针对普通的 eterm 进行的回收
Port & Driver
• Port 是 erlang 程序自己操作的界面• Driver 是功能的实现• Io poller 是 port 和外部通讯的推动力
代码热部署原理
• Moudle • Driver dll
系统微调
• 命令行参数•环境变量• 运行期信息获取
结束
谢谢大家
top related