2012-02-21 15 views
0

私はマルチプロセッシングの初心者です - これは間違っていると解釈するかもしれませんが、自分のプログラムを実行すると、より多くのプロセスが生成されることに気付きます。例えば:pythonマルチプロセッシング:syプロセスのオーバーヘッドを減らす方法はありますか?

Cpu(s): 14.0%us, 24.1%sy, 0.0%ni, 58.8%id, 0.0%wa, 2.2%hi, 0.0%si, 0.8%st 

複数のプロセスIは、より高いSYプロセスが進むスポーンと実際のプロセスはちょうどhalf'edます(それは10%/ CPUに移行する前に、それは20%/ CPUであった)と理想的なCPU同じままです(ほぼ60%)。私はこれがLinuxの質問またはPythonの質問であるかどうか分からないが、私はこの数を減らし、私のプログラムがより多くの利用可能なCPUを使用できるようにできることは何ですか?

答えて

2

システムCPU時間は、カーネル内のプロセスが使用する時間です。システムCPUとユーザーCPUの比率が非常に大きい場合は、おそらくプロセスが多くのシステムコールを行っていることを意味します。

これは時間が失われたとは思わない:カーネルはあなたのプロセスに役立つ何かをやっている。

バッファサイズを著しく増加させることで、システムコールの速度を低下させます。または、プロセスの同期プリミティブが多すぎるかもしれません。

プロセスによって実行されたシステムコールについては、straceを使用してください。

+0

感謝を助けます。私の最大の成果は次の通りです.Cpu(s):14.0%、24.1%sy、0.0%ni、58.8%id、0.0%wa、2.2%hi、0.0%si、0.8%st。 sysを高くすると処理が多くなりますが、理想的なままです。しかし、あなたの権利、私はすべての私のproceses間の共有変数をsync'ingている可能性があります。 – Lostsoul

2

おそらくハードウェアに関する質問です。

いくつかの重要な事柄:

  • RAMは無料でどのくらい?
  • スワップスペースを使用していますか?
  • あなたはいくつのCPUを持っていますか?
  • あなたのアプリは計算量が多いですか?
  • 共有変数の大きさはどれくらいですか?
  • アプリにI/Oがありますか?

アプリの出力が多い場合は、データベースオプションを調べて、値をテーブルに挿入することができます。これにより、プロセス間のキャッシングと制御トラフィックフローが追加されます。時間の経過とともに結果セットが増加すると、最終的に他の問題を引き起こす変数を共有する必要はありません。

Linuxのメモリに役立ついくつかの調整があります。 開いているファイルの数は1つです。必要に応じて最適化できるプロセス設定を確認できます。それは少し助けるが、私はあなたがハードウェアの壁にぶつかるかもしれないと思う。

もう1つの方法は、マネージャをセットアップして他のサーバーに起動し、そこでプロセスを実行することです。プロセスがマスターまたはスレーブの場合、マシンにsshでargを渡す必要があります。プロセスをリダイレクトするには、initのオーバーライドをマネージャーに追加してください。

ホープこれは私が出力を読み取ることが、私はそれを研究だろうかわからない、 リッチ

関連する問題