Erlang 에뮬레이터 정보 설명은 무엇을 의미합니까?
문제
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]
:2개의 CPU 코어가 감지되어 사용 가능[async-threads:0]
:현재 실행 중인 작업?[hipe]
: ?[kernel-poll:false]
: ?
또 다른 것도 있는지 궁금합니다 [foo]
다양한 구성, 빌드 또는 시작 매개변수로 나타날 수 있는 항목입니다.
그렇다면 Erlang 에뮬레이터 정보 설명은 무엇을 의미합니까?
해결책
비동기-스레드 : 0
로드 된 드라이버를 사용할 수있는 비동기 스레드 풀의 크기. 이를 통해 빔 VM에서 별도의 커널 스레드에서 SYSCALL을 차단할 수 있습니다. 명령 스위치를 사용하십시오 +A N
수영장의 크기를 조정합니다.
Hipe
Erlang 소스 및 바이트 코드의 기본 편집 지원. 대부분 숫자 크 런칭 코드에 유용한 경향이 있습니다. IO-bound 코드는 바이트 코드 통역사에서 정상적으로 수행합니다.
kernel-poll : false
이전 Select (2) 및 Poll (2) 시스템은 일부 파일 디스크립터가 쓰기 또는 읽기를 차단 해제 할 준비가되어 있다는 알림을받습니다. 그들은 많은 수의 열린 파일 설명자로 잘 확장되지 않습니다. 최신 운영 시스템에는 대체 인터페이스가 있으며 Linux에는 Epoll이 있으며 FreeBSD에는 Kqueue가 있습니다. 명령 스위치로 활성화합니다 +K true
다른 팁
얼랭의 경우 20.0, 버전 문자열 태그의 전체 세트는 다음과 같습니다.
[64비트]
BEAM 에뮬레이터는 64비트 CPU를 최대한 활용하도록 제작되었습니다.
[비동기 스레드:10]
이는 Erlang 에뮬레이터의 비동기 스레드 풀에 있는 스레드 수를 나타내며, 에뮬레이터가 중단되기 전에 차단된 시스템 호출 수를 백그라운드 스레드로 분리할 수 있음을 어느 정도 알려줍니다.
현재 기본값은 10이지만 수년 동안 기본값은 0이었습니다. 이는 모든 시스템 호출이 각 Erlang 에뮬레이터 스레드 내에서 동기식으로 실행되었음을 의미합니다.시스템 호출이 차단되면 시스템 호출이 완료될 때까지 Erlang 에뮬레이터 스레드의 실행이 중지됩니다.현재의 작은 기본값을 사용하면 시스템 호출이 비동기 I/O 스레드 중 하나를 차단하는 동안 에뮬레이터가 종료되어 다른 작업을 수행할 수 있습니다.
다음을 사용하여 기본값을 변경할 수 있습니다. +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/OTP 시스템의 나머지 부분이 구축된 후 Erlang 소스 트리의 최상위 수준에서.
보다 디버그 지원 Erlang 런타임 시스템을 구축하는 방법 이 주제에 대한 자세한 내용은
[ds:1:1:1]
ERTS 9.0부터는 SMP를 지원하는 BEAM 에뮬레이터를 구축한 경우 항상 표시되어야 합니다.그것은 "더러운 스케줄러" 특징.값은 이 시스템의 기능 구성을 설명합니다.
이 기능은 처음에는 Erlang 20.0에서처럼 SMP 빌드에서 기본적으로 컴파일되지 않은 실험적 기능으로 Erlang 19.0에서 도입되었습니다.
[디트레이스]
합격하면 나타납니다 --with-dynamic-trace=dtrace
~로 configure
실험을 활성화하는 스크립트 DTrace R15B01에 계측 기능이 추가되었습니다.이 기능은 OS X, Solaris 및 FreeBSD에서만 작동할 것으로 예상됩니다.향후 다른 플랫폼에서도 작동할 수 있습니다.보다 [시스템탭] Linux 시스템에 동시에 추가된 대안은 아래에서 확인하세요.
[프레임 포인터]
이는 의 특별한 경우이다. [디버그 컴파일] 위의 옵션은 프레임 포인터 최적화.사용 frmptr
대신에 debug
이 모드를 활성화하려면 위 명령을 사용하세요.
[히페]
에뮬레이터는 다음과 같이 컴파일되었습니다. HiPE Erlang을 위한 즉석 네이티브 코드 컴파일러인 기능이 활성화되었습니다.이는 Erlang이 지원하는 가장 널리 사용되는 CPU 유형에서만 작동하며 해당 CPU에서도 모든 구성에서는 작동하지 않으므로 선택 사항입니다.
[명령 계산]
정의하면 나타납니다. ERTS_OPCODE_COUNTER_SUPPORT
이는 빌드 중에 BEAM opcode 계산 기능을 활성화하며 아마도 BEAM 에뮬레이터 성능을 프로파일링하는 사람들에게 유용할 것입니다.
[커널 폴링:false]
Erlang 에뮬레이터 코드는 OS의 네트워크 스택에 I/O에 사용할 수 있는 파일 설명자 및 소켓 집합을 묻는 여러 가지 방법을 알고 있습니다.거의 모든 곳에서 작동하는 유일한 것은 오래된 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과 감지된 코어 수(포함) 사이의 값일 수 있습니다.
[소스] 또는 [소스-버전]
이는 일부 제3자(아마도 귀하, OS 배포판의 패키지 관리자, 시스템 관리자)가 소스 코드에서 Erlang을 구축했음을 의미합니다.대안은 Erlang.org에서 공식 바이너리 버전을 다운로드하는 것입니다.
다음에서 Erlang을 빌드하면 Git 저장소, 이 메시지는 다음과 같이 변경됩니다. [소스-8acc644], 여기서 16진수는 저장소의 현재 조각입니다. 힘내 해시, 이를 통해 특정 실행 파일을 빌드한 소스의 정확한 버전을 확인할 수 있습니다.
[시스템 탭]
합격하면 나타납니다 --with-dynamic-trace=systemtap
~로 configure
스크립트.이는 다음의 대안입니다. =dtrace
이 구성 옵션의 값은 다음을 사용하여 Linux에서 본질적으로 동일한 기능을 제공합니다. 시스템탭, DTrace는 일반적으로 Linux에서 사용할 수 없기 때문입니다.보다 [디트레이스] 위에.
[유형 주장]
주석을 해제하면 나타납니다. 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비트 하프워드] BEAM 에뮬레이터의 64비트 빌드에 대한 최적화가 R14에 추가된 후 19.0에서는 설명 없이 제거되었습니다.이는 또한 다음을 볼 가능성을 제거합니다. [c-스택 개체 없음] 하프워드 에뮬레이터와 연결된 태그입니다.
그만큼 [rq:2] Erlang BEAM 에뮬레이터의 SMP 빌드에서 확장성을 향상시키기 위한 실행 대기열 시스템을 참조하는 태그입니다.R13B에 추가되었으며 R15B에서는 다음으로 대체되었습니다. 더 나은 솔루션.
그만큼 [하이브리드 힙] 그리고 [증분 GC] 태그 및 관련 기능은 본질적으로 R15B02에서 제거되었습니다. 실패한 실험.