/REALTIME
Управление ценностями действий в Windows
Давайте побеседуем о ценностях Windows процессов. В большинстве случаев «играться» с настройкой ценностей нет необходимости, но, время от времени, грамотный системный админ может посодействовать системе наиболее верно распределить процессорное время меж запущенными задачками. Одного рецепта нет, но методом «подбора и перебора» это полностью реализуемо. Где это может понадобиться? К примеру, в связке 1С-SQL можно отдать больше процессорного времени 1С и SQL, как более критичным к ресурсам процессам.
В общем случае, поглядеть и поменять ценность запущенного процесса можно через Task Manager
Windows NT/2000/7/2008
В Windows 2012 это “закопали» чуток глубже
Как видно из приведенных примеров, для вас доступно всего 6 ценностей (как выяснится позднее, это классы приоритетов). Достаточно? Microsoft считает, что да. Но давайте вспомним «легендарную» фразу Билла Гейста, который произнес, что «640 KB of RAM will be enough for everybody”. Но время показало, что это далековато не так. : )
А сейчас давайте разберемся, как это есть на самом деле.
На самом деле в Windows существует 32 уровня приоритета, от 0 до 31.
Они группируются так:
- 31 — 16 уровни настоящего времени;
- 15 — 1 динамические уровни;
- — системный уровень, зарезервированный для потока обнуления страничек (zero-page thread).
При разработке процесса, ему назначается один из 6 классов приоритетов:
- Real time class (значение 24),
- High class (значение 13),
- Above normal class (значение 10),
- Normal class (значение 8),
- Below normal class (значение 6),
- или Idle class (значение 4).
Посмотреть ценность процесса, как писалось выше, можно, используя Task Manager.
Приоритет каждого потока (базовый ценность потока) складывается из приоритета его процесса и относительного приоритета самого потока. Есть семь относительных ценностей потоков:
- Normal: таковой же как и у процесса;
- Above normal: +1 к приоритету процесса;
- Below normal: -1;
- Highest: +2;
- Lowest: -2;
- Time critical: устанавливает базисный ценность потока для Real time класса в 31, для других классов в 15.
- Idle: устанавливает базисный ценность потока для Real time класса в 16, для других классов в 1.
В последующей таблице показаны ценности процесса, относительный и базисный ценности потока.
Приоритет потока | Класс процесса | Класс процесса | |||||
Idle class | Below normal class | Normal class | Above normal class | High class | Real time class | ||
1 | Idle | Idle | Idle | Idle | Idle | ||
2 | Lowest | ||||||
3 | Below … | ||||||
4 | Idle class | Normal | Lowest | ||||
5 | Above … | Below … | |||||
6 | Below normal class | Highest | Normal | Lowest | |||
7 | Above … | Below … | |||||
8 | Normal class | Highest | Normal | Lowest | |||
9 | Above … | Below … | |||||
10 | Above normal class | Highest | Normal | ||||
11 | Above … | Lowest | |||||
12 | Highest | Below … | |||||
13 | High class | Normal | |||||
14 | Above … | ||||||
15 | Highest | ||||||
15 | Time critical | Time critical | Time critical | Time critical | Time critical | ||
16 | Idle | ||||||
17 | |||||||
18 | |||||||
19 | |||||||
20 | |||||||
21 | |||||||
22 | Lowest | ||||||
23 | Below … | ||||||
24 | Real time class | Normal | |||||
25 | Above … | ||||||
26 | Highest | ||||||
27 | |||||||
28 | |||||||
29 | |||||||
30 | |||||||
31 | Time critical |
Теперь, когда мы все это узнали, что же с сиим всем можно сделать? Ну, к примеру, начать использовать.
Как еще можно запустить процесс с «нестандартным» ценностью либо изменить?
Метод 1. Запустить задачу/процесс и поменять ценность через Task Manager.
Минусы метода:
- Доступно лишь 6 приоритетов
- Переключение ценностей делается мышкой, не автоматизируется.
Метод 2. Можно пользоваться командой START с надлежащими ключами
Доступные ключи, отвечающие за ценности, последующие (я специально опускаю ключи командной строчки команды START не имеющие дела к описываемому процессу работы с приоритетами):
Как лицезреем, команда START дает возможность запустить процесс все с теми же 6-ю ценностями, которые доступны через Task Manager
Минус метода:
- Доступно лишь 6 приоритетов
Метод 3. Внедрение утилиты wmic.exe
Как было показано выше, Task Manager, и команда START довольно неуклюжи для задачки назначения ценностей. Поглядим, как это использовать наиболее гибко. Будем применять утилиту wmic.exe.
Командная строка:
Пример:
или
Приоритеты (предопределенные):
- idle: 64
- below normal: 16384
- normal: 32
- above normal: 32768
- high priority: 128
- real time: 256
Вот маленький пример пуска wmic.exe для получения нужной информации
Используем команду:
Вы получите перечень действий, запущенных на вашем локальном компе. Сейчас выполните команду:
Результат:
Специально запустил несколько копий cmd.exe, чтоб иллюстрация была наиболее полной.
Теперь перечень действий ограничен лишь теми действиями, в имени исполняемого модуля которых находится строчка «cmd.exe». Обратите внимание на PID процесса(ов).
Теперь давайте попробуем отобрать интересующие нас процессы, используя конкретно WMI и не прибегая к обычным средствам командной строчки. Для этого просто напишите:
Результат:
Сравните приобретенные результаты. Запомните PID процесса CMD.EXE.
Командная строчка для пуска wmic.exe
Ну а сейчас можем поменять ценность определенного процесса (например с PID=8476):
или
А что дальше? Прикидывать, пробовать, подбирать и тонко регулировать ценности. Улучшая работу сервисов и действий, а также работу конечных пользователей.