Что означают информационные инструкции эмулятора Erlang?

StackOverflow https://stackoverflow.com/questions/1182025

  •  19-09-2019
  •  | 
  •  

Вопрос

Когда я запускаю свой эмулятор Erlang, там первый бит содержит кучу информационных элементов.(Слегка переформатирован для пущего эффекта.)

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> 

О чем-то я могу догадываться, возможно, это точно, но что-то из этого означает "здесь творится волшебство".

  • Erlang (BEAM) emulator version 5.6.5:версия, конечно
  • [source]:эмулятор был скомпилирован из исходного кода?
  • [smp:2]:обнаружены и доступны два ядра процессора
  • [async-threads:0]: выполняемые в данный момент задания?
  • [hipe]: ?
  • [kernel-poll:false]: ?

Мне также интересно, есть ли другие [foo] элементы, которые могут появляться с различными конфигурациями, сборками или параметрами запуска.

Итак, что означают информационные инструкции эмулятора Erlang?

Это было полезно?

Решение

Async-threads: 0

Размер бассейна Async Thread доступен для использования загруженными драйверами. Это позволяет блокировать Syscalls выполняться в отдельной резьбе ядра от VM Beam. Используйте командный переключатель +A N Чтобы отрегулировать размер бассейна.

Hipe

Поддержка нативного компиляции источника Erlang и Bytecode. Имеет тенденцию быть полезным для кода хруста. Код, связанный с вводом, делайте нормально на интерпретаторе Bytecode.

Ядра-Полл: Неверно

Существует старый Select (2) и System (2) Системные вызовы для получения уведомления о том, что какой -то дескриптор файла готов к разблокировке письма или чтения. Они плохо масштабируются до большого количества дескрипторов открытых файлов. Современные операционные системы имеют альтернативные интерфейсы, у Linux Epoll, FreeBSD имеет kqueue. Включить с коммутатором команды +K true

Другие советы

По состоянию на Эрланг 20.0, полный набор тегов строки версии равен:

[64-разрядный]

Эмулятор BEAM создан для полноценного использования 64-разрядного процессора.

[асинхронные потоки:10]

Это относится к количеству потоков в пуле асинхронных потоков эмулятора Erlang, который более или менее сообщает вам, сколько заблокированных системных вызовов может быть переведено в фоновые потоки, прежде чем эмулятор остановится.

Хотя в настоящее время значение по умолчанию равно 10, в течение многих лет по умолчанию было 0, что означало, что все системные вызовы выполнялись синхронно в каждом потоке эмулятора Erlang.Когда системный вызов блокировался, это останавливало запуск потока эмулятора Erlang до завершения системного вызова.Текущее небольшое значение по умолчанию позволяет эмулятору попытаться выйти и сделать что-то еще, пока системный вызов блокирует один из потоков асинхронного ввода-вывода.

Вы можете изменить значение по умолчанию с помощью +A опция для среды выполнения Erlang.(например, erl +A 50) Если вы собираетесь это изменить, помните, что ваши результаты будут зависеть от вашей конкретной системы и рабочей нагрузки.Слишком высокое значение может снизить производительность, поскольку оно заставляет систему пытаться выполнять многие действия в фоновом режиме, когда система очень занята, что только делает ее еще более загруженной.При некоторых рабочих нагрузках отключение функции с помощью erl +A 0 это могло бы быть лучшим вариантом.

[отладочно-скомпилированный]

Это появляется только в том случае, если вы изо всех сил стараетесь создать альтернативный эмулятор BEAM с параметрами компилятора, установленными для упрощения отладки результирующего исполняемого файла, как в gdb или что-то подобное.Вы также должны запустить этот альтернативный эмулятор BEAM особым образом.

Эмулятор Erlang BEAM обычно рассчитан на высокую скорость, что часто усложняет работу отладчика.Если вы работаете над разработкой следующей версии эмулятора BEAM, вам может оказаться полезным запускать специальные отладочные сборки по мере совершенствования вашей работы.

Чтобы включить этот режим, cd в erts/emulator под деревом исходных текстов Erlang после запуска configure на нем затем введите что-то вроде ERL_TOP=../.. make FLAVOR=smp debug.Затем, чтобы запустить ваш новый отлаживаемый эмулятор BEAM, вам необходимо запустить bin/cerl -debug с верхнего уровня дерева исходных текстов Erlang, после того, как будет построена остальная часть системы Erlang / OTP.

Видишь Как создать систему Erlang RunTime с поддержкой отладки подробнее по этой теме.

[дс:1:1:1]

Начиная с ERTS 9.0, это должно появляться всегда, если вы создали эмулятор BEAM с поддержкой SMP.Это относится к "грязные планировщики" особенность.Значения описывают конфигурацию функции в этой системе.

Эта функция была введена в Erlang 19.0, первоначально как экспериментальная функция, которая не компилировалась по умолчанию в SMP-сборках, как в Erlang 20.0.

[dtrace]

Появляется, если вы прошли --with-dynamic-trace=dtrace к тому configure скрипт для включения экспериментального DTrace ( Отслеживание ) функция инструментирования добавлена в R15B01.Ожидается, что эта функция будет работать только в OS X, Solaris и FreeBSD.В будущем это может работать и на других платформах.Видишь [systemtap] [системный переход] ниже приведена альтернатива, добавленная в то же время для систем Linux.

[указатель рамки]

Это частный случай [отладочно-скомпилированный] опция выше, за исключением того, что она только отключает оптимизация указателя кадра.Использование frmptr вместо того, чтобы debug в приведенных выше командах необходимо включить этот режим.

[хайп]

Эмулятор был скомпилирован с помощью ХаЙП включена функция, представляющая собой готовый компилятор собственного кода для Erlang.Он работает только на самых популярных типах процессоров, которые поддерживает Erlang, и он работает не со всеми конфигурациями даже на этих процессорах, вот почему он необязательный.

[подсчет инструкций]

Появляется, если вы определяете ERTS_OPCODE_COUNTER_SUPPORT во время сборки, которая включает функцию подсчета кода операции BEAM, предположительно полезную для тех, кто оценивает производительность эмулятора BEAM.

[опрос ядра:false]

Код эмулятора Erlang знает несколько различных способов запросить сетевой стек операционной системы, какой из набора файловых дескрипторов и сокетов доступен для ввода-вывода.Единственный, который работает практически везде, - это старый BSD select() вызов, который является относительно медленным из-за своего дизайна и, кроме того, имеет другие проблемы с масштабируемостью.Таким образом, большинство систем имеют одну или несколько более быстрых и масштабируемых замен — например, kqueue, epoll(), и т.д.— но ни один из них не поддерживается повсеместно.Когда в сообщении о запуске эмулятора говорится false здесь это может означать либо то, что опрос ядра недоступен, либо то, что он есть, но вы не прошли +K true Для erl.

[проверка блокировки]

Появляется, если вы прошли --enable-lock-check к скрипту настройки.

[подсчет блокировок]

Появляется, если вы прошли --enable-lock-counter к скрипту настройки.

[lttng]

Появляется, если вы прошли --with-dynamic-trace=lttng к тому configure скрипт для включения поддержки LTTNG, фреймворк трассировки для Linux.

[очистить-скомпилировано]

Это появляется при запуске специального Очищать-доступная версия эмулятора Erlang BEAM.Инструкции те же, что и в [отладочно-скомпилированный] раздел выше, за исключением того, что вы используете purify в командах вместо debug.

[совместное использование-сохранение]

Это появляется, если вы проходите мимо --enable-sharing-preserving к тому configure скрипт, который вызывает общий доступ к неизменяемым терминам внутри узла вместо того, чтобы сглаживать и воссоздавать их заново.Делает ли этот параметр вашу программу быстрее или медленнее, зависит от деталей программы, следовательно, почему он не установлен в сборке по умолчанию.

[smp:2:2]

Тот Самый [smp:2] тег изменен на этот формат в Erlang R13, что означает 2 планировщика, оба из которых находятся в сети.Если вы скажете "erl + S1", он скажет [smp:1:1] вместо этого.Вы можете отключить планировщики во время выполнения с помощью erlang:system_flag(schedulers_online, N), где N может быть любым между 1 и количеством обнаруженных ядер включительно.

[исходный код] или [исходная ВЕРСИЯ]

Это означает, что какая-то третья сторона (возможно, вы, возможно, сопровождающий пакета вашего дистрибутива операционной системы, возможно, ваш системный администратор) создала Erlang из исходного кода.Альтернативой является загрузка официальной двоичной версии с Erlang.org.

Если вы создадите Erlang из репозиторий Git, это сообщение меняется на что - то вроде [источник-8acc644], где шестнадцатеричное число является фрагментом текущего состояния репозитория Мерзавец хэш, который позволяет вам проверить точную версию исходного кода, из которого был создан данный исполняемый файл.

[systemtap] [системный переход]

Появляется, если вы прошли --with-dynamic-trace=systemtap к тому configure сценарий.Это альтернатива =dtrace значение для этого параметра конфигурации, обеспечивающее по существу ту же функциональность в Linux с использованием SystemTap ( Системный подход ), поскольку DTrace обычно недоступен в Linux.Видишь [dtrace] выше.

[утверждения типа]

Появляется, когда вы раскомментируете ET_DEBUG линия в erts/emulator/beam/erl_term.h, позволяющий проверять во время выполнения все обращения к данным, зависящим от типа.Не включен по умолчанию, поскольку это замедляет работу эмулятора.

[valgrind-скомпилирован]

Это появляется при запуске специального Валгринд-доступная версия эмулятора Erlang BEAM.Инструкции те же, что и в [отладочно-скомпилированный] раздел выше, за исключением того, что вы используете valgrind в командах вместо debug.


(Этот список взят из erts/emulator/beam/erl_bif_info.c в дереве исходных текстов Erlang OTP.Смотрите определение erts_system_version в верхней части файла.)


Устаревшие теги:

  • Тот Самый [64-битное полуслово] оптимизация для 64-разрядных сборок эмулятора BEAM была добавлена в R14, затем удалена без объяснения причин в 19.0.Это также исключает возможность увидеть [нет объектов c-стека] тег, который был связан с эмулятором halfword.

  • Тот Самый [rq:2] тег ссылался на систему очередей запуска, предназначенную для улучшения масштабируемости SMP-сборок эмулятора Erlang BEAM.Добавленный в R13B, он был заменен в R15B на лучшее решение.

  • Тот Самый [гибридная куча] и [инкрементный GC] теги и связанные с ними функции были удалены в R15B02 по существу потому, что они были неудачный опыт.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top