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]: :検出され、利用可能な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=dtraceconfigure 実験を有効にするスクリプト 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 trueerl.

ロックチェック

合格した場合に表示されます --enable-lock-check スクリプトを構成します。

ロックカウント

合格した場合に表示されます --enable-lock-counter スクリプトを構成します。

lttng

合格した場合に表示されます --with-dynamic-trace=lttngconfigure サポートを有効にするスクリプト lttng, 、Linuxのトレースフレームワーク。

浄化コンパイル型

これは、スペシャルを実行すると表示されます 清める- エルランビームエミュレーターのアウェアバージョン。指示はのと同じです デバッグコンパイル型 あなたが使用することを除いて、上記のセクション purify 代わりにコマンドで debug.

共有普及

これは、合格した場合に表示されます --enable-sharing-preservingconfigure 原因となるスクリプト ノード内の不変の用語を共有します それらを平らにして再現する代わりに。このオプションがプログラムをより速くまたは遅くするかどうかは、プログラムの詳細に依存するため、デフォルトのビルドで設定されていない理由です。

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=systemtapconfigure 脚本。これはに代わるものです =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 ファイルの上部近く。)


時代遅れのタグ:

  • 64ビットハーフワード Beamエミュレータの64ビットビルドへの最適化はR14に追加され、19.0で説明なしで削除されました。また、これを見る可能性も削除されます no-c-stack-objects ハーフワードエミュレータに関連付けられたタグ。

  • RQ:2 タグは、Erlang Beam EmulatorのSMPビルドのスケーラビリティを改善することを目的とした実行キューシステムを参照しています。 R13Bに追加され、R15Bで置き換えられました より良い解決策.

  • ハイブリッドヒープ増分GC タグと関連する機能は、R15B02で削除されました。 失敗した経験.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top