Inside the Erlang VM Yu Feng 2008/12/20

Slides:



Advertisements
Similar presentations
迪士尼公主裙衫变化记. 《白雪公主和七个小孩人》 《白雪公主和七个小矮人》,是世界电影史上第一部长动 画片,也是迪士尼的第一部。《白雪公主》不仅为迪斯尼 带来了第一尊奥斯卡小人,更是拯救迪斯尼于水火的贵 人 —— 在经济大萧条的 1937 年的美国,《白雪公主》为迪 斯尼赚到了 850 万美元,这约等于现在的数亿美元!
Advertisements

© 2001 孟静制作 版权所有 第二章 CPU 管理和进程、线程管理 2.1 CPU 管理概述 2.2 进程管理 2.3 进程模型实例分析 :UNIX 早期版本的 CPU 管理 子系统 ( 进程模型 ) 2.4 处理机管理实例分析 (2):linux CPU 管理(进程 模型) 2.5 线程模型.
进 程. “ 程序 ” 和 “ 进程 ” 进程是 OS 对 CPU 执行的程序的运行过程的一种抽象。进程有自 己的生命周期,它由于任务的启动而创建,随着任务的完成(或 终止)而消亡,它所占用的资源也随着进程的终止而释放。 Linux 内核中通常把进程称为任务,每个进程主要通过一个称为进程描 述符(
校園資訊安全與防火牆架設 嘉義市育人國小 黃士騰.
基本概論 Basic concepts.
CHAPTER 9 虛擬記憶體管理 9.2 分頁需求 9.3 寫入時複製 9.4 分頁替換 9.5 欄的配置法則 9.6 輾轉現象
Foundations of Computer Science
建構 Beta電腦 – Fall /29/0.
眼睛的守護者.
第七章 操作系统接口 7.1 联机用户接口 7.2 Shell命令语言 7.3 系统调用 7.4 UNIX系统调用 7.5 图形用户接口.
Erlang全接触 褚霸 2010/07/20.
D、結構化技術 主要的結構化技術 結構化程式設計 (Structured Programming)
造成近視的原因 一、外在環境:佔百分之七十 1. 飲食失調: __偏食引起。 __甜食過多。 __酸鹼度不平衡。  人體是弱鹼性,攝取過多酸性食物,也會近視。
第二章 进程、线程与作业 多道程序设计 Multi-programming 进程的引入 Process 线程与轻进程
Chapter 2: Computer-System Structures计算机系统结构
營建自動化 -營建管理資訊化 授課老師:劉俊杰 副教授 中華民國89年9月27日.
伺服器網路檢測與管理 資訊中心網路管理組 王裕仁 2006/06/29.
第11讲 IDS技术(一).
计算机系统安全 第10章 常用攻击手段.
Socket.
基于WinSock的邮件系统 1 设计目标: 1.1 SMTP发送邮件服务器(c语言) 1.2 POP3接受邮件服务器(c语言)
Chapter 13 輸入/輸出系統 (I/O Systems)
珍惜时间 提高效率 初二1班
第5章 网络软件 开发技术 (一) 软件开发技术基础 计算机教学实验中心.
Operating System Concepts 作業系統原理 Chapter 3 行程觀念 (Process Concept)
余锋 2009/03/11 Erlang及其应用 余锋 2009/03/11
台灣大學計算機及資訊網路中心 教學研究組 張傑生
多线程编程基本概念 2008.
陳維魁 博士 儒林圖書公司 第七章 參數的傳遞 陳維魁 博士 儒林圖書公司.
臺東縣中小學資訊教育校園網路管理暨資訊安全防護計畫研習
Socket Programming in C
第4章 作業系統的介紹及操作.
第8章作業系統.
余锋 高级服务器设计和实现 ——技巧 余锋
P2P通信之 ——UDP穿越NAT方案的讨论
Operating System Concepts 作業系統原理 CHAPTER 2 系統結構 (System Structures)
驗證使用者 (與AD結合).
Chapter 3 行程觀念 (Process Concept)
TCP/IP基本原理 第九章 文件传输.
CH.8 硬體管理.
Inside the Erlang VM Yu Feng 2008/12/20
P2P简介 网络模式 C/S 模式 B/S 模式 P2P(peer to peer) FTP,POP3,SMTP HTTP
网络系统集成技术 访问控制列表 Access Control List 第七章.
/8/19 Erlang的高级特性和应用 /8/19.
Process management(程序管理)
移动系统中的Java虚拟机 徐伟刚.
Android手动测试实践 ——绮珠.
江西财经大学信息管理学院 《组网技术》课程组
NS2 – TCP/IP Simulation How-Wei Wu.
An Introduction to Cloud RDBMS
/8/19 Erlang的高级特性和应用 /8/19.
Erlang emulator 实现分析 2007/10.
Redis 客户端和工具集 潘海龙 平安健康互联网
實務操作練習題.
樹 2 Michael Tsai 2013/3/26.
感謝同學們在加分題建議. 我會好好研讀+反省~
Web Server 王宏瑾.
The Practical Issues of Sonar Image Processing
Network Application Programming(3rd Edition)
(第2版).
Operation System(OS).
操作系统的结构和硬件支持 第2章 操作系统的结构和硬件支持.
2019/5/3 JAVA Socket(UDP).
1.3操作系统提供的服务和用户接口 操作系统提供的用户接口 程序接口与系统调用 操作接口与系统程序
程序管理 蘇偉順助教.
第一章 操作系统引论 1.1 操作系统的目标和作用 1.2 操作系统的发展过程 1.3 操作系统的基本特性 1.4 操作系统的主要功能
Computer Science & Information Management
助教:廖啟盛 JAVA Socket(UDP) 助教:廖啟盛
计算机问题求解 – 论题 基本的数据结构 2018年05月09日.
Presentation transcript:

Inside the Erlang VM Yu Feng mryufeng@gmail.com 2008/12/20 blog: http://mryufeng.javaeye.com

高性能 多核心SMP的支持 透明分布的支持 轻量进程的支持 完善的监控信息 商业产品上经过时间的验证成熟 BEAM的优势 高性能 多核心SMP的支持 透明分布的支持 轻量进程的支持 完善的监控信息 商业产品上经过时间的验证成熟

为什么其他语言要移植到Erlang虚拟机 语言Reia会成功吗 作者看中什么? 框架 概念 成熟度 性能 模型

200K行C代码 几千行Erlang代码 同等的ACE框架 代码成熟度 尺寸很小 适合于嵌入式 1.5M 也适合做桌面程序 如p2p ERTS的代码规模 200K行C代码 几千行Erlang代码 同等的ACE框架 代码成熟度 尺寸很小 适合于嵌入式 1.5M 也适合做桌面程序 如p2p

ERTS的物理结构 erlexec escript … tty_sl ram_file_drvzlib_drv udp_inet tcp_inet efile async emulator driver sys utilts beam beam.smp beam.hybird erlexec escript … unix windows …

BEAM 分成不同版本的目的是提高性能 避免不必要的开销 beam.plain beam.smp beam.hybrid (目前支持的不好)

ERTS 启动过程 概念模拟操作系统 erl_exec 系统资源初始化 erl_first_process_otp opt_ring0 转入Erlang进程调度 开始执行init:boot

ERTS是个典型的网络服务器框架 IO处理 定时器处理 逻辑处理处理 kernel poll 如epoll kqueue timewheel process coroutine fiber smp

强大的PORT 仿照Unix的哲学: 一切都是文件 管道通讯类似CGI 支持可执行文件和动态库 fd_driver_entry vanilla_driver_entry spawn_driver_entry kernel poll支持大量的句柄 高度优化的kpoll {lazy_updates,true}, {pending_updates,0}, {batch_updates,false}, {concurrent_updates,true},

定时器 支持time jump detection and correction Erlang使用timer有3种方式: 语法层面的 receive ... after ... BIF: erlang:send_after(Time, Dest, Msg)    erlang:start_timer(Time, Dest, Msg) driver层面的。    int driver_set_timer(ErlDrvPort port, unsigned long time);  

参见EUC_SMP http://www.erlang.se/euc/08/euc_smp.pdf

线程 调度器 异步线程 driver发起的线程 精巧的锁 process_lock 快速的mutex 进程 PORT 管道通讯 多处理器利用技术 线程 调度器 异步线程 driver发起的线程 精巧的锁 process_lock 快速的mutex 进程 PORT 管道通讯

虚拟机部分 基于register JIT opcode Hipe native代码执行 效率高好多 语言速度评测中表现不俗 R12B大概200条 goto 和 case 优化 arithmetic, comparsions and boolean logic; manipulating strings, tuples and lists; stack and heap allocation and freeing; type tests for Erlang primitives (numbers, lists, process IDs, references, and so on);  jumps, structured exception handling, and calls and returns; sending messages and reading from the process' mailbox; waiting and timeouts

系统调度 如果没有活跃的进程 就sys_schdule阻塞在底层的IO中。 处理timer超时 处理子进程退出的情况 处理port_task事件,也就是port的IO事件 port_task独立调度 有自己的调度队列 如果没有活跃的进程 就sys_schdule阻塞在底层的IO中。 check_io 根据process的优先级选出一个进程来调度。 PRIORITY_MAX PRIORITY_HIGH  PRIORITY_NORMAL PRIORITY_LOW  PRIORITY_LEVELS 

数据结构 用地址来区分数据类型 pid <X, Y, Z> atom binary bitstring list tuple index表示 cache 传送的是index binary bitstring 非常高效 静态分析 opcode执行 非线性处理 list 单链表 表头加入 tuple 相当于数组

bitstring 非线性数据处理 和scatter read, gather write配对 静态分析 opcode实现bitstring操作 减少内存搬动 大大提高操作效率 对程序员透明

消息传递 高效 compat 内部格式 外部格式 erts/emulator/internal_doc/erl_ext_dist.txt 描述了erlang ext term的格式, epmd通讯的流程协议和流程 同时还要node 间通讯的协议 PID变换 pid {X,Y,Z} 在发到网络的时候发出去的格式是{sysname, Y, Z} 因为节点之前互相联系过 所以互相知道对方的sysname, 而且sysname在dist_entry里保存,当对端收到dec_pid的时候,用peer sysname 的查到在自己dist_entry里面的索引,然后用这个index 来构造新的pid,即 {index, Y, Z}。

内存分配器 每个CPU一个内存池 自动配置 有200多个alloc type private Heap, hybrid heap binary_alloc std_alloc ets_alloc fix_alloc eheap_alloc ll_alloc mseg_alloc sl_alloc temp_alloc sys_alloc

SIGCHLD 用户信号 异步处理和poll结合 信号处理 SIGCHLD 用户信号 异步处理和poll结合

驱动程序 完善的驱动程序开发接口 甚至可以多线程编程 文件驱动 inet_drv实现网络底层服务 如tcp udp sctp 异步操作 丰富的socket选项 支持常见的消息编解码 HTTP CDR ASN.1等 scatter read, gather write 消息接收变通提高效率

异步线程 完成驱动程序耗时操作 和调度器不相干

BIF trap机制 distribution trap functions dsend2_trap dsend3_trap dsend_nosuspend_trap dlink_trap dunlink_trap dmonitor_node_trap dgroup_leader_trap dexit_trap dmonitor_p_trap if the emulator wants to perform a distributed commandand%% a connection is not established to the actual node the following %% functions is called in order to set up the connection and then %% reactivate the command.

透明分布 需要net_kernel的协助 group_leader的设计和用途 可替换的传输介质 dist trap 透明的进行握手动作 inet_tcp_dist inet_ssl_dist dist trap 透明的进行握手动作 connect and handshake 名称登记和维护 local global 维护网络全联通 net tick nodeup nodedown erlsnoop 查看交互

beam加载和代码的热部署 支持代码从archive,inet,file里面读取 实现无盘工作站 最小系统需要的beam preload otp_ring0 init prim_inet prim_file zlib prim_zip erl_prim_loader erlang Erlang的热部署包括 beam(.beam)级别的和driver(.dll .so)级别的.

内置强大的shell CTRL+C 动态改变调度器的数目 crash dumps 对系统的干预 内置强大的shell CTRL+C 动态改变调度器的数目 crash dumps

语法层面的实现 link monitor 详尽的日志 完善的日志系统 error_logger port是进程隔离的 异常处理 语法层面的实现 link monitor 详尽的日志 完善的日志系统 error_logger port是进程隔离的

自省机制 trace system_flag system_info system_profile system_monitor erts_debug the erlang crash dumps

hash和tree match VM instruction 不参与GC ETS内存数据库 hash和tree match VM instruction 不参与GC

GC 不能保证real time,特别是root set比较大的时候 mark-and-sweep copying collector 分代算法 2代 old_heap heap

heart 心跳检查 自动加载 process crash不会影响整个虚拟机 代码可热升级 容易修复bug 回滚功能 稳定性 heart 心跳检查 自动加载 process crash不会影响整个虚拟机 代码可热升级 容易修复bug 回滚功能

Windows (smp支持的不好) Unix 关键语义屏蔽平台变化 平台移植 Windows (smp支持的不好) Unix 关键语义屏蔽平台变化

大量的参数可以通过环境变量来配置 进程数目 最大文件句柄数 Tips: 小心参数设置 大量的参数可以通过环境变量来配置 进程数目 最大文件句柄数

谢谢大家 Q & A