2012-09-14 10 views
12

特定のCPUコアを対象としたノードプロセスの開始方法を教えてください。Node.js - CPUコアをターゲットにする

私はノードクラスタを見ましたが、私は別のコアで2つのプロセスを開始することに興味があります。

コマンドラインからノードを起動したとき、私はつまり、これを行う方法があったと仮定した

ノードmyapp.js

は私が行う方法を知って興味があると思いますこれは、WindowsとLinuxの両方で、違いがある場合。

+0

あなたがそれを行うことができますPM2付:https://github.com/Unitech/pm2 – Unitech

+1

@Unitechは、いくつかのコードで答えを追加してもらえますか?どのように特定のCPUコアをターゲットにしますか? – styfle

答えて

5

tasksetを使用すると、特定のCPUアフィニティでノードを実行できます。 Windowsでstartコマンドを使用して同じことを行う方法については、this postを参照してください。

11

一般的に、スケジューラは何の助けもなしにこれのかなり良い仕事をします。野生では、私はこれが重要な状況を1つしか見ていませんでした....

私たちは8コアボックスにノードサービスを導入していました。負荷テスト中に私たちは最も奇妙な観測をしました...サービスは実際に実行されました後でデバッグを少し行い、すべてのネットワーク割り込みがコア0で処理されていることが分かりました。私は、コア0が負荷の1/2のシェアを持つように15人の作業者を使用していました。他のコア。最終的には、よりシンプルで予測性があり、複雑さが理論的なスループットを7%上回らないほど価値がないため、7人の従業員を選ぶことになりました。 Linux上でCPUアフィニティを設定するには言われていること

、:

$ taskset -pc 3089 
pid 3089's current affinity list: 0,1 

$ taskset -p 3089 
pid 3089's current affinity mask: 3 # core 0 = 0x1, core 1 = 0x2 


$ taskset -pc 1,2,3 3089 
pid 3089's current affinity list: 0,1 
pid 3089's new affinity list: 1 
+0

一般的に、スケジューラは助けなしにこれのかなり良い仕事をします 私は参照してください。私は手動で親和性を強制的に設定するようになってきていると思う。スケジューラーの動作が文書化されている場所を知っていますか?例えば。あなたが4コアマシンで4ノードサービスを開始した場合、それぞれが別のコアで実行されるでしょうか? – UpTheCreek

+0

実際には複数のカーネルスケジューラがありますが、OSのバージョンやLinuxでは、さまざまなケースで最適化するいくつかの方法があります。一般に、実行したいN個のものがあり、N個のコアがある場合、スケジューラはかなり簡単な仕事をしています。それは絶対確実ではありませんが、私が見いだしたのは、コアアフィニティを使って私の混乱を良くするために、perfワースを作るのは簡単だということです。実際に何が起こっているのかを理解し、システムに制約を加えることによって物事をより良くしたことを証明するためには、綿密なプロファイリングが必要です。 –

+0

"4コアマシンで4ノードサービスを開始すると、それぞれ異なるコアで実行されますか?" - 言い換えれば、はい。そして、それがオタクと物事を測定する(そこにあった、それをやった)ことが楽しいものであるように、あなたはシステムが自動的に行うことを大幅に向上させることはまずありません。あなたが壊れていないものを修正しようとする前に、実証できる問題が生じるまで私は待っています。さらに、要求を処理している(キューワーカーは別の話です)場合は、100%の負荷の近くでこれらのボックスを押してはいけません。 50%の負荷であっても、実際には積極的であり、多くの余分な要求待ち時間が発生します。 –

関連する問題