erlang emulator implementation
DESCRIPTION
Erlang Emulator ImplementationTRANSCRIPT
![Page 2: Erlang Emulator Implementation](https://reader031.vdocuments.site/reader031/viewer/2022020920/558c7963d8b42ac7248b45be/html5/thumbnails/2.jpg)
emulator 是什么
• Erlang vm + bif + 基础设施• 整个 erlang 系统的核心实现• 尺寸很小 适合于嵌入式
![Page 3: Erlang Emulator Implementation](https://reader031.vdocuments.site/reader031/viewer/2022020920/558c7963d8b42ac7248b45be/html5/thumbnails/3.jpg)
emulator 的特性
• 高性能• 分布式• 支持多核
![Page 4: Erlang Emulator Implementation](https://reader031.vdocuments.site/reader031/viewer/2022020920/558c7963d8b42ac7248b45be/html5/thumbnails/4.jpg)
emulator 的物理结构
• erlexec• escript• …
beamBeam.smpBeam.hybird
BeamDriverSysUtilts
UnixWindows…
tty_slram_file_drvzlib_drvudp_inettcp_inetEfileasync
![Page 5: Erlang Emulator Implementation](https://reader031.vdocuments.site/reader031/viewer/2022020920/558c7963d8b42ac7248b45be/html5/thumbnails/5.jpg)
emulator 的类型
BeamBeam.smpBeam.hybird
![Page 6: Erlang Emulator Implementation](https://reader031.vdocuments.site/reader031/viewer/2022020920/558c7963d8b42ac7248b45be/html5/thumbnails/6.jpg)
Emulator 的运行期
•单个 smp• 多个 smp 情况• erl_start->erl_init->process_main-
>schedule->sys_schedule
![Page 7: Erlang Emulator Implementation](https://reader031.vdocuments.site/reader031/viewer/2022020920/558c7963d8b42ac7248b45be/html5/thumbnails/7.jpg)
Beam 的物理模块
Beam 目录下的 .c .h这部份基本上是可移植的
![Page 8: Erlang Emulator Implementation](https://reader031.vdocuments.site/reader031/viewer/2022020920/558c7963d8b42ac7248b45be/html5/thumbnails/8.jpg)
Process
• Process 是调度的单元•轻量设计• 无耦合• 通过 message 交换信息
![Page 9: Erlang Emulator Implementation](https://reader031.vdocuments.site/reader031/viewer/2022020920/558c7963d8b42ac7248b45be/html5/thumbnails/9.jpg)
线程协调 multi_scheduling
• 可以按需开 N 个 scheduler• 随时停止所有线程进行维护
![Page 10: Erlang Emulator Implementation](https://reader031.vdocuments.site/reader031/viewer/2022020920/558c7963d8b42ac7248b45be/html5/thumbnails/10.jpg)
内存分配策略
• : 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
![Page 11: Erlang Emulator Implementation](https://reader031.vdocuments.site/reader031/viewer/2022020920/558c7963d8b42ac7248b45be/html5/thumbnails/11.jpg)
dist
• Pid(x,y,z)•节点间通讯 • 透明实现
![Page 12: Erlang Emulator Implementation](https://reader031.vdocuments.site/reader031/viewer/2022020920/558c7963d8b42ac7248b45be/html5/thumbnails/12.jpg)
erl_ext_dist.txt
• Dist 和 cnode 原理
![Page 13: Erlang Emulator Implementation](https://reader031.vdocuments.site/reader031/viewer/2022020920/558c7963d8b42ac7248b45be/html5/thumbnails/13.jpg)
Info 模块
•详细的系统运行器信息• erl_crash.dump 丰富的内容
![Page 14: Erlang Emulator Implementation](https://reader031.vdocuments.site/reader031/viewer/2022020920/558c7963d8b42ac7248b45be/html5/thumbnails/14.jpg)
Benchmark
• 用于测量系统运行器的情况
![Page 15: Erlang Emulator Implementation](https://reader031.vdocuments.site/reader031/viewer/2022020920/558c7963d8b42ac7248b45be/html5/thumbnails/15.jpg)
ets
• erlang term strorage• Hash 和 tree 实现• Match vm
![Page 16: Erlang Emulator Implementation](https://reader031.vdocuments.site/reader031/viewer/2022020920/558c7963d8b42ac7248b45be/html5/thumbnails/16.jpg)
对信号的处理
SIGINTSIGUSR1SIGUSR2
在单独线程处理信号
![Page 17: Erlang Emulator Implementation](https://reader031.vdocuments.site/reader031/viewer/2022020920/558c7963d8b42ac7248b45be/html5/thumbnails/17.jpg)
Eterm 数据结构
• 用指针来分辨类型• 内部格式和外部格式• 是 GC 回收
![Page 18: Erlang Emulator Implementation](https://reader031.vdocuments.site/reader031/viewer/2022020920/558c7963d8b42ac7248b45be/html5/thumbnails/18.jpg)
表格和代码生成器
• 某些表格在源码里面找不到• Make 的时候调用 utility 程序动态生成
的
![Page 19: Erlang Emulator Implementation](https://reader031.vdocuments.site/reader031/viewer/2022020920/558c7963d8b42ac7248b45be/html5/thumbnails/19.jpg)
垃圾回收
•针对 Process 的 Message 进行的回收•针对普通的 eterm 进行的回收
![Page 20: Erlang Emulator Implementation](https://reader031.vdocuments.site/reader031/viewer/2022020920/558c7963d8b42ac7248b45be/html5/thumbnails/20.jpg)
Port & Driver
• Port 是 erlang 程序自己操作的界面• Driver 是功能的实现• Io poller 是 port 和外部通讯的推动力
![Page 21: Erlang Emulator Implementation](https://reader031.vdocuments.site/reader031/viewer/2022020920/558c7963d8b42ac7248b45be/html5/thumbnails/21.jpg)
代码热部署原理
• Moudle • Driver dll
![Page 22: Erlang Emulator Implementation](https://reader031.vdocuments.site/reader031/viewer/2022020920/558c7963d8b42ac7248b45be/html5/thumbnails/22.jpg)
系统微调
• 命令行参数•环境变量• 运行期信息获取
![Page 23: Erlang Emulator Implementation](https://reader031.vdocuments.site/reader031/viewer/2022020920/558c7963d8b42ac7248b45be/html5/thumbnails/23.jpg)
结束
谢谢大家