実行中、または起動時にプログラム(プロセス)のCPU/コア数を制限するツール(cpuaffinity.exe)
いったい何ができるのか?
実行中または起動時に特定プロセスに対して、動的にCPU/コア数の割り当てを増減、変更します。
例えば、マルチコアをフルに使ってくれる動画エンコードのようなプロセスを実行中に、別のアプリを使うために、一時的に1CPU分のリソースを空けてほしいというような場合に便利です。
これは、
タスクマネージャ -> プロセス -> 関係の設定 -> プロセッサの関係
により、GUIから設定可能ですが、
これをコンソール(コマンドライン)から設定するためのものです。
ショートカットに登録して使用したり、複数のプロセスをまとめて設定する場合などに便利です。
この手のアプリはGUIアプリならフリーウェアでもあるのですが、実行中のプロセスに対して動的にコマンドラインから指定するものはちょっと見当たらない。
PowerShellのスクリプトでも可能ですが、シンプルかつ使いやすいものがほしかったので。
常駐してプロセスを監視するようなこともしません。
インストール
cpuaffinity_???.zip を解凍して、ファイルをお好きな場所に入れてください。
アンインストールはこのファイルを削除していただければ結構です。(レジストリやOSのインストール管理は使用してません)
使い方
コマンドプロンプト、PowerShell、ショートカットのリンク先から以下のようなコマンドを実行してください。
cpuaffinity.exe [/?:mask] [n:number] [/g] [/p] [/l] [/c] [/e] process-name ...
/b:2進表記のマスク指定
/o:8進表記のマスク指定
/d:10進表記のマスク指定
/x:16進表記のマスク指定
/n:CPU数で指定
/g プロセス名を正規表現により指定します
/p プロセスをPIDで指定します
/l 実行中プロセスのPIDとマスクの一覧を表示します
/c 論理CPUの物理CPUやCPUソケットへの割り当てを表示します
/e コマンドを起動し、マスク設定を行います
CPUの指定は、ビット毎に一つのCPUの有効/無効を指定します。
例えば、8CPUの環境で2CPUのみに割り当てる場合は、
/b:00000011
/x:3
などの形で指定します。
例えば、対象プロセス名が "TestProcess.exe"の場合、
> cpuaffinity /x:3 TestProcess.exe
のように指定します。
CPU数を数値で指定することも可能です。
(CPUの割り当ては、ビット0から順に割り当てられます)
> cpuaffinity /n:2 TestProcess.exe
マスク指定、数値指定がない場合は、現在のマスク値を表示します。
> cpuaffinity TestProcess.exe
対象プロセスが複数ある場合には同時に指定可能です。
> cpuaffinity /x:3 TestProcess1.exe TestProcess2.exe
正規表現により、対象プロセスを指定することも可能です。
(正規表現による指定では大文字と小文字を区別します。
シェルのワイルドカード形式ではありませんのでご注意を。)
> cpuaffinity /x:3 /g "TestProcess.*"
PIDにより、対象プロセスを指定することも可能です。
> cpuaffinity /x:3 /p 1531 2013
マスク設定可能な実行中のプロセスのPIDとマスクの一覧を表示します。
> cpuaffinity /l
CPUを限定した状態でコマンドを起動します
(起動可能なコマンドは1つのみです)
> cpuaffinity /x:3 /e "C:\Prg\TestProcess.exe"
論理CPUの物理CPUやCPUソケットへの割り当てを表示します。
> cpuaffinity /c
ハイパースレッディングが有効な場合は、例えば、物理CPUが4コアなら8つの論理CPUとして扱われます。
同じコア内の2つの論理CPUと、別のコアの論理CPUを2つ指定するのでは、効果は異なるでしょう。(下の2つの効果は違う)
/b:00000011
/b:00000101
必要に応じて、割り当てる論理CPUの位置を考慮してください。
論理CPUと物理CPUの関係は /c オプションをつけて実行することで確認可能です。
コマンドラインでの動作例)
マウスのクリック動作で変更したい場合には、上記のコマンドをショートカットにすると便利です。
ショートカットの作成は、cpuaffinity.exeをエクスプーラなどの右クリックで、
送る->ショートカットを作成、を選択します。
その後、ショートカットのプロパティからリンク先のコマンドに引数を追加します。
たとえば、12CPUの環境で、8CPU用のショートカットのリンク先として、
c:\bin\cpuaffinity /x:3fc /g "TMPGE.*"
12CPUすべて使うためのショートカットのリンク先として
c:\bin\cpuaffinity /x:fff /g "TMPGE.*"
というようなショートカットをディスクトップに作成しておくことで、
8CPU/12CPUが簡単に切替られます。
CPUの限定はアプリの次回起動時には引き継がれません。
常に起動時から限定するには、-e オプションを用いるか、
>cpuaffinity /x:3 -e TestProcess.exe
または、システムコマンド(cmd.exe)で
>start /affinity 3 TestProcess.exe
とし、ショートカットのリンク先に設定すれば可能です。
古い設計のプログラムやゲームアプリでは、多数のマルチコア環境では不具合が発生するアプリもあります。
その場合は、CPU数を1~4程度に限定すると動作することもあるようです。
実行ファイルは2種類あります
cpuaffinity.exe
32bit/64bit版のどちらのOSでも実行可能です。
割り当て可能な論理CPUは32個までです。
cpuaffinity64.exe
64bit版のOSでのみ実行可能です。
割り当て可能な論理CPUは64個までです。
64個を超える論理CPUのある環境で、複数のプロセッサー・グループにまたがるようなプロセスについての動作は未確認です。
動作可能環境
WindowsVista,Windows Server 2008 以後のWindowsOS
動作検証環境
Windows7 Enterprise (64bit)
Windows10 Pro(64bit)
Windows10 Home(32bit)
ライセンス
フリーウェアです。
免責事項
このプログラムを利用して生じた如何なる損害にも、作者はその責を負いません。
ダウンロード
md5:5a46b75c20ebf248b58a7030f44ccee6 cpuaffinity_070.zip
history
Ver0.20(2017/04/13)
自分用に使ってたツールを試しに公開してみる。
Ver0.30(2017/04/14)
PIDによる指定を追加(/p)
一覧を表示するオプション追加(/l)
Ver0.50(2017/04/17)
数値指定によるオプションを追加(/n)
コマンドを起動する機能を追加(/e)
Ver0.60(2017/04/18)
x64バージョンを追加
Ver0.70(2017/04/21)
論理CPU情報の表示を追加(/c)