¡ B I E N V E N I D O S !
M Á Q U I N A V I R T U A L D E E R L A N G
1
A L I A S N O R B E R T O . O R T I G O Z A @ H I P H O O X
Slide 2
Slide 2 text
Objetivo
• Entender los principales conceptos detrás de
la Máquina Virtual de Erlang (BEAM)
• Entender algunas de las diferencias entre la
BEAM y otras máquinas virtuales (JVM, V8)
Slide 3
Slide 3 text
H I S T O R I A
• Creada por Joe Armstrong, Robert Virding y Mike
Williams
• Primera versión, 1986 (Interprete de Prolog)
• Segunda versión, 1988 (JAM)
• Tercera versión, 1993 (BEAM)
• Versión actual 18.0
3
Slide 4
Slide 4 text
¿ Q U É I N C L U Y E L A B E A M ?
• Máquina virtual
• Mecanismos para comunicarse con el mundo exterior
• Ports y NIFs
• Funciones inter construidas (BIFs)
• No JIT
4
Slide 5
Slide 5 text
¿ P O R Q U É U S A R L A B E A M ?
• Alta disponibilidad
• Tolerancia a Fallos
• Sistemas distribuidos
• Escalabilidad
5
Slide 6
Slide 6 text
H O Y VA M O S A V E R
• Procesos
• Schedulers
• Manejo de Memoria
6
Slide 7
Slide 7 text
Procesos
Slide 8
Slide 8 text
Para empezar, vamos a
hablar de un sistema que
es tolerante a fallos,
distribuido, escalable y
tiene alta disponibilidad.
Slide 9
Slide 9 text
Internet
Slide 10
Slide 10 text
¿Por qué Internet tiene
estas propiedades?
Slide 11
Slide 11 text
11
Internet
Computadora
B
Computadora
C
Mensajes
Computadora
A
Slide 12
Slide 12 text
• Cada computadora está aislada de las
demás.
• No comparten memoria u otros recursos.
12
Slide 13
Slide 13 text
13
Internet
Computadora
B
Computadora
C
Mensajes
Computadora
A
Slide 14
Slide 14 text
14
Computadora A
Proceso B
Java App
Proceso C
Node.js App
Mensajes
Proceso A
Erlang App
Slide 15
Slide 15 text
• Cada programa está aislado dentro de un
proceso del Sistema Operativo.
• No comparten memoria u otros recursos.
15
Slide 16
Slide 16 text
16
Computadora A
Proceso B
Java App
Proceso C
Erlang App
Mensajes
Proceso A
Node.js App
Slide 17
Slide 17 text
17
Proceso A
Node.js
Tu código
Slide 18
Slide 18 text
☹
• Los Módulos, Clases, Paquetes no están
aislados.
• Todos ellos comparten la misma memoria
y otros recursos. Si algo sale mal todo el
proceso del SO se muere.
18
Slide 19
Slide 19 text
¿Cómo debería de ser?
Slide 20
Slide 20 text
20
Computadora A
Proceso B
Node.js App
Proceso C
Java App
Mensajes
Proceso A
Erlang App
Slide 21
Slide 21 text
21
Erlang App
Funcionalidad
A
Funcionalidad
B
Funcionalidad
C
Mensajes
28
Proceso del SO
BEAM
Proceso
de Erlang
Proceso
de Erlang
Proceso
de Erlang
Proceso
de Erlang
Proceso
de Erlang
Proceso
de Erlang
Proceso
de Erlang
Proceso
de Erlang
Proceso
de Erlang
Proceso
de Erlang Proceso
de Erlang
Proceso
de Erlang
Proceso
de Erlang
Proceso
de Erlang
Proceso
de Erlang
Proceso
de Erlang
Proceso
de Erlang
Proceso
de Erlang
Proceso
de Erlang
Proceso
de Erlang
Slide 29
Slide 29 text
S C H E D U L E R S
• La BEAM crea un Thread del SO por cada core en la
máquina.
• Un Scheduler utiliza un Thread del SO.
• Cada Scheduler tiene colas de ejecución.
• Cada scheduler maneja su propia memoria.
29
Slide 30
Slide 30 text
M Á Q U I N A V I RT U A L
S C H E D U L E R S C H E D U L E R S C H E D U L E R S C H E D U L E R
C P U
O S
T H R E A D
C P U
O S
T H R E A D
C P U
O S
T H R E A D
C P U
O S
T H R E A D
Proceso
Proceso
Proceso
Proceso
Proceso
Proceso
Proceso
Proceso
Proceso
Proceso
Proceso
Proceso
Proceso
Proceso
Slide 31
Slide 31 text
S C H E D U L E R S
• Hacen balanceo de carga.
• Controlan la ejecución de los procesos
• Cada proceso es re encolado para ejecución
después de 2000 reducciones (Un proceso no
puede apropiarse del procesador y bloquear otros
procesos)
31
Slide 32
Slide 32 text
Memoria
Slide 33
Slide 33 text
Erlang es muy
eficiente
Slide 34
Slide 34 text
Process
Slide 35
Slide 35 text
M E M O R I A D E N T R O D E L A B E A M
• Heap del proceso
• Tablas de ETS
• Tablas de Atomos (tamaño fijo)
• Espacio para Binarios Grandes (> 64 bytes, Conteo de
referencias)
• Código
• …
35
Slide 36
Slide 36 text
H E A P D E L P R O C E S O
• Permite recolectar cada proceso de forma
independiente.
• El Colector de basura es más eficiente.
• El Colector de basura es más simple (No es necesario
implementar un colector en tiempo real: Azul)
• Disminuye la necesidad de sincronización entre
threads (Esto es mejor entre mayor sea al número de
procesadores)
36
Slide 37
Slide 37 text
C O L E C T O R D E B A S U R A
• Copying Collector
• Generacional
• 2 espacios o zonas: nueva y vieja
• Datos nuevos son mantenidos en el espacio nuevo
por un número determinado de colecciones, antes
de pasar a la zona vieja.
37
Slide 38
Slide 38 text
Conclusiones
Slide 39
Slide 39 text
El diseño de la BEAM es
diferente a otras VMs
conocidas.
Slide 40
Slide 40 text
Su diseño está enfocado
a aislamiento, tolerancia
a fallos, baja latencia y
alta disponibilidad
Slide 41
Slide 41 text
Erlang no es
esencialmente difícil de
aprender.
Slide 42
Slide 42 text
Los conceptos no son
tan diferentes como
inicialmente parecen.