32

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 エミュレーターの info ステートメントは何を意味するのでしょうか?

4

2 に答える 2

63

Erlang 20.0の時点で、バージョン文字列タグの完全なセットは次のとおりです。

[64ビット]

BEAM エミュレータは、64 ビット CPU を最大限に活用するように構築されています。

[非同期スレッド:10]

これは、Erlang エミュレーターの非同期スレッド プール内のスレッド数を指し、エミュレーターが停止する前に、バックグラウンド スレッドにスピンオフできるブロックされたシステム コールの数を多かれ少なかれ示します。

現在のデフォルトは 10 ですが、デフォルトは何年もの間 0 でした。つまり、すべてのシステム コールが各 Erlang エミュレータ スレッド内で同期的に実行されていました。システム コールがブロックされると、システム コールが終了するまで Erlang エミュレータ スレッドの実行が停止されました。現在の小さなデフォルト値により、エミュレーターは、システム コールが非同期 I/O スレッドの 1 つをブロックしている間、停止して別のことを試みることができます。

オプションを使用してデフォルト値を+AErlang ランタイムに変更できます。(例erl +A 50) これを変更する場合は、結果が特定のシステムとワークロードに依存することに注意してください。値が高すぎると、システムが非常にビジーなときにバックグラウンドで多くのことを実行しようとするため、パフォーマンスが低下する可能性があります。一部のワークロードでは、機能を無効にするerl +A 0ことが最適なオプションになる場合があります。

[デバッグコンパイル]

これは、別の BEAM エミュレーターをわざわざビルドして、結果の実行可能ファイルをデバッグしやすくするコンパイラ オプションを設定した場合にのみ表示されますgdb。また、この代替 BEAM エミュレーターを特別な方法で実行する必要があります。

通常、Erlang BEAM エミュレーターは速度を重視して構築されているため、デバッガーの作業が困難になることがよくあります。BEAM エミュレーターの次のバージョンの開発に取り組んでいる場合は、作業を改良する際に特別なデバッグ ビルドを実行すると役立つ場合があります。

このモードを有効にするcderts/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 19.0 で導入されました。最初は実験的な機能でしたが、Erlang 20.0 のように SMP ビルドではデフォルトでコンパイルされませんでした。

[トレース]

R15B01 で追加された実験的なDTrace--with-dynamic-trace=dtrace計測機能を有効にするconfigureスクリプトに渡した場合に表示されます。この機能は、OS X、Solaris、および FreeBSD でのみ動作することが期待されています。将来的には他のプラットフォームでも動作する可能性があります。Linux システム用に同時に追加された代替手段については、以下の[systemtap]を参照してください。

[フレームポインタ]

これは、上記の[debug-compiled]オプションの特殊なケースですが、フレーム ポインターの最適化のみを無効にします。このモードを有効にするには、上記のコマンドのfrmptr代わりに使用します。debug

[ハイプ]

エミュレーターは、Erlang のオンザフライ ネイティブ コード コンパイラーであるHiPE機能を有効にしてコンパイルされました。Erlang がサポートする最も一般的な CPU タイプでのみ動作し、それらの CPU でもすべての構成で動作するわけではないため、オプションになっています。

[命令カウント]

ビルド中に定義すると表示ERTS_OPCODE_COUNTER_SUPPORTされます。これにより、BEAM オペコード カウント機能が有効になり、BEAM エミュレータのパフォーマンスをプロファイリングするのに役立つと思われます。

[kernel-poll:false]

Erlang エミュレーターのコードは、OS のネットワーク スタックに、一連のファイル記述子とソケットのどれが I/O に使用できるかを問い合わせるいくつかの異なる方法を知っています。ほぼすべての場所で機能する唯一のものは、select()その設計のために比較的遅く、他のスケーラビリティの問題を抱えている古い BSD 呼び出しです。そのため、ほとんどのシステムには、より高速でスケーラブルな代替手段 (kqueueepoll()など) が 1 つ以上ありますが、どこでもサポートされているわけではありません。エミュレーターの起動メッセージがfalseここにある場合は、カーネル ポーリングが利用できないか、利用可能であるが に渡さなかったことを意味する可能性があり+K trueますerl

【施錠確認】

--enable-lock-checkconfigure スクリプトに渡した場合に表示されます。

[ロックカウント]

--enable-lock-counterconfigure スクリプトに渡した場合に表示されます。

[限定]

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

[浄化コンパイル]

これは、特別なPurify対応バージョンの Erlang BEAM エミュレーターを実行すると表示されます。手順は、上記の[debug-compiled]セクションと同じですが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 から検出されたコアの数までの任意の数です。

[source] または [source-VERSION]

これは、サードパーティ (おそらくあなた、あなたの OS ディストリビューションのパッケージメンテナー、おそらくあなたのシステム管理者) がソースコードから Erlang を構築したことを意味します。代わりの方法は、Erlang.org から公式のバイナリ バージョンをダウンロードすることです。

Git リポジトリから Erlang をビルドすると、このメッセージは[source-8acc644] のようなものに変わります。ここで、16 進数はリポジトリの現在のGit ハッシュのフラグメントです。これにより、ビルドしたソースの正確なバージョンを確認できます。指定された実行可能ファイル。

【システムタップ】

--with-dynamic-trace=systemtapスクリプトに渡した場合に表示されconfigureます。=dtraceこれは、この構成オプションの値の代替であり、SystemTapを使用して Linux で本質的に同じ機能を提供します。DTraceは通常 Linux では使用できないためです。上記の[dtrace]を参照してください。

[型アサーション]

ET_DEBUGの行のコメントを外すと表示されerts/emulator/beam/erl_term.h、すべてのタイプ固有のデータ アクセスの実行時チェックが有効になります。エミュレータの速度が低下するため、デフォルトでは有効になっていません。

[valgrind コンパイル済み]

これは、特別なValgrind対応バージョンの Erlang BEAM エミュレーターを実行すると表示されます。手順は、上記の[debug-compiled]セクションと同じですがvalgrind、コマンドで の代わりにdebug.


(このリストはerts/emulator/beam/erl_bif_info.c、Erlang OTP ソース ツリーから取得されerts_system_versionます。ファイルの上部近くにある の定義を参照してください。)


廃止されたタグ:

  • BEAM エミュレータの 64 ビット ビルドに対する [64 ビット ハーフワード] 最適化は、R14 で追加され、19.0 で説明なしに削除されましたこれにより、ハーフワード エミュレーターに関連付けられていた[no-c-stack-objects]タグが表示される可能性もなくなります。

  • [ rq:2]タグは、Erlang BEAM エミュレーターの SMP ビルドでスケーラビリティを向上させることを目的とした実行キュー システムを参照していました。R13B で追加され、R15B でより良いソリューションに置き換えられました。

  • [ hybrid-heap]および[incremental GC]タグと関連する機能は、基本的に R15B02 で削除されまし

于 2009-07-26T20:42:16.907 に答える
26

[非同期スレッド:0]

読み込まれたドライバーが使用できる非同期スレッド プールのサイズ。これにより、ブロック syscall をビーム vm とは別のカーネル スレッドで実行できます。コマンド スイッチ+A Nを使用して、プールのサイズを調整します。

[ハイプ]

erlang ソースとバイトコードのネイティブ コンパイルのサポート。ほとんどの場合、数値計算コードに役立ちます。IO バウンド コードは、バイトコード インタープリターで正常に動作します。

[kernel-poll:false]

一部のファイル記述子が書き込みまたは読み取りのブロックを解除する準備ができているという通知を受け取るための古い select(2) および poll(2) システム コールがあります。それらは、開いているファイル記述子の数が多い場合には適切にスケーリングされません。最新のオペレーティング システムには代替インターフェイスがあり、Linux には epoll があり、freebsd には kqueue があります。コマンドスイッチで有効にする+K true

于 2009-07-25T13:08:57.530 に答える