Pergunta

Quando eu inicio meu emulador Erlang, o primeiro bit contém um monte de informações.(Ligeiramente reformatado para efeito.)

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> 

Algumas delas eu posso adivinhar, provavelmente precisas, mas algumas delas significam 'aqui seja mágica'.

  • Erlang (BEAM) emulator version 5.6.5:a versão, claro
  • [source]:o emulador foi compilado a partir do código-fonte?
  • [smp:2]:dois núcleos de CPU detectados e disponíveis
  • [async-threads:0]: trabalhos atualmente em execução?
  • [hipe]: ?
  • [kernel-poll:false]: ?

Também me pergunto se existem outros [foo] itens que podem aparecer com diferentes configurações, compilações ou parâmetros de inicialização.

Então, o que significam as declarações de informações do emulador Erlang?

Foi útil?

Solução

Async-Threads: 0

Tamanho do pool de threads assíncronos disponíveis para drivers carregados usar. Isso permite que o bloqueio de syscalls seja executado em um encadeamento de kernel separado da VM do feixe. Use o interruptor de comando +A N Para ajustar o tamanho da piscina.

Hipe

Suporte para a compilação nativa da fonte e bytecode Erlang. Tende a ser útil principalmente para o código de trituração de números. O código ligado a IO é bom no intérprete de bytecode.

Kernel-Poll: False

Existe o sistema antigo Select (2) e a pesquisa (2) exige a notificação de que algum descritor de arquivos está pronto para desbloquear escrita ou leitura. Eles não escalam bem para o alto número de descritores de arquivos abertos. Os sistemas operacionais modernos têm interfaces alternativas, o Linux possui o Epoll, o FreeBSD tem Kqueue. Habilitar com o comando de comando +K true

Outras dicas

A partir de Erlang 20.0, o conjunto completo de tags de string de versão é:

[64 bits]

O emulador BEAM foi desenvolvido para fazer uso total de uma CPU de 64 bits.

[threads assíncronos: 10]

Isso se refere ao número de threads no pool de threads assíncronos do emulador Erlang, que mais ou menos informa quantas chamadas de sistema bloqueadas podem ser desmembradas em threads de segundo plano antes que o emulador pare.

Embora atualmente o padrão seja 10, o padrão foi 0 por muitos anos, o que significava que todas as chamadas do sistema eram executadas de forma síncrona em cada thread do emulador Erlang.Quando uma chamada do sistema é bloqueada, ela interrompe a execução do thread do emulador Erlang até que a chamada do sistema seja concluída.O pequeno valor padrão atual permite que o emulador tente desligar e fazer outra coisa enquanto uma chamada do sistema está bloqueando um dos threads de E/S assíncronos.

Você pode alterar o valor padrão com o +A opção para o tempo de execução Erlang.(por exemplo. erl +A 50) Se você pretende alterar isso, lembre-se de que seus resultados dependerão de seu sistema e carga de trabalho específicos.Um valor muito alto pode prejudicar o desempenho, pois faz com que o sistema tente fazer muitas coisas em segundo plano quando está muito ocupado, o que só o torna ainda mais ocupado.Em algumas cargas de trabalho, desabilitar o recurso com erl +A 0 poderia ser a melhor opção.

[compilado de depuração]

Isso só aparece se você se esforçar para construir um emulador BEAM alternativo com as opções do compilador definidas para tornar o executável resultante mais fácil de depurar, como acontece com gdb ou similar.Você também deve executar este emulador BEAM alternativo de uma maneira especial.

O emulador Erlang BEAM normalmente é construído para ser rápido, o que muitas vezes dificulta o trabalho do depurador.Se você estiver trabalhando no desenvolvimento da próxima versão do emulador BEAM, poderá achar útil executar compilações de depuração especiais enquanto refina seu trabalho.

Para ativar este modo, cd em erts/emulator sob a árvore de origem Erlang depois de executar configure nele e digite algo como ERL_TOP=../.. make FLAVOR=smp debug.Então, para executar seu novo emulador BEAM depurável, você deve executar bin/cerl -debug do nível superior da árvore de origem Erlang, após o restante do sistema Erlang/OTP ter sido construído.

Ver Como construir um sistema Erlang RunTime habilitado para depuração para saber mais sobre este assunto.

[ds:1:1:1]

A partir do ERTS 9.0, isso sempre deverá aparecer se você construiu o emulador BEAM com suporte SMP.Refere-se ao "agendadores sujos" recurso.Os valores descrevem a configuração do recurso neste sistema.

Este recurso foi introduzido com Erlang 19.0, inicialmente como um recurso experimental que não foi compilado por padrão em compilações SMP como é no Erlang 20.0.

[dtrace]

Aparece se você passou --with-dynamic-trace=dtrace para o configure script para ativar o experimental DTrace recurso de instrumentação adicionado em R15B01.Espera-se que este recurso funcione apenas no OS X, Solaris e FreeBSD.Pode funcionar em outras plataformas no futuro.Ver [sistematoque] abaixo para uma alternativa adicionada ao mesmo tempo para sistemas Linux.

[ponteiro de quadro]

Este é um caso especial do [compilado de depuração] opção acima, exceto que ela apenas desativa o otimização de ponteiro de quadro.Usar frmptr em vez de debug nos comandos acima para ativar este modo.

[hipo]

O emulador foi compilado com o HiPE recurso habilitado, que é um compilador de código nativo dinâmico para Erlang.Ele funciona apenas nos tipos de CPU mais populares suportados por Erlang e não funciona com todas as configurações, mesmo nessas CPUs, por isso é opcional.

[contagem de instruções]

Aparece se você definir ERTS_OPCODE_COUNTER_SUPPORT durante a construção, que habilita um recurso de contagem de opcode BEAM, presumivelmente útil para aqueles que criam perfis de desempenho do emulador BEAM.

[enquete do kernel: falso]

O código do emulador Erlang conhece várias maneiras diferentes de perguntar à pilha de rede do sistema operacional quais de um conjunto de descritores de arquivos e soquetes estão disponíveis para E/S.O único que funciona praticamente em qualquer lugar é o antigo BSD select() chamada que é relativamente lenta devido ao seu design e também tem outros problemas de escalabilidade.Portanto, a maioria dos sistemas tem uma ou mais substituições mais rápidas e escaláveis ​​— por exemplo, kqueue, epoll(), etc.– mas nenhum deles é suportado em todos os lugares.Quando a mensagem de inicialização do emulador diz false aqui, pode significar que a pesquisa do kernel não está disponível ou que está, mas você não passou +K true para erl.

[verificação de bloqueio]

Aparece se você passou --enable-lock-check para o script de configuração.

[contagem de bloqueios]

Aparece se você passou --enable-lock-counter para o script de configuração.

[lttng]

Aparece se você passou --with-dynamic-trace=lttng para o configure script para ativar o suporte para LTTNG, uma estrutura de rastreamento para Linux.

[purificar-compilado]

Isso aparece quando você executa um especial Purificarversão -aware do emulador Erlang BEAM.As instruções são as mesmas do [compilado de depuração] seção acima, exceto que você usa purify em comandos em vez de debug.

[compartilhar-preservar]

Isso aparece se você passar --enable-sharing-preserving para o configure roteiro, o que faz com que compartilhar termos imutáveis ​​​​intra-nó em vez de achatá-los e recriá-los.Se esta opção torna seu programa mais rápido ou mais lento depende dos detalhes do programa, por isso ela não está definida na compilação padrão.

[smp:2:2]

O [smp:2] tag alterada para este formato em Erlang R13, significando 2 agendadores, ambos online.Se você disser "erl +S1", diz [smp:1:1] em vez de.Você pode colocar os agendadores offline em tempo de execução com erlang:system_flag(schedulers_online, N), onde N pode ser qualquer coisa entre 1 e o número de núcleos detectados, inclusive.

[fonte] ou [fonte-VERSÃO]

Isso significa que algum terceiro (talvez você, talvez o mantenedor do pacote da sua distribuição do sistema operacional, talvez o seu administrador de sistema) construiu o Erlang a partir do código-fonte.A alternativa é baixar uma versão binária oficial de Erlang.org.

Se você construir Erlang a partir de o repositório Git, esta mensagem muda para algo como [fonte-8acc644], onde o número hexadecimal é um fragmento do atual do repositório Hash Git, que permite verificar a versão exata da fonte que compilou um determinado executável.

[sistematoque]

Aparece se você passou --with-dynamic-trace=systemtap para o configure roteiro.Esta é uma alternativa ao =dtrace valor para esta opção de configuração, fornecendo essencialmente a mesma funcionalidade no Linux usando SystemTap, já que o DTrace normalmente não está disponível no Linux.Ver [dtrace] acima.

[afirmações de tipo]

Aparece quando você descomenta o ET_DEBUG linha em erts/emulator/beam/erl_term.h, permitindo a verificação em tempo de execução de todos os acessos a dados específicos do tipo.Não habilitado por padrão porque torna o emulador mais lento.

[valgrind-compilado]

Isso aparece quando você executa um especial Valgrindversão -aware do emulador Erlang BEAM.As instruções são as mesmas do [compilado de depuração] seção acima, exceto que você usa valgrind em comandos em vez de debug.


(Esta lista vem de erts/emulator/beam/erl_bif_info.c na árvore de origem Erlang OTP.Veja a definição de erts_system_version perto do topo do arquivo.)


Etiquetas obsoletas:

  • O [meia palavra de 64 bits] a otimização para compilações de 64 bits do emulador BEAM foi adicionada em R14 e removida sem explicação em 19.0.Isto também elimina a possibilidade de ver o [objetos sem pilha c] tag, que foi associada ao emulador de meia palavra.

  • O [rq:2] tag referia-se a um sistema de fila de execução destinado a melhorar a escalabilidade em compilações SMP do emulador Erlang BEAM.Adicionado no R13B, foi substituído no R15B por uma solução melhor.

  • O [pilha híbrida] e [GC incremental] tags e recursos associados foram removidos em R15B02 essencialmente porque eram experimentos fracassados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top