10

私は時々いくつかのプロセス (常に同じ実行可能ファイルですが、その複数のインスタンス) をスピンし、CPU 時間を 100% 消費するサードパーティ アプリケーションを備えたクアッド コア システムを使用しています。また、同じボックス (IIS およびサードパーティ) で実行されている Web サービスもいくつかあります。

すべてのコアがビジーであるという問題は、このサード パーティの Web サーバーがタイムアウトになることです (IIS は正常に動作しますが、通常よりも遅くなります)。サード パーティの Web サーバーを制御することはできません。これはより大きな製品の一部であり、動作する必要があります。そこで、(SysInternals Process Explorer を介して) プロセッサ アフィニティを操作し、これらの厄介なプロセスを 4 コアのうち 3 コアに制限し、4 番目のコアをサード パーティの Web サーバー専用にしようとしましたが、非常にうまく機能しているようです。

問題は、実行中のプロセスにのみアフィニティを設定し、実行可能レベルには設定しないことです。そのため、これらのプロセスが終了し、後で新しいプロセスとして再生成された後、すべて同じになります-4つのコアすべてを使用します. そこで、Microsoft のこの ImageCfg.exe ユーティリティについてググってみましたが、Microsoft の Web サイトでダウンロードできるものが見つかりませんでした。試してみたところ、実際には機能しないと不満を漏らす人もいるようです。

アフィニティを実行可能ファイルに固定する方法はありますか?

4

8 に答える 8

6

http://waynes-world-it.blogspot.com/2009/06/processor-affinity-on-windows-server.html

パワーシェル

PowerShellを使用して、実行中の1つ以上のプロセスのプロセッサアフィニティを設定します。以下に、calc.exeのプロセッサマスクを最初の4プロセッサに設定するスクリプトの例を示します。スクリプトが単純で、スケジュールが簡単で、x86とx64で動作し、同じ名前の複数のプロセスをサポートし、少なくとも部分的にはPowerShellでの管理がいかに簡単であるかを強調しているため、この方法が好きです。

calc.exe(n!)で多数の階乗を使用すると、テストに役立つ100%のCPUが生成されることに注意してください。以下のマスクは0xf=1111 –最初の4つのプロセッサのみを使用できるマスクです。

$calcSet = Get-Process -ProcessName "calc"
foreach ($calc in $calcSet) {$calc.ProcessorAffinity=0xF}
于 2010-01-23T11:24:55.607 に答える
5

プロセスラッソの機能の1つは、プロセスが起動されるたびにプロセスのアフィニティを設定することです。

于 2009-03-09T21:14:58.617 に答える
4

/AFFINITYのパラメータを確認することをお勧めしますstart

ヘルプから:

AFFINITY    The new application will have the specified processor
            affinity mask, expressed as a hexadecimal number.

Windowsでのプロセッサ親和性はビットマスクであるため、ある程度の実験が必要になる場合がありますが1、最初のコアであると想定します。したがって7、最初の3つのコアでありF、4つすべてです。または84番目だけ。

start次に、スケジュールされたタスクまたはショートカットを、適切なパラメータを使用したへの呼び出しに置き換えることができます。

于 2009-03-09T21:15:56.383 に答える
4

ImageCfg.exe ユーティリティは機能します。今日、会社の問題を解決するためにそれを使用しました。http://www.robpol86.com/pages/imagecfg.phpから入手できます。

Imagecfg -a 0x3 xxx.exe

たとえば、.exe を CPU0 と CPU1 に制限します。

于 2009-06-12T20:42:36.003 に答える
3

SetProcessAffinityMask()を使用します。そして注意してください、プロセッサ親和性は継承されます!

ImageFileExecutionOptions、特に「Debugger」オプションを使用し、SetProcessAffinityMask()を呼び出す独自の小さな実行可能ファイルを作成してから、アフィニティを設定する新しいプロセスを生成する必要があります。これをデバッガーとして設定すれば完了です。

于 2009-03-09T21:15:00.147 に答える
3

シングルプロシージャアフィニティアプリケーションシムを使用して、実行可能レベルで1つのプロセッサを強制することができます。これにより、プロセスが1つのコアに強制されます。

この記事http://msdn.microsoft.com/en-us/library/bb173458.aspxには、下に向かってシムを有効にする方法に関する段落があります。

于 2009-03-09T21:16:38.410 に答える
1

明らかにこのスレッドは古くなっていますが、誰かがこの件についてググった場合に備えて(私がしたように)コメントを追加しています

プロセスの優先度を設定して、CPU の 100% を使用することを決定した場合でも、優先度の高い何かが必要なときに引き継ぐことができるようにすることができます。

これを自動的に (タスク マネージャーで再生するのではなく) 行うことについて、私は少し前に尋ねました。

start コマンドを使用して、プロセスの起動優先度を設定できます。

例えば。start "my path\my process" /LOW優先度が低い場合。

許可された優先順位の切り替え LOW, NORMAL, HIGH, REALTIME, ABOVENORMAL, BELOWNORMAL

たとえば、バッチファイルから呼び出すことができます。

于 2012-09-14T17:58:44.910 に答える
0

プロセスの優先度を設定して、CPUを100%使用することにした場合でも、必要なときに優先度の高いものが引き継ぐことができるようにすることができます。

これを(タスクマネージャーでプレイするのではなく)自動的に行うことは、私が少し前に尋ねたことです。

于 2009-03-09T21:28:29.193 に答える