Исправляем HPET и повышаем производительность в Windows 10/11
Если вы увлекались киберспортом или оптимизацией Windows, то наверняка слышали о влияние высокоточного системного таймера HPET на общую производительность ПК. Но знаете ли вы, что, начиная с Windows 10 22H2 и Windows 11, компания Microsoft изменила классическую логику работы системного таймера, и прошлые команды, которые ранее позволяли существенно повысить производительность, более не работают. В этом небольшом материале вы узнаете, как исправить эту проблему и вернуть привычное поведение системного таймера HPET/TSC в новых версиях Windows, существенно ускорив работу своего компьютера.
Как было раньше
Чтобы не нагружать вас лишней технической информацией, достаточно будет сказать, что ранее отключение или изменение значений системного таймера HPET глобально влияло на все процессы в Windows, существенно повышая отклик и плавность работы приложений и игр. Теперь же частота прерывания системного таймера HPET/TSC не функционирует на глобальном уровне ОС и не зависит от других процессов. Короче говоря, таймер теперь работает лишь для запущенных на переднем фоне приложений и не может опускаться ниже принудительно заданных значений, что существенно ломает многие старые игры и не позволяет пользователю добиться былой производительности. Подробнее почитать про всё это вы можете, перейдя по ссылке.
Исправляем HPET
1. Нажимаем Win+R и вводим команду regedit. В появившемся окне переходим в раздел kernel и создаём новый параметр Dword32 с именем GlobalTimerResolutionRequests и значением 1 в шестнадцатеричной системе счисления. Или воспользуйтесь заранее уже готовым файлом с нужными настройками.
2. Нажимаем правым кликом мыши на «Пуск» и выбираем «Диспетчер устройств». Для отключения HPET и активации таймера TSC мы должны в разделе «Системные устройства» отключить «Высокоточный таймер событий» иногда он подписан как High Precision Even Timer. Правый клик мыши>>"Отключить устройство".
3. Теперь нам осталось только ввести команды для отключения встроенного программного таймера Windows и технологии экономии электроэнергии для ноутбуков. Вновь нажимаем Win+R и вводим команду CMD.
В появившемся окне вводим команды:
bcdedit /set disabledynamictick yes
bcdedit /set useplatformtick yes
bcdedit /set useplatformclock false
bcdedit /deletevalue useplatformclock
После перезагрузки ПК вы сразу почувствуете разницу в отклике Windows и плавности работы мыши. Однако, чтобы ещё сильнее ускорить работу компьютера, необходимо принудительно зафиксировать значения системного таймера TSC на минимальных значениях.
4. Выполним установку системной службы Windows, отвечающей за минимальное значение системного таймера.
- Скачиваем и извлекаем папку архива в корень любого диска.
- Переходим в папку установщика и запускаем не от имени администратора файл Installer.bat.
- В появившемся окне выбираем желаемый таймер. Я советую 2 или 4.
- Дожидаемся окончания установки. (После установки не удалять папку установщика).
- Проверяем значение таймера, нажав 8.
- Если всё прошло успешно, то значение системного таймера будет равняться 0.5 мс.
Откат изменений
Если вы заметили отрицательный эффект от отключения системного таймера HPET, то удалите в реестре Windows запись GlobalTimerResolutionRequest и вновь включите «Высокоточный таймер событий» в «Диспетчере устройств». Не забыв удалить системную службу таймера и ввести в cmd следующие команды:
bcdedit /deletevalue disabledynamictick
bcdedit /deletevalue useplatformtick
Заключение
Вот, собственно, и всё! Всего за пару не хитрых шагов мы исправили оплошность корпорации Microsoft, вернув себе классическое поведение системного таймера Windows, существенно ускорив работу приложений и игр. Не говоря уже о самой ОС. Уважайте свободу, используйте только проверенное ПО и ни в коем случае не позволяйте компаниям диктовать вам свои условия. С вами был Павел. Ещё увидимся!
Обновление
Я провёл дополнительное тестирование в новых играх, используя Windows 10 версии 22H2 (1945.3636). И могу с уверенностью утверждать, что принудительное отключение высокоточного системного таймера HPET позволяет добиться лучшей производительности не только в старых, но и в новых играх. Например, дважды прогоняя встроенный бенчмарк Cyberpunk 2077, отчётливо видна разница в минимальном и среднем FPS. Не говоря уже про отсутствие эффекта «Желе». Миф подтверждён: HPET следует принудительно отключать для максимальной плавности в играх и рабочем ПО!
Источник: hdqwalls.com
176 комментариев
Добавить комментарий
https://www.mediafire.com/file/kk7v8e65vqvrzvd/prerivania+(2).reg
https://www.mediafire.com/file/pc14y0cw3inyhdw/STRservice+Install+3+(1).zip
Жаль недавним пользователям не даёт повышать рейтинг автора…
На 5800X3D фпс в тесте киберпанк в 11 винде — немного подрос
Я, конечно, киберкатлет тоже не особо, но не стал бы оскорблять их таким сравнением
Ну и к сожалению результат скорее отрицательный. ) Win11, 13700k, 32@7400, RTX2070. Talos Principle 2 — 4K, DLSS, High: 42-45FPS до, 37-40FPS после.
https://www.youtube.com/watch?v=s03MJwEbgRA
А всё остальное спокойно работает на операционных системах с яйцами пингвина
Откуда вы эту ересь берете?
HPET ON=Желе.
https://www.xbitlabs.com/how-to-get-better-latency-in-windows/
Не удается открыть данные конфигурации загрузки.
Отказано в доступе.
c:\Windows\System32>bcdedit /set useplatformtick yes
Не удается открыть данные конфигурации загрузки.
Отказано в доступе.
C:\Windows\system32>bcdedit /set disabledynamictick yes
Операция успешно завершена.
C:\Windows\system32>bcdedit /set useplatformtick yes
Операция успешно завершена.
Спасибо. ))
https://photo.sibnet.ru/upload/imggreat/17009136047618111.jpg
Видимо, какие-то нюансы всё-таки есть. Да и у буржуев есть немало научных статей, утверждающих, что под виндой этот таймер проблемный.
https://photo.sibnet.ru/upload/imggreat/17009161148518111.jpg
https://photo.sibnet.ru/upload/imggreat/17009163655418111.jpg
Большое спасибо. ))
А если я такую настройку сделаю, разницу замечу или можно не дергаться?
Задачи: инет, офис, 2D-графика (не много), VS/VSCode, IntellijIDEA, (C++, Python, Kotlin, Go). Программирую для души.
Стоит ковырять систему?
Основной ноут на i12500H 16/512. Его ковырять не вижу смысла — отлично со своими задачами справляется.
А вот второй 14" на Celeron 4020 4/SSD 256+eMMC 64 — явный тормоз. Так что даже чуть-чуть ускорить и то будет польза…
Тормоз потому, что это Атом, 2 ядра 2 потока.
Turbo Speed:
2.8 GHz
Для работы у меня другая машина.
Нельзя что-то нее требующее аутентификации, ну или хотя бы ссылку на гугл
https://www.mediafire.com/file/kk7v8e65vqvrzvd/prerivania+(2).reg
https://www.mediafire.com/file/pc14y0cw3inyhdw/STRservice+Install+3+(1).zip
Лично я отчётливо вижу падение среднего fps. чяднт?
Правда это все не от шаманства с HPET идет. А от настройки квантов времени Windows от установленной утилиты STR Service. Которая не системные таймеры на самом деле настраивает, а увеличивает частоту переключения между процессами в планировщике Windows до максимально возможных 0.5 мс (переключение между потоками не менее 2000 раз в секунду).
Что на самом деле СНИЖАЕТ среднюю производительность (т.к больше «накладных расходов» ресурсов на переключение между потоками уходит), но зато сильно увеличивает стабильность и уменьшает задержки. Поэтому по умолчанию оно и не стоит всегда на максимум — т.к. у увеличенной частоты переключения потоков есть как плюсы так и минусы.
На скриншоте и в файле GlobalTimerResolutionRequests
Где правильно?????????????
Удалите сервис (через тот же батник) — папка удалится.
ЗЫ:
Применил «улучшающий твик». В Superposition получил 45 FPS. Даже при открытии браузерной игры мыша рывками пошла.
Отменил твик и вернул все назад как было — Superposition выдал положенные 60.
Где то на пару фпс лучше, где то так же, а где хуже, на глаз все так же.
Ничего не отключаю.
https://youtu.be/U1c-Poax6ng?si=EcUjAdzIgl6ivkS5
Но больше чем уверен, что на практике, без монимторинга в углу ты ничего не заметишь.
Из ветки Ryzen 3x00 на оверах
Не удается открыть данные конфигурации загрузки.
Отказано в доступе.»
Как с этим бороться?
Перезагрузил. И… Никаких изменений не заметил. Цифры теста такие же и остались.
Наверное, у меня ноут не настолько сильно загружен, чтобы разницу увидеть…
ClockRes v2.0 — View the system clock resolution
Copyright © 2009 Mark Russinovich
SysInternals — www.sysinternals.com
Maximum timer interval: 15.625 ms
Minimum timer interval: 0.500 ms
Current timer interval: 1.000 ms
.
. If service is installed correctly
. current timer should read 0.500 ms
я скачал TimerResolution там принудительно ставится 0.500
Решил снова включить ничего не поменялось хотя до этого всё было хорошо
Теперь даже при выключенном или включенном ФПС низкий, хз что делать
также целостность винды проверить командой
p.s запускал не от админа
Может что-то из перечисленного поможет?
не меняется на 0.500
почему?
Люди, подскажите как и где это менять!?
Если удалить путь, то значение возвращается в дефолтное. Поправьте если я не прав.
bcdedit /set disabledynamictick yes (выключает динамический тик)
bcdedit /set useplatformtick yes (включает RTC тик, который не динамический тик)
bcdedit /set useplatformclock false (отключает HPET, хотя уже по умолчанию стоит TSC clock)
bcdedit /deletevalue useplatformclock (удаляет прошлую запись и переводит в useplatformclock к значению по умолчанию, т.е. HPET-disable, TSC-enable)
По крайней мере так в 23H2.
Если все верное, что я написал, то зачем дублировать.
Достаточно будет на дефолтном BCD выполнить:
bcdedit /set useplatformtick Yes (чтобы включить RTC тик, который статичный), а вместо HPET уже работает TSC.
При установке С# или C++ версий в STRservice Install 3 на Ryzen 5800x / 6900XT (Windows 11 Enterprise IOT) рисует:
Current Timer Interval: 1ms
— Изначально пробовал 2 вариант — показало 1ms;
— Удалил 2 вариант и поставил 4 — показало ту же 1ms.
Если я не ошибаюсь, Timer Bench 1.5 показал уменьшение максимального Frame Time c 30 до 4.
Однако, Current Timer Interval 0.5 не рисует.
Подскажите, пожалуйста, в чём может быть дело. Спасибо!
Вот ссылка на Результаты (Google Фото): https://photos.app.goo.gl/cd26Q4sAMnbVetZT6
1) какую лучше версию для моей конфигурации установить;
2) я изменил название папки с «STRservice Install 3» (лежит она в корне на С:\) — критично ли это;
3) параметр свойств для SetTimerResolutionService.exe «от Администратора» сделать до установки / запуска или после;
4) батник может всё же от Администратора тоже запускать.
Большое спасибо!
Ничем не отличаются, это одна реализация на разных ЯП. Версия на C++ потребляет меньше всех, но требует VC Redicst 2010. Все остальные привязаны к NET. Fraemwork.
Нет, но избегайте кириллицы.
Попробуйте и так и так. Windows 11 весьма паршивая ОС.
Смотрите предыдущий ответ.
Попробовал разное — вот что из этого получилось:
— при запуске Батника «от Администратора» — установка не производится — файл не создаётся и командная строка, соответственно, рисует, что файл не найден;
— при выставлении параметра свойств для установочных SetTimerResolutionService.exe «от Администратора» в подпапках — ничего не меняется, Current Timer Interval — 1ms, и это, оказывается, в моменте. Если несколько раз подёргать «check the current resolution», то в большинстве запросов сразу после установки он показывается как максимальный 15.625ms, а иногда — 1ms;
— пока писал сообщение решил многочисленными запросами подёргать «check the current resolution» — ни разу не показал 15.625, всегда 1ms… Это какая-то шутка :D;
— добавление параметра «от Администратора» для! установленного SetTimerResolutionService.exe ничего не меняет, та же 1ms.
Можете что-то посоветовать?
Как вообще понимать такое поведение и результат?
Спасибо!
Актуально для процессоров Ryzen и Intel с миниядрами. Для остальных конфигураций, HPET лучше не трогать!
Введите команды из инструкции. Проверьте FPS в любом популярном игровом бенчмарке.
Если не заметите разницы, то откатите представленными командами выше и вновь введите bcdedit /enum.
У меня 2080 ti и Quest 3, подключаю через кабель type-c/type-c напрямую в virtual link port на видеокарте. Крайний раз, драйвера устанавливал при помощи NVClean, отключив Hdcp и ещё включив MSI line. Через Msi tool 3 удостоверился что всё включено ( MSI line ), выставил режим High для видеокарты. Также USB type c порт ( Virtual link ) имеет MSI line строку ( минус 14 или около того ), на этом порте тоже можно ставить режим High или не обязательно? Я к тому, что это High режим он получается даст ещё меньше задержки при передаче данных?
Если знаете, прокомментируйте пожалуйста.
На intel ведет к палению fsp в играх!
Но при запуске каких-то программ чувствительных к задержкам, как то например игры или скажем видеоплеер должно уменьшаться, желательно до 1 ms или даже 0.5 ms. Почти весь софт которому это нужно сам умеет разрешение таймера увеличивать и сам делает это при своем запуске.
Если не уменьшается даже при запущенных подобнных программах — то НЕ нормально и могут быть лаги, скачки FPS и дерганья(микрофризы) от этого. Тогда можно попробовать эту софтину все-таки доставить корректно. Все что делает эта утилита из статьи — постоянно сидит в памяти и принудительно ВСЕГДА держит максимальное разрешение таймера независимо от того какие программы сейчас запущены. Что может помочь другим криво написанным программам — которые по какой-то причине сами не смогли/забыли увеличить разрешение таймера который используют.
Можно попробовать другой вариант установить (их как раз специально несколько в комплекте — на разных языках программирования).
Или скачать и установить пакет Microsoft Visual C++ 2010 redistributable — из него эта библиотека установится в систему и утилита заработает. При этом ставить надо 32 бит (х86) вариант (ну или оба) даже на 64бит ОС, т.к. сама программка 32бит приложение и ей нужна 32битная библиотека С++.
Так же как более простой вариант «для чайников» можно в качестве замены скачать и поставить MemoryCleaner v.1.6.7
Только именно эту, т.к. программ с названием «Memory Cleaner» много разных от разных авторов. (Скачать нормальная и проверенная версия с majorgeeks, первые несколько ссылок что проверил мертвые уже).
Вообще она для «чистки памяти» как из ее названия видно, но в ней так же как 2я функция есть измерение текущего значения и установка разрешения системного таймера. Она простейшая по интерфейсу — вешается в трей и там в 2 клика можно запустить/остановить принудительное измерение разрешение таймера (и посмотреть текущее его значение — обновляется «на лету» пока открыто меню программы).
TSC default in windows = high performance
А вообще в современных компьютерах есть минимум 4 вида системных таймеров:
1: RTC (Real Time Clock)- аппаратный, очень надежный и стабильный таймер, но он очень древний, оставшийся для совместимости еще со времен появления первых персональных компьютеров. Максимальная частота/точность работы 1 кГц/1 мс.
2: чисто программные таймеры реализованные средствами ОС, характеристики разные в зависимости от реализации, которые появились когда точности работы RTC для многих задач стало не хватать. При этом для надежности они периодически синхронизируются с RTC. Общий ход времени на длинных промежутках в результате задается RTC, а программный таймер служит в основном для точного измерения маленьких промежутков времени точнее 1 мс.
3: TSC (Time Stamp Counter) — полу-программный таймер на основе аппаратного счетчика появившегося в центральных процессорах начиная со времен первых Pentium, при этом его еще 2 разных подвида есть, обычный TSC и i-TSC. Изначально обычный TSC считает количество тактов работы центрального процессора с момента его последней перезагрузки/включения. И пока процессоры работали на фиксированных частотах все было хорошо. Но когда частоты процессоров стали динамическими это разумеется привело к серьезным проблемам в ПО использующем таймеры на базе TSC — скорость хода времени стала меняться вместе с частотой процессора, что никуда не годится. И в современных CPU появился i-TSC (i — от invariant) которой от частоты работы процессора уже не зависит. Частота/точность работы порядка 3-4 МГц/десятые доли микросекунды
4: HPET (High Precision Event Timer) — аппаратный таймер встроенный в современные материнские платы который разрабатывался как замена RTC. Как понимаю собственно уже и заменил — а работа RTC на современных платах только эмулируется для совместимости через обращения к HPET (поэтому и крайне нежелательно отключать его в BIOS — т.к. вместе с HPET перестанет работать и RTC). Частота/точность HPET работы не менее 10 МГц/100 наносекунд (обычно 10-14 МГц). По-идее это самый точный и надежный вариант, который кроме точности должен еще и немного увеличивать производительность. За счет того, что все работает аппаратно на своем отдельном устройстве/чипе, без программной части как в TSC обрабатывающейся на центральном процессоре и забирающей пусть и небольшую, но все-таки часть его ресурсов на эту обработку. Но почему-то в некоторых случаях с ним наблюдаются проблемы и куча инструкций в интернете включая эту как его отключить и вернуться назад к использованию i-TSC вместо HPET.
P.S
А тот таймер который измеряют и настраивают при помощи утилит типа STR Service и ClockRes на самом деле вообще НИКАКОГО ОТНОШЕНИЯ ко всему этому делу не имеют. Они измеряют и настраивают не основной системный таймер (который работает на частотах в мегагерцы/доли микросекунды), а размер кванта времени планировщика задач Windows — сколько времени выделяется на работу 1 процесса на 1 ядре CPU прежде чем Windows переключает управление на выполнение другого процесса. Диапазон значений от 15.625 мс до 0.5мс что соответствует частоте переключений между процессами от 64 Гц до 2000 Гц. Увеличение уменьшает задержки и увеличивает стабильность производительности, НО при этом сама производительность — наоборот УМЕНЬШАЕТСЯ. Т.к. на частое переключение процессов уходит много ресурсов, а после переключения процесс сначала работает медленнее (т.к. часть данных с которыми он работал успела вытесниться из кэша процессора данными другого процесса). Применительно конкретно к игрушкам это может дать более стабильный, но при этом более низкий средний FPS.
Винда по умолчанию настроенна на игры лучше!
Поэтому вернул всё как было по умолчанию в Windows!
А потом как выяснилось все эти пляски с бубном нужны только с первыми Zen от Amd, и то изза их заводских ошибок при проектировании! На всех Интелах — это всё не нужно и делает только хуже!
Проявляется если запущено еще несколько прог — браузер, простенькая 3д-игра, эмулятор Андроида… При этом оперативка свободна на половину или более.
Если вызвать сразу после загрузки — запускается мгновенно.
В другом месте указали на возможную проблему с ССД… !??
Похоже на это не влияет таймер, сейчас у меня
bcdedit /enum —
useplatformtick Yes
disabledynamictick Yes
с прогой Memory Cleaner 167 — выставлено 0,5мс.
+
Win32PrioritySeparation — уменьшил значение до 4 (было 6) может сделать 2?
DisablePagingExecutive — изменил значение на 1.
Меню пуск — MenuShowDelay — было 100 сделал 20
Куда еще можно копнуть? На старом ноуте с Вин 8.1 и 2-ядерным камнем таких задержек при открытии прог НЕТ… у меня прям подгорает нипадетски!
Добавить комментарий