2011-08-17 9 views
1

私たちは、次のホスト上のErlang 14B03を実行している上のオプションを有効にする:アーランSMPは、マルチコア・サーバー

のHP ProLiant G6サーバー、2つのIntelプロセッサを持って、各プロセッサは2.4GHzのスピード、8メガバイトのキャッシュを持って、各プロセッサは4つのコアを持っています。サーバーには20 GBのRAMがあります。

-smpエミュレータオプションを適用して、サーバーのハイパースレッディング機能をフルに活用するにはどうすればよいでしょうか。各プロセッサの各コアのスケジューラで達成したパフォーマンスのメリット(合計8つのスケジューラにする)

答えて

4

デフォルトでは、ErlangはSMPでコンパイルされた場合、8つのスケジューラを起動する必要があります。スタートアップヘッダでこれを見ることができます:

Erlang R14B03 (erts-5.8.4) [source] [64-bit] [smp:8:8] [rq:2] [async-threads:0] 
[hipe] [kernel-poll:false]     ^^^^^^^^^ 

これはフラグとして-smp autoを与えることと等価です。 -smp enableは、単一のコアシステム(通常はパフォーマンスがやや低下します)でもSMPモードを強制します。

フラグ+Sフラグを使用すると、作成するスケジューラの数(およびオンラインにする予定の数)を制御できます。たとえば:

$ erl +S16:16 
Erlang R14B03 (erts-5.8.4) [source] [64-bit] [smp:16:16] [rq:16] 
[async-threads:0] [hipe] [kernel-poll:false] 

さらに行く、あなたは正確にスケジューラがその正確なコア上に存在すべきかを定義する+sctフラグを使用することができます。そのフラグの説明については、かなり複雑なのでerlang manualを参照してください。

ただし、Erlangは、OSが公開している場合は、コアごとに1つのスケジューラを(ハイパースレッドであっても)すでに開始しているはずです。ハイパースレッドが既に表示されているデュアルクアッドコアシステムで実行していないことを確認します(合計8つの仮想コアにします)。

+1

いくつかのアプリケーションでは、erlインスタンスごとに1つのスケジューラだけを起動し、コアごとに1つのインスタンスを起動することで、より多くのパフォーマンスを鍛えることができます。 –