Войти

Показать полную графическую версию : Как задать ВЫСОКИЙ приоритет ввода/вывода(IoPriority) и PagePriority через реестр/cmd


Страниц : [1] 2

19w85
16-06-2011, 14:05
Так задается приоритет "Very Low":
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\xyz.exe\PerfOptions]
"IoPriority"=dword:00000000

Так задается приоритет "Low":
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\xyz.exe\PerfOptions]
"IoPriority"=dword:00000001

Так задается приоритет "Normal" (идет по дефолту):
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\xyz.exe\PerfOptions]
"IoPriority"=dword:00000002

Вопрос: как через реестр задать для нужного exe-шника хоть какой-нибудь приоритет выше "Normal"? (Выше среднего, высокий и т.п.? Например, программа Process Lasso умеет задавать приоритет ввода/вывода "Высокий", т.е. установка более высокого приоритета всё-таки возможна, но через реестр ни при каких значениях мне это не удалось)

P.S. Если через реестр задать высокий приоритет всё-таки невозможно, то тогда может быть кто-нибудь подскажет как через командную строку запустить с высоким приоритетом?

Vadikan
16-06-2011, 15:14
19w85, если верить этой статье (http://www.bitsum.com/pl_io_priority.php) (судя по всему, человек изучал вопрос), Microsoft не рекомендует задавать приоритет I/O для приложений напрямую. Вместо этого рекомендуется задавать приоритет CPU, откуда уже производной идет приоритет I/O. Поэтому и нет соотв. параметров реестра. В той же статье есть ответ на вопрос, как это делает Process Lasso.

Процессу приоритет задается в командной строке: strat /?

19w85
16-06-2011, 15:48
Vadikan, спасибо за ответ.

В той же статье есть ответ на вопрос, как это делает Process Lasso. »
А в двух словах, не переведете-перескажите? (не силен в английском и переводчик тут не очень помогает)

Вместо этого рекомендуется задавать приоритет CPU, откуда уже производной идет приоритет I/O. »
А я читал (например, даже тут http://www.oszone.net/4364/Windows_Vista), что приоритет на CPU как раз не влияет на приоритет I/O и фоновый процесс с низким приоритетом CPU (но дефолтовым нормальным приоритетом I/O) будет также "тормозить" систему, как если бы он был с обычным приоритетом CPU.


Процессу приоритет задается в командной строке: strat /? »
В данном контексте, конечно, что же имелось ввиду задание приоритета I/O при запуске процесса через батник. (в процессе поиска для unix попадались утилиты, для windows консольных утилит пока не нашёл :()

Vadikan
16-06-2011, 16:05
А в двух словах, не переведете-перескажите? (не силен в английском и переводчик тут не очень помогает »
Там идет речь о программных методах, для разработчиков. Вас же интересует совсем другое.
В данном контексте, конечно, что же имелось ввиду задание приоритета I/O при запуске процесса через батник. »
Повторю свою мысль, простите уж за дублированиеВместо этого рекомендуется задавать приоритет CPU, откуда уже производной идет приоритет I/O.
<...>
Процессу приоритет задается в командной строке: strat /?»
И разжую: start /high /d"C:\Windows" notepad.exe

Vancouver
16-06-2011, 17:06
Уже постилось, на примере μTorrent Here be dragons: Управление памятью в Windows как оно есть [3/3] (http://habrahabr.ru/blogs/windows/107637/)

19w85
17-06-2011, 06:01
Повторю свою мысль, простите уж за дублирование »
Повоторяться не стоит, т.к. это всё равно не ответ на поставленный вопрос. Командой start я, конечно, же умею пользоваться.
Запущенный таким образом с повышенным приоритетом CPU до High НИКАК не влияет на I/O приоритет, он остаётся нормальным: http://i23.fastpic.ru/big/2011/0617/9f/576d6d6e7e5cb6fc474ee81fb97cae9f.png
Т.е. вот тоже повторюсь:
А я читал (например, даже тут http://www.oszone.net/4364/Windows_Vista), что приоритет на CPU как раз не влияет на приоритет I/O и фоновый процесс с низким приоритетом CPU (но дефолтовым нормальным приоритетом I/O) будет также "тормозить" систему, как если бы он был с обычным приоритетом CPU. »
Приоритет CPU и I/O разные вещи. Меня интересует повышение именно второго, т.е. I/O

Уже постилось, на примере μTorrent Here be dragons: Управление памятью в Windows как оно есть [3/3] »
Что именно постилось? Эту статью я уже читал ранее. Ответа на сабж я там не нашёл ни тогда, ни сейчас.

Раз уж выяснилось, что штатными средствами Win7 установка High приоритета на I/O не предусмотрена, то уточняю вопрос:
Возможно ли тогда с помощью какой-нибудь консольной утилиты запустить нужный процесс с High приоритетом I/O?

user_z
17-06-2011, 07:19
Я когда-то искал способ повышения PagePriority до 6, но как оказалось, стандартными средствами этого не сделать. Тоже самое и с приоритетом В/В. Функция установки приоритета В/В - это функция ядра IoSetIoPriorityHint (http://msdn.microsoft.com/en-us/library/ff549710.aspx). Возможные варианты значений приоритета В/В (http://msdn.microsoft.com/en-us/library/ff550594.aspx). Вот тут уже интересно - высокий и критический приоритетет зарезервирован системой.
Например, программа Process Lasso умеет задавать приоритет ввода/вывода "Высокий", т.е. установка более высокого приоритета всё-таки возможна, но через реестр ни при каких значениях мне это не удалось) »
Следует проверить через windows performance tools, я не думаю, что происходит реальное изменение приоритета В/В. Если происходит, то здесь (http://blog.misterfoo.com/2010/07/process-priority-utility.html) есть консольная утилита для установки CPU, memory и I/O приоритетов, но только Normal и ниже. Вместе с ней есть исходный код, который Вы можете отредактировать и скомпилировать по-своему усмотрению.

19w85
17-06-2011, 07:37
Я когда-то искал способ повышения PagePriority до 6, но как оказалось, стандартными средствами этого не сделать »
И на каком нестандартном варианте повышения в итоге остановились?

Стандартным средствами (через реестр) как оказалось нельзя даже задать дефолтовые PagePriority=5
(например, планирощик заданий запускает все процессы с приоритетом I/O=Low и PagePriority=3. Через реестр можно это "исправить" для нужных процессов и "восстановить" I/O=Normal, а вот для PagePriority только максимум PagePriority=4 можно задать)

Следует проверить через windows performance tools, я не думаю, что происходит реальное изменение приоритета В/В. »
Думаете все эти "Process Explorer", "Process hacker", "Process Lasso" ошибочно пишут I/O=High для тех процессов где поднят приоритет до высокого?

Если происходит, то здесь есть консольная утилита для установки CPU, memory и I/O приоритетов, но только Normal и ниже. »
Normal и ниже можно и через рестр задать...:(

user_z
17-06-2011, 07:52
И на каком нестандартном варианте повышения в итоге остановились? »
Оставил как есть :(
Стандартным средствами (через реестр) как оказалось нельзя даже задать дефолтовые PagePriority=5
(например, планирощик заданий запускает все процессы с приоритетом I/O=Low и PagePriority=3. Через реестр можно это "исправить" для нужных процессов и "восстановить" I/O=Normal, а вот для PagePriority только максимум PagePriority=4 можно задать) »
Ага, знаю. Такое ощущение, что пользователей ограничивают.
Думаете все эти "Process Explorer", "Process hacker", "Process Lasso" ошибочно пишут I/O=High для тех процессов где поднят приоритет до высокого? »
Сейчас испытаю, чуть позже отпишусь. Дело в том, что высокий приоритет - зарезервирован на уровне ядра.
Normal и ниже можно и через рестр задать... »
Там же есть исходный код - замените или допишите свою константу и скомпилируйте.

user_z
17-06-2011, 08:44
чуть позже отпишусь. »
Интересно то, что я не нашел в WPT высокого приоритета - там есть <=Low и >=Normal. Поэтому пришлось протестрировать "в живую":
http://s19.radikal.ru/i192/1106/1e/d5b67ecad463.png
Так что Вы правы - установка высокого приоритета возможна.
А что Вам мешает использовать многократно упоминаемый Process Lasso» для Вашей цели? Ведь в нем можно установить
http://s42.radikal.ru/i098/1106/25/f1e20677eda7.png

19w85
17-06-2011, 09:06
Так что Вы правы - установка высокого приоритета возможна.
Отлично :)

А что Вам мешает использовать многократно упоминаемый Process Lasso»
Эту прогу нужно устанавливать + к этому придется держать постоянно запущенным ядро этой проги (которое еще много чего будет отслеживать судя по функционалу), собственно которое и будет поддерживать нужный приоритет для заданных запускаемых процессов.
А так никакого софта не нужно, ни устанавливать, ни держать потом запущенным (реестр вообще идеально, и батник тоже всё ещё неплохо)

Там же есть исходный код - замените или допишите свою константу и скомпилируйте. »
При компилировании исходного кода из архива по той ссылке сыпятся куча ошибок (уже на двух компиляторах проверил)...т.е. еще ничего даже не редактировал в нём.

user_z
17-06-2011, 09:23
При компилировании исходного кода из архива по той ссылке сыпятся куча ошибок (уже на двух компиляторах проверил)...т.е. еще ничего даже не редактировал в нём. »
Я сейчас установлю VS и посмотрю, может у меня что получиться.

Valeant
17-06-2011, 09:28
Уточню согласно книги Windows Internals Fifth Edition - стр.547 существует:
I/O Priority ---------- Usage
Critical --------------- Memory manager
High ----------------- Not use
Normal -------------- Normal application I/O
Low ----------------- Not use
Very Low ----------- Schedule, Superfetch, defrag, content index, background activities

user_z
17-06-2011, 09:56
Valeant,
Это верно для Vista, в Seven Schedule и defrag получают приоритет Low

19w85
17-06-2011, 10:30
Я сейчас установлю VS и посмотрю, может у меня что получиться. »
Ну как результаты?

user_z
17-06-2011, 10:59
Ну как результаты? »
Скомпилировалось без ошибок, поменял константы, но высокий приоритет
http://s52.radikal.ru/i138/1106/d3/d7b63c272b10.png
Да я вообщем-то и не программист - в школе на паскале только писал, так что здесь мои возможности закончились. :dont-know
Интуитивно могу сказать, что нужен выход на уровень ядра, то есть нужен драйвер.

19w85
17-06-2011, 12:21
но высокий приоритет не ставит, зараза »
Присмотрелся, эта утилитка меняется сразу все три параметра. В исходном виде может пригодится разве что вернуть PagePriority=5 для процессов запущенных планировщиком заданий.

А если подправить значение PagePriority на большее 5, тоже не поставится?

P.S. А для установки High приоритета I/O через батник я всё-таки нашёл работающий вариант:
http://processhacker.sourceforge.net/forums/viewtopic.php?f=14&t=139

Vadikan
17-06-2011, 12:30
Запущенный таким образом с повышенным приоритетом CPU до High НИКАК не влияет на I/O приоритет, он остаётся нормальным »
Я и не говорил, что это изменит приоритет I/O. Process Explorer показывает приоритет "как есть". Но вопрос в том, что на самом деле происходит, если сравнить запуск процесса с высоким приоритетом CPU (и обычным I/O) с запуском с высоким I/O, который в принципе не предусмотрен для приложений.

Ведь установка приоритета у вас не является самоцелью, не так ли? Должно быть, вы преследуете какую-то более конкретную цель. И раз уж вы так упорно ее преследуете, я полагаю, вы проводите сравнительное тестирование производительности приложения с разными приоритетами. Опубликуйте результаты!

19w85
17-06-2011, 13:00
И раз уж вы так упорно ее преследуете, я полагаю, вы проводите сравнительное тестирование производительности приложения с разными приоритетами. Опубликуйте результаты!»
Я не провожу сравнительное тестирование. Я ищу баланс при котором обе нужные мне программы (одна из них utorrent, вторая специфическая и требовательная, критичная к задержкам) будут работать и не мешать друг другу. Понижение приоритетов utorrent'а меня не устроило, поэтому решил подойти с другой стороны. По первым наблюдениям High I/O ничего мне не дало, видимо проблема была не в этом. А вот с PagePriority пока не определился, поэтому всё ещё ищу способ задать значение больше 5.

user_z
17-06-2011, 13:21
А если подправить значение PagePriority на большее 5, тоже не поставится? »
Нет, ни 6, ни даже 0 не ставит. Только от 1 до 5.

uTorrent у меня работает с Normal I/O и Memory Priority = 0




© OSzone.net 2001-2012