tipos - ¿Qué significan las declaraciones de información del emulador de Erlang?
tipos de trafico telefonico (2)
Cuando enciendo mi emulador Erlang, el primer bit tiene un montón de cosas informativas. (Ligeramente reformateado para su efecto.)
manoa:~ stu$ erl
Erlang (BEAM) emulator version 5.6.5
[source] [smp:2] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.6.5 (abort with ^G)
1>
Puedo adivinar algo de eso, probablemente exacto, pero parte de eso significa "aquí sea mágico".
-
Erlang (BEAM) emulator version 5.6.5
: la versión, por supuesto -
[source]
: el emulador fue compilado desde la fuente? -
[smp:2]
: dos núcleos de CPU detectados y disponibles -
[async-threads:0]
: ¿trabajos actualmente en ejecución? -
[hipe]
:? -
[kernel-poll:false]
:?
También me pregunto si hay otros elementos [foo]
que pueden aparecer con diferentes configuraciones, compilaciones o parámetros de inicio.
Entonces, ¿qué significan las declaraciones de información del emulador de Erlang?
[Async-hilos: 0]
Tamaño del grupo de subprocesos asíncronos disponible para que utilicen los controladores cargados. Esto permite que las llamadas de bloqueo se realicen en una hebra de kernel separada de la vm viga. Use el interruptor de comando +AN
para ajustar el tamaño de la piscina.
[hipe]
Soporte para compilación nativa de código fuente y bytecode erlang. Tiende a ser útil para el código de procesamiento de números. El código IO-bound funciona bien en el intérprete de bytecode.
[kernel-poll: falso]
Existen las llamadas antiguas del sistema select (2) y poll (2) para recibir una notificación de que algún descriptor de archivo está listo para desbloquear la escritura o la lectura. No se adaptan bien a un gran número de descriptores de archivos abiertos. Los sistemas operativos modernos tienen interfaces alternativas, linux tiene epoll, freebsd tiene kqueue. Habilitar con el interruptor de comando +K true
A partir de Erlang 20.0 , el conjunto completo de etiquetas de cadena de versión es:
[64 bits]
El emulador BEAM está diseñado para hacer un uso completo de una CPU de 64 bits.
[hilos asíncronos: 10]
Esto se refiere a la cantidad de subprocesos en el grupo de subprocesos asíncronos del emulador de Erlang, que más o menos le dice cuántas llamadas bloqueadas del sistema se pueden dividir en subprocesos de fondo antes de que el emulador se detenga.
Aunque actualmente tiene un valor predeterminado de 10, el valor predeterminado era 0 durante muchos años, lo que significaba que todas las llamadas del sistema se ejecutaban de forma síncrona dentro de cada subproceso del emulador de Erlang. Cuando se bloquea una llamada al sistema, se detiene la ejecución del subproceso del emulador Erlang hasta que finaliza la llamada al sistema. El pequeño valor predeterminado actual permite que el emulador intente apagarse y hacer otra cosa mientras una llamada del sistema está bloqueando uno de los subprocesos de E / S asíncronas.
Puede cambiar el valor predeterminado con la opción +A
para el tiempo de ejecución de Erlang. (por ejemplo, erl +A 50
) Si va a cambiar esto, tenga en cuenta que los resultados dependerán de su sistema y carga de trabajo en particular. Un valor demasiado alto podría afectar el rendimiento, ya que hace que el sistema intente hacer muchas cosas en segundo plano cuando el sistema está muy ocupado, lo que hace que esté aún más ocupado. En algunas cargas de trabajo, deshabilitar la función con erl +A 0
podría ser la mejor opción.
[debug-compiled]
Esto solo aparece si se sale de su camino para construir un emulador de BEAM alternativo con las opciones del compilador configuradas para hacer que el ejecutable resultante sea más fácil de depurar, como con gdb
o similar. También tienes que ejecutar este emulador BEAM alternativo de una manera especial.
El emulador Erlang BEAM normalmente se construye para la velocidad, lo que a menudo dificulta el trabajo del depurador. Si está trabajando en el desarrollo de la próxima versión del emulador BEAM, puede que le resulte útil ejecutar versiones especiales de depuración mientras refina su trabajo.
Para habilitar este modo, erts/emulator
cd
en erts/emulator
bajo el árbol de fuentes de Erlang después de ejecutar configure
en él, luego escriba algo como ERL_TOP=../.. make FLAVOR=smp debug
. Luego, para ejecutar su nuevo emulador BEAM de depuración, debe ejecutar bin/cerl -debug
desde el nivel superior del árbol fuente de Erlang, después de que se haya construido el resto del sistema Erlang / OTP.
Consulte Cómo construir un sistema Erlang RunTime con depuración habilitada para obtener más información sobre este tema.
[ds: 1: 1: 1]
A partir de ERTS 9.0, esto siempre debería aparecer si creó el emulador BEAM con soporte SMP. Se refiere a la característica " programadores sucios ". Los valores describen la configuración de la característica en este sistema.
Esta función se introdujo con Erlang 19.0, inicialmente como una función experimental que no se compiló de forma predeterminada en las compilaciones SMP como en Erlang 20.0.
[dtrace]
Aparece si pasó --with-dynamic-trace=dtrace
al script de configure
para habilitar la función experimental de instrumentación DTrace agregada en R15B01. Solo se espera que esta función funcione en OS X, Solaris y FreeBSD. Puede funcionar en otras plataformas en el futuro. Vea [systemtap] a continuación para una alternativa agregada al mismo tiempo para los sistemas Linux.
[puntero de marco]
Este es un caso especial de la opción [debug-compiled] anterior, excepto que solo desactiva la optimización del puntero del marco . Use frmptr
lugar de debug
en los comandos anteriores para habilitar este modo.
[hipe]
El emulador se compiló con la función HiPE habilitada, que es un compilador de código nativo sobre la marcha para Erlang. Solo funciona en los tipos de CPU más populares que admite Erlang y no funciona con todas las configuraciones, incluso en esas CPU, por lo que es opcional.
[contando instrucciones]
Aparece si define ERTS_OPCODE_COUNTER_SUPPORT
durante la compilación, que habilita una función de conteo de código de operación de BEAM, que probablemente sea útil para aquellos que crean perfiles del rendimiento del emulador de BEAM.
[kernel-poll: falso]
El código del emulador de Erlang conoce varias formas diferentes de preguntar a la pila de red del sistema operativo cuál de un conjunto de descriptores de archivos y sockets están disponibles para E / S. El único que funciona prácticamente en todas partes es la llamada BSD select()
que es relativamente lenta debido a su diseño y además tiene otros problemas de escalabilidad. Entonces, la mayoría de los sistemas tienen uno o más reemplazos más rápidos y escalables, por ejemplo, kqueue, epoll()
, etc., pero ninguno de ellos es compatible en todas partes. Cuando el mensaje de inicio del emulador dice false
aquí, puede significar que el sondeo del kernel no está disponible o que lo está pero no pasó +K true
a erl
.
[control de bloqueo]
Aparece si pasó --enable-lock-check
al script de configuración.
[bloqueo de conteo]
Aparece si ha pasado --enable-lock-counter
al script de configuración.
[lttng]
Aparece si pasó --with-dynamic-trace=lttng
al script de configure
para habilitar el soporte para LTTNG , un marco de rastreo para Linux.
[purificar-compilado]
Aparece cuando ejecuta una versión especial de Purify aware del emulador de Erlang BEAM. Las instrucciones son las mismas que en la sección [compilación de depuración] anterior, excepto que usa purify
en comandos en lugar de debug
.
[compartir preservando]
Esto aparece si pasa --enable-sharing-preserving
al script de configure
, lo que hace que se compartan términos inmutables dentro de un nodo en lugar de aplanarlos y recrearlos. Si esta opción hace que su programa sea más rápido o más lento depende de los detalles del programa, por lo tanto, no se configura en la compilación predeterminada.
[smp: 2: 2]
La etiqueta [smp: 2] cambió a este formato en Erlang R13, lo que significa 2 programadores, ambos en línea. Si dices "erl + S1", dice [smp: 1: 1] en su lugar. Puede poner los programadores fuera de línea en tiempo de ejecución con erlang: system_flag (schedulers_online, N), donde N puede ser cualquier cosa entre 1 y el número de núcleos detectados, inclusive.
[fuente] o [fuente-VERSIÓN]
Significa que un tercero (tal vez usted, tal vez el mantenedor de paquetes de su sistema operativo, tal vez su administrador de sistemas) construyó Erlang a partir del código fuente. La alternativa es descargar una versión binaria oficial de Erlang.org.
Si compila Erlang desde el repositorio Git , este mensaje cambia a algo como [source-8acc644] , donde el número hexadecimal es un fragmento del hash Git actual del repositorio, que le permite verificar la versión exacta de la fuente que creó un ejecutable dado.
[systemtap]
Aparece si ha pasado --with-dynamic-trace=systemtap
al script de configure
. Esta es una alternativa al valor =dtrace
para esta opción de configuración, que proporciona esencialmente la misma funcionalidad en Linux usando SystemTap , ya que DTrace normalmente no está disponible en Linux. Ver [dtrace] arriba.
[aserciones de tipo]
Aparece cuando ET_DEBUG
el comentario de la línea ET_DEBUG
en erts/emulator/beam/erl_term.h
, permitiendo la verificación en tiempo de ejecución de todos los accesos de datos específicos del tipo. No habilitado por defecto porque ralentiza el emulador.
[valgrind-compilado]
Esto aparece cuando ejecuta una versión especial de Valgrind -aware del emulador de Erlang BEAM. Las instrucciones son las mismas que en la sección [compilación de depuración] anterior, excepto que usa valgrind
en los comandos en lugar de debug
.
(Esta lista proviene de erts/emulator/beam/erl_bif_info.c
en el árbol de origen de Erlang OTP. Consulte la definición de erts_system_version
cerca de la parte superior del archivo.)
Etiquetas obsoletas :
La optimización de [media palabra de 64 bits] para compilaciones de 64 bits del emulador BEAM se agregó en R14, luego se eliminó sin explicación en 19.0. Esto también elimina la posibilidad de ver la etiqueta [no-c-stack-objects] , que estaba asociada con el emulador de media palabra.
La etiqueta [rq: 2] se refiere a un sistema de cola de ejecución destinado a mejorar la escalabilidad en las compilaciones SMP del emulador BEAM de Erlang. Agregado en R13B, fue reemplazado en R15B por una mejor solución .
Las etiquetas [híbrido-montón] y [GC incremental] y las características asociadas se eliminaron en R15B02 esencialmente porque eran experimentos fallidos .