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エミュレーター情報ステートメントはどういう意味ですか?
解決
async-threads:0
ロードされたドライバーが使用できるAsyncスレッドプールのサイズ。これにより、ビームVMから別のカーネルスレッドでブロッキングSyscallを実行できます。コマンドスイッチを使用します +A N
プールのサイズを調整します。
ハイプ
ErlangソースとBytecodeのネイティブコンパイルのサポート。主に数の計算コードに役立つ傾向があります。 IOバウンドコードは、ByteCodeインタープリターで正常に行われます。
カーネルポール:偽
古いSelect(2)およびPoll(2)システムには、一部のファイル記述子が書き込みや読み取りを解除できるという通知を受信する必要があります。それらは、多くのオープンファイル記述子には十分にスケーリングしません。現代のオペレーティングシステムには代替インターフェイスがあり、Linuxにはepoll、freebsDにはkqueuがあります。コマンドスイッチで有効にします +K true
他のヒント
エルランのように 20.0, 、バージョン文字列タグの完全なセットは次のとおりです。
64ビット
ビームエミュレータは、64ビットCPUを最大限に活用するために構築されています。
async-threads:10
これは、Erlang EmulatorのAsyncスレッドプールのスレッドの数を指します。これは、エミュレータが失速する前にバックグラウンドスレッドにスピンオフできるブロックされたシステムコールの数を多少示します。
現在デフォルトは10ですが、デフォルトは長年にわたって0でした。つまり、すべてのシステム呼び出しは各Erlangエミュレータースレッド内で同期して実行されました。システムコールがブロックされたとき、システムコールが終了するまで、Erlangエミュレータースレッドが実行されなくなりました。現在の小さなデフォルト値により、エミュレータは、システムコールがAsync I/Oスレッドの1つをブロックしている間に、エミュレータがオフにして何か他のことをしようとすることができます。
でデフォルト値を変更できます +A
Erlangランタイムのオプション。 (例えば erl +A 50
)これを変更する場合は、結果が特定のシステムとワークロードに依存することに注意してください。値が高すぎるとパフォーマンスが損なわれる可能性があります。なぜなら、システムが非常に忙しいときにシステムがバックグラウンドで多くのことを実行しようとするため、さらに忙しくなります。一部のワークロードでは、機能を無効にします erl +A 0
最良の選択肢かもしれません。
デバッグコンパイル型
これは、コンパイラオプションを設定して代替ビームエミュレータを構築して、結果の実行可能ファイルをデバッグしやすくする場合にのみ表示されます。 gdb
または類似。また、この代替ビームエミュレーターを特別な方法で実行する必要があります。
Erlang Beamエミュレーターは通常、速度のために構築されており、デバッガーの仕事を難しくすることがよくあります。ビームエミュレーターの次のバージョンの開発に取り組んでいる場合、作業を絞り込む際に特別なデバッグビルドを実行することが役立つ場合があります。
このモードを有効にするには、 cd
の中へ erts/emulator
走った後のエルランソースツリーの下 configure
その上で、次のようなものを入力します ERL_TOP=../.. make FLAVOR=smp debug
. 。次に、新しいデバッグ可能なビームエミュレーターを実行するには、実行する必要があります bin/cerl -debug
Erlang/OTPシステムの残りの部分が構築された後、Erlangソースツリーの最上位レベルから。
見る デバッグ対応のErlangランタイムシステムを構築する方法 このトピックの詳細については。
DS:1:1:1
ERTS 9.0の時点で、これはSMPサポートを備えたビームエミュレータを構築した場合に常に表示されます。それは「汚れたスケジューラー「機能。値は、このシステム上の機能の構成を説明しています。
この機能は、Erlang 19.0で導入されましたが、最初はErlang 20.0のようにSMPビルドでデフォルトでコンパイルされていなかった実験機能として導入されました。
dtrace
合格した場合に表示されます --with-dynamic-trace=dtrace
に configure
実験を有効にするスクリプト dtrace R15B01に追加された計装機能。この機能は、OS X、Solaris、FreeBSDでのみ機能する予定です。将来、他のプラットフォームで動作する可能性があります。見る SystemTap Linuxシステムに同時に追加された代替案については以下です。
フレームポインター
これは特別なケースです デバッグコンパイル型 上記のオプション フレームポインター最適化. 。使用する frmptr
それ以外の debug
上記のコマンドでは、このモードを有効にします。
ハイプ
エミュレータはでコンパイルされました ハイプ 機能を有効にします。これは、Erlang用のオンザフライネイティブコードコンパイラです。 Erlangがサポートする最も人気のあるCPUタイプでのみ機能し、それらのCPUでもすべての構成では機能しないため、オプションです。
命令カウント
定義すると表示されます ERTS_OPCODE_COUNTER_SUPPORT
ビルドオペコードカウント機能を有効にするビルド中に、これらのプロファイリングビームエミュレータのパフォーマンスにおそらく役立ちます。
カーネルポール:偽
Erlangエミュレーターコードは、OSのネットワークスタックに、I/Oで使用可能なファイル記述子とソケットのセットを尋ねるいくつかの異なる方法を知っています。どこでもほとんど機能するのは古いBSDだけです select()
設計により比較的遅いコールがあり、他のスケーラビリティの問題があります。したがって、ほとんどのシステムには、1つ以上のより高速でスケーラブルな交換があります。たとえば、kqueue、 epoll()
, 、など - しかし、それらのどれもどこでもサポートされていません。エミュレータの起動メッセージが表示されるとき false
ここでは、カーネルのポーリングが利用できないか、それがそうであることを意味しますが、あなたは合格しませんでした +K true
に erl
.
ロックチェック
合格した場合に表示されます --enable-lock-check
スクリプトを構成します。
ロックカウント
合格した場合に表示されます --enable-lock-counter
スクリプトを構成します。
lttng
合格した場合に表示されます --with-dynamic-trace=lttng
に configure
サポートを有効にするスクリプト lttng, 、Linuxのトレースフレームワーク。
浄化コンパイル型
これは、スペシャルを実行すると表示されます 清める- エルランビームエミュレーターのアウェアバージョン。指示はのと同じです デバッグコンパイル型 あなたが使用することを除いて、上記のセクション purify
代わりにコマンドで debug
.
共有普及
これは、合格した場合に表示されます --enable-sharing-preserving
に configure
原因となるスクリプト ノード内の不変の用語を共有します それらを平らにして再現する代わりに。このオプションがプログラムをより速くまたは遅くするかどうかは、プログラムの詳細に依存するため、デフォルトのビルドで設定されていない理由です。
SMP:2:2
SMP:2 タグは、Erlang R13のこの形式に変更されました。つまり、2つのスケジューラがオンラインであることを意味します。 「erl +s1」と言うなら、それは言う SMP:1:1 代わりは。実行時にSystem_flag(Schedulers_online、n)を使用して、スケジューラをオフラインで使用できます。ここでは、nは検出されたコアの数と包括的なコアの数との間に何でもできます。
ソース]または[ソースバージョン
それは、いくつかのサードパーティ(多分あなた、おそらくあなたのOSディストリビューションのパッケージメンテナー、おそらくあなたのsysadmin)をソースコードからErlangを構築したことを意味します。代替案は、erlang.orgから公式バイナリバージョンをダウンロードすることです。
からerlangを構築した場合 gitリポジトリ, 、このメッセージは次のようなものに変わります ソース-8ACC644, 、16進数はリポジトリの電流のフラグメントです gitハッシュ, 、特定の実行可能ファイルを構築したソースの正確なバージョンを確認できます。
SystemTap
合格した場合に表示されます --with-dynamic-trace=systemtap
に configure
脚本。これはに代わるものです =dtrace
この構成オプションの値は、Linuxを使用して本質的に同じ機能を提供します SystemTap, 、DTRACEは通常Linuxで使用できないためです。見る dtrace その上。
タイプアサーション
あなたが外れたときに現れます ET_DEBUG
ラインイン erts/emulator/beam/erl_term.h
, 、すべてのタイプ固有のデータアクセスのランタイムチェックを有効にします。エミュレータを遅くするため、デフォルトでは有効になりません。
Valgrind-compiled
これは、スペシャルを実行すると表示されます Valgrind- エルランビームエミュレーターのアウェアバージョン。指示はのと同じです デバッグコンパイル型 あなたが使用することを除いて、上記のセクション valgrind
代わりにコマンドで debug
.
(このリストはからです erts/emulator/beam/erl_bif_info.c
Erlang OTPソースツリーで。の定義を参照してください erts_system_version
ファイルの上部近く。)
時代遅れのタグ: