2

セットアップ

個別のワーカー プロセスを起動してさまざまな CPU 集中型タスクを実行する Windows サービスを作成しました。サーバーとワーカーは、IPC 名前付きパイプを介して通信します。

Process.Start()現在、単純な呼び出しでワーカーを作成しています。

かなり低スペックのデュアル コアサーバー VM で多数のワーカーを実行すると、タスク マネージャーは、各ワーカーが約 2 ~ 3% の CPU を使用していることを示します。

ただし (これは私たちを混乱させるものです)、非常に強力な8 コアサーバーで同じテストを実行すると、各ワーカー プロセスが 2 ~ 3% の CPU を使用していることがわかります。これで、より多くの CPU 'パワー' が利用できるようになったので、各ワーカーが使用する CPU の割合がはるかに少なくなると予想されます。

これはまた、低電力のサーバーでは、30 程度のワーカー プロセスが作成された後、CPU 使用率が 100% に達することを意味します。しかし、強力な CPU では、同じ数のワーカーの後で同じ制限に達します。はるかに多くのワーカーを実行できると予想されます。

問題

それで、私はいくつかの質問があります:

  • タスク マネージャーが教えてくれる値を誤解していませんか? CPU % 値は、すべてのコアで消費された CPU 時間ですか? もしそうなら、なぜ非常に異なるハードウェアで同じなのですか?

  • ワーカー プロセスを複数のコアに適切に分散させるために、何か特別な/異なることを行う必要がありますか? 現時点では、プロセスにはデフォルトのプロセッサ アフィニティがあります (したがって、どのコアでも実行できます)。

ヘルプ、アドバイス、リンクは大歓迎です。


コメントを残した人への追加情報:

質問に複雑さを加える必要はなかったので、最初は言及しませんでしたが、ワーカー プロセスはライブ ビデオ ストリームのビデオ トランスコーディングを行っています。そのため、ワーカーがそのタスクを「完了する」ことはありません。クライアントが接続されている限り、ワーカーは単に機能します。

基本的に:

  • クライアントがサーバーに接続します
  • サーバーは、リモート ビデオ ストリームに接続するワーカー プロセスを開始します。
  • ビデオがビデオ ストリームから受信されると、ワーカーはそれをトランスコードし、トランスコードされたビデオをクライアントに送り返します。

これが他の提案に役立つかどうかわかりませんか? これまでのすべてのコメントに感謝します。

4

1 に答える 1

1

プロセスがCPUの2〜3%を使用しているという事実は、プロセスがCPUにバインドされていないことを示していますが、IOにバインドされているか、その他の制限がある可能性があります。

2コアサーバーVMのIOは、おそらく8コアサーバーよりもかなり遅いため、そこでの動作が抑制されます。これが、見かけのCPU使用率が同じである理由かもしれませんが、サーバー全体が全体としてより早くタスクを完了する可能性が高いと思われます。

于 2012-03-22T17:20:37.987 に答える