Win7でプロセスまたはスレッドのI / O優先度を変更する方法は?


32

Process Explorerは、特定のスレッドの有効なIO優先度を表示できますが、変更はできません。IO優先度のサポートは比較的新しい機能であるため、ほとんどのプログラムは独自のIO優先度を設定しません。デフォルトでは、IO優先度は(プロセスの優先度ではなく)スレッドの優先度から派生しているように見えますが、Process Explorerでも変更できません。

特定のスレッド/特定のプロセスのすべてのスレッドのIO優先度を変更するのに役立つ他のツールはありますか?


スタックオーバーフロー上のほぼ同じ質問があります:stackoverflow.com/questions/301290/...は
Mehper C. Palavuzlar

3
@ [Mehper C. Palavuzlar] trueですが、これは私が開発したソフトウェア用ではありません-サードパーティ製ソフトウェアでこれを行う既製のツールを探しています。
RomanSt

回答:


10

既製ツール

手動のユーザーアクションまたは自動化と永続化によって、プロセスI / Oの優先順位を設定するサードパーティ製ツールは、Process Lassoです。ほとんどすべてのプロセス設定を設定でき、永続的に、またはルールによって設定できます(たとえば、これが発生した場合、そのI / O優先度を変更します)。

プログラマティックアンサー

答えは、NTネイティブAPIであるNTSetInformationProcessへの単純なAPI呼び出しです。2008 DDKでは、クラス「IoPriority」として定義されています。NT6では、Very Low(バックグラウンド)とNormalの 2つのレベルのみがサポートされています。技術的には、クリティカル、高、標準、低、および非常に低の5つのレベルが定義されています。クリティカルレベルは、ページング操作用に予約されています。他のデータはありません。

ただし、I / O優先度を使用する適切な方法は、PROCESSS_MODE_BACKGROUND_BEGINを指定して、Windows API SetProcessPriorityClassを呼び出して「バックグラウンドモード」を開始することです。これにより、IDLE CPU優先度クラスとともに、非常に低い(バックグラウンド)I / O優先度が使用されます。完了したら、PROCESS_MODE_BACKGROUND_ENDで元に戻します。

SetThreadPriorityの APIは、特定のスレッドのために、この同じバックグラウンドモードを許可します。ここで、THREAD_MODE_BACKGROUND_BEGIN / ENDを指定します。


私はWindowsプログラミングやOSレベルのものには興味がありませんが、スレッドの優先順位を上げることを聞いたことがありますが、THREAD_PRIORITY_TIME_CRITICALまではあなたのプログラムやプログラムで可能ですか?または、スレッドCPUの優先順位ではなく、調整できるのは依然としてIO PRIORITYのみですか?IOの優先順位を変更しても、CPU使用率に大きな違いはないでしょう。
barlop

はい。両方を設定して永続化できます。他の多くの設定も、ルール(CPUアフィニティなど)に基づいて設定または動的に変更できます。I / O優先度はCPU優先度とは異なります。
ダイアスタ

それは「サードパーティのソフトウェアでこれを行う既製のツール」ではありません。
シーズティマーマン

申し訳ありませんが、質問は編集された可能性があると思います。明らかに、プログラム側から編集されていたためです(編集されていない)。Process Lassoは、「サードパーティソフトウェアでこれを行うための既製のツール」です。参照してくださいbitsum.com
dyasta

23

誰もそれを気にしなかった後にこれを開発しました:https : //sourceforge.net/projects/iopriority/(オープンソース)

このプログラムはプロセスのI / O優先度を設定でき、すべてのスレッドがすぐにその影響を受けます。プロセスではなくスレッドで動作するように変更するのは非常に簡単です。


1
Server 2012R2でプロセスを高優先度に変更することを許可していないことに気付きました。
jftuga 14

14

ProcessHackerは、任意のプロセスのIO優先度を変更できるGUIツールです。


なぜルッシノヴィッチがしたように見えるのですか?
ダニエルモシュモンドール

1
@DanielMošmondorProcExpとその制限に触発されたのでしょうか?ProcExpは、バージョン14の後に私のラップトップ上で完全に間違ってCPU使用率を示したので、私は個人的に切り替える
RomanSt

1
それだけでなく、ProcExpはコンプなどをBSODすることもできました。無料ですか?
ダニエルモシュモンドール

@DanielMošmondorはい、さらに、実際にはあらゆる面でProcExp以上のことをしているようです。UIはわずかに異なりますが、実際には非常に機能的です。
RomanSt

1

私はPRIOと呼ばれる無料アプリの一部です。これは、(特に)フットプリントが非常に小さい(1 MB未満の)プロセス優先度セーバーです。インストール後、必要になるまでバックグラウンドでサイレントに実行され、そのインターフェイスはWindowsタスクマネージャーに直接組み込まれ、機能を拡張して、追加された機能が常にタスクマネージャーの一部であるかのようになります。優先度を変更する目的でタスクマネージャーでプロセスを右クリックすると、プロセスのCPU優先度だけでなくそのI / O優先度も変更できるため、PRIOの追加機能の一部が明らかになります(質問を出してください) 、必要に応じて新しい設定を保存することもできます。これにより、プロセス(プログラム)が実行されるたびに、CPUとI / Oプロセスの両方の優先順位が設定され保存されます。

アプリには、Windowsタスクマネージャーのさまざまなタブの機能を拡張する他の機能もあります。バージョンは32ビットシステムと64ビットシステムの両方に存在し、アプリは個人での使用は無料です。


素晴らしいアプリのようですね。リンクを手に入れましたか?
スティンデウィット

1
PRIOを意味する場合、さまざまなコンテンツアグリゲーター(cnetなど)から入手できますが、開発者のWebサイトから直接prnwatch.com/prio
Mike Mounier
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.