230 likes | 455 Views
Erlang emulator 实现分析. mryufeng@g mail.com 2007/10. emulator 是什么. Erlang vm + bif + 基 础设施 整个 erlang 系 统的核心实现 尺寸很小 适合于嵌入式. emulator 的特性. 高性能 分布式 支持多核. emulator 的物理 结构. tty_sl ram_file_drvzlib_drv udp_inet tcp_inet Efile async. Beam Driver Sys Utilts. beam Beam.smp
E N D
Erlang emulator 实现分析 mryufeng@gmail.com 2007/10
emulator是什么 Erlang vm + bif + 基础设施 整个erlang系统的核心实现 尺寸很小适合于嵌入式
emulator的特性 • 高性能 • 分布式 • 支持多核
emulator的物理结构 tty_sl ram_file_drvzlib_drv udp_inet tcp_inet Efile async Beam Driver Sys Utilts beam Beam.smp Beam.hybird erlexec escript … Unix Windows …
emulator的类型 Beam Beam.smp Beam.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
对信号的处理 SIGINT SIGUSR1 SIGUSR2 在单独线程处理信号
Eterm数据结构 用指针来分辨类型 内部格式和外部格式 是GC回收
表格和代码生成器 某些表格在源码里面找不到 Make的时候调用utility 程序动态生成的
垃圾回收 针对Process的Message 进行的回收 针对普通的eterm进行的回收
Port & Driver Port是erlang程序自己操作的界面 Driver是功能的实现 Io poller是 port和外部通讯的推动力
代码热部署原理 Moudle Driver dll
系统微调 命令行参数 环境变量 运行期信息获取
结束 谢谢大家