利用できる RAM と CPU が十分残っているにもかかわらず、一度にいくつかのジョブを実行できないことに本当にイライラしています。これは、たとえば WinRAR やその他のディスク書き込みを大量に消費するものを使用して大きなアーカイブを解凍する場合など、ディスク使用量が原因です。
これを20%に制限したいとします。そうすればWinRARはディスクの書き込み能力の20%までしか使用しなくなり、
「OS がハングアップすることがなくなり、大きなアーカイブを解凍しているときでもマルチタスクを実行できるようになりました」
このようなディスク集約型のジョブを実行する場合。
アプリケーションごとにディスクの I/O を制限する方法を知っている場合、これは非常に役立ちます。
私の OS: Windows 7 Ultimate x64。プロセスのアフィニティと優先度を設定しようとしましたが、うまくいきませんでした。
答え1
でプロセスエクスプローラーNormal 8
通常の、Below normal 6
、Idle 4
優先度レベルに加えて、Background 4
という追加のレベルがありますLow I/O and Memory Priority
。は、対応する列に応じて I/O 優先度Background 4
を決定しますVery Low
。 これで、必要なことが達成されるはずです。
Vista以降では利用可能だと思います。Wikipediaによるとその時に I/O 優先順位付けが追加されました。
コメントから、コマンドラインからこれを実行したいようです。Process Explorerでそれが可能かどうかはわかりませんが、プレイスツールこの点では何か役に立つものがあるかもしれません。PsExec
優先度の低いプロセスを起動できることは知っています。そうでない場合は、実行中のプロセスの優先度を設定するためのコマンド ライン プログラムまたはスクリプトを作成するのはそれほど難しくないはずです。
答え2
@AlexandrZarubkinのコメントはもっと注目されるべきです。ロシア語フォーラム habr.comとても役に立ちます。トロトルエクスプローラーで右クリックして実行可能ファイルを起動するときに、優先度を永続的に変更できるようにするレジストリ ファイルを作成しました。
このテキストは.reg
ファイルとして保存し、Windows レジストリにインポートする必要があります。
Windows Registry Editor Version 5.00
;Copyright 2016 Trottle
;This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 3.
;This program is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
;See <http://www.gnu.org/licenses/> for more details.
[-HKEY_CLASSES_ROOT\exefile\shell\Bpc]
[HKEY_CLASSES_ROOT\exefile\shell\Bpc]
"HasLUAShield"=""
"MUIVerb"="Set base priority"
"subcommands"=""
[HKEY_CLASSES_ROOT\exefile\shell\Bpc\shell\01low]
"MUIVerb"="Idle CPU, lowest IO, low paging"
"Icon"="comres.dll,9"
[HKEY_CLASSES_ROOT\exefile\shell\Bpc\shell\01low\command]
@="cmd /q /c echo Windows Registry Editor Version 5.00>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & for /f \"delims=<\" %%i in (\"%1\") do echo [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\%%~nxi\\PerfOptions]>>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & echo \"CpuPriorityClass\"=dword:00000001>>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & echo \"IoPriority\"=dword:00000000>>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & echo \"PagePriority\"=dword:00000001>>%%TEMP%%\\pr.reg & regedit /s %%TEMP%%\\pr.reg & del %%TEMP%%\\pr.reg & msg * %~ni priority is set to IDLE"
[HKEY_CLASSES_ROOT\exefile\shell\Bpc\shell\02below]
"MUIVerb"="Below normal CPU, low IO"
"Icon"="comres.dll,12"
[HKEY_CLASSES_ROOT\exefile\shell\Bpc\shell\02below\command]
@="cmd /q /c echo Windows Registry Editor Version 5.00>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & for /f \"delims=<\" %%i in (\"%1\") do echo [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\%%~nxi\\PerfOptions]>>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & echo \"CpuPriorityClass\"=dword:00000005>>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & echo \"IoPriority\"=dword:00000001>>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & echo \"PagePriority\"=->>%%TEMP%%\\pr.reg & regedit /s %%TEMP%%\\pr.reg & del %%TEMP%%\\pr.reg & msg * %~ni priority is set to BELOW NORMAL"
[HKEY_CLASSES_ROOT\exefile\shell\Bpc\shell\03above]
"Icon"="comres.dll,8"
"MUIVerb"="Above normal CPU"
[HKEY_CLASSES_ROOT\exefile\shell\Bpc\shell\03above\command]
@="cmd /q /c echo Windows Registry Editor Version 5.00>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & for /f \"delims=<\" %%i in (\"%1\") do echo [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\%%~nxi\\PerfOptions]>>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & echo \"CpuPriorityClass\"=dword:00000006>>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & echo \"IoPriority\"=->>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & echo \"PagePriority\"=->>%%TEMP%%\\pr.reg & regedit /s %%TEMP%%\\pr.reg & del %%TEMP%%\\pr.reg & msg * %~ni priority is set to ABOVE NORMAL"
[HKEY_CLASSES_ROOT\exefile\shell\Bpc\shell\04high]
"MUIVerb"="High CPU"
"Icon"="comres.dll,16"
"CommandFlags"=dword:00000040
[HKEY_CLASSES_ROOT\exefile\shell\Bpc\shell\04high\command]
@="cmd /q /c echo Windows Registry Editor Version 5.00>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & for /f \"delims=<\" %%i in (\"%1\") do echo [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\%%~nxi\\PerfOptions]>>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & echo \"CpuPriorityClass\"=dword:00000003>>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & echo \"IoPriority\"=->>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & echo \"PagePriority\"=->>%%TEMP%%\\pr.reg & regedit /s %%TEMP%%\\pr.reg & del %%TEMP%%\\pr.reg & msg * %~ni priority is set to HIGH"
[HKEY_CLASSES_ROOT\exefile\shell\Bpc\shell\06ask]
"MUIVerb"="Show current priorities"
"Icon"="shell32.dll,23"
[HKEY_CLASSES_ROOT\exefile\shell\Bpc\shell\06ask\command]
@="cmd /q /c for /f \"delims=<\" %%i in (\"%1\") do reg query \"HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\%%~nxi\\PerfOptions\" /s | msg *"
[HKEY_CLASSES_ROOT\exefile\shell\Bpc\shell\07default]
"MUIVerb"="Restore to default"
"Icon"="comres.dll,4"
[HKEY_CLASSES_ROOT\exefile\shell\Bpc\shell\07default\command]
@="cmd /q /c echo Windows Registry Editor Version 5.00>%%TEMP%%\\pr.reg & echo.>>%%TEMP%%\\pr.reg & for /f \"delims=<\" %%i in (\"%1\") do echo [-HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\%%~nxi\\PerfOptions]>>%%TEMP%%\\pr.reg & regedit /s %%TEMP%%\\pr.reg & del %%TEMP%%\\pr.reg & msg * %~ni priority is restored to default"
; If you do not want to have uninstaller you can skip next part:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\BpcSubMenu]
"DisplayName"="'Set base priority' submenu"
"DisplayIcon"="imageres.dll,73"
"UninstallString"="cmd /q /c echo Windows Registry Editor Version 5.00>%TEMP%\\pr.reg & echo.>>%TEMP%\\pr.reg & echo [-HKEY_CLASSES_ROOT\\exefile\\shell\\Bpc]>>%TEMP%\\pr.reg & echo.>>%TEMP%\\pr.reg & echo [-HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\BpcSubMenu]>>%TEMP%\\pr.reg & regedit /s %TEMP%\\pr.reg & del %TEMP%\\pr.reg"
"DisplayVersion"="1.1"
"URLInfoAbout"="http://habrahabr.ru/post/317802/"
"NoModify"=dword:00000001
"NoRepair"=dword:00000001
優先値リスト
IoPriority Value Priority
0 Very Low
1 Low
2 Normal
3 High
4 Critical (only for memory io)
PagePriority Value Priority
0 Idle
1 Very Low
2 Low
3 Background
4 Background
5 Normal