Правда о useplatformclock

29 января 2013, вторник 15:54
для раздела Блоги
Не так давно на нашем форуме в теме обсуждения игры Battlefield 3 всплыл очередной твик, якобы способный улучшить игру по сети. Игроки вообще очень любят «волшебные» твики, а сетевые игроки-задроты на них просто молятся, замечая улучшения, которых на самом деле нет. Так мы имеем дело с очередным плацебо? И да, и нет.

Судя по гуглу, кашу заварил пользователь unclewebb, который поместил на форум вот это сообщение. unclewebb не сетевой игрок, а технически грамотный чел, автор очень полезного утиля ThrottleStop. Ему можно доверять. :) В сообщении идет речь об исправлении ошибки, которая может появится, если процессор разогнан с помощью SetFSB или другого утиля, изменяющего частоту системной шины. В этом случае приложения, которые используют функции QueryPerformanceCounter и QueryPerformanceFrequency, начинают неправильно измерять прошедшее время. Автор привел пример, где величина ошибки измерения составила 5%. В том же сообщении есть ссылка на утиль WinTimerTester, который позволяет быстро определить наличие проблемы.

«Твик» исправляет вполне определенную ошибку, которая есть на оооочень малом количестве компьютеров. Во-первых, для появления ошибки венда должна использовать для расчета прошедшего времени команду TSC процессора. Будет TSC использоваться или нет зависит от версии венды, ее настроек и конфигурации железа. Во-вторых, частота шины должна изменяться программно в обход BIOS и венды, например с помощью SetFSB. Некоторые утили, которые поставляются в комплекте с материнскими платами, не меняют частоту напрямую, а заставляют это сделать BIOS после перезагрузки. В любом случае, с помощью WinTimerTester ошибку легко обнаружить: после нажатия на кнопку Start через 100 сек разница между значениями QueryPerformanceCounter и GetTickCount должна составит больше десятой секунды.

Чаще всего оба значения будут равны. В этом случае все работает нормально и твик не нужен. На это мне возразят, что после твика частота QueryPerformanceFrequency возросла с 3 МГц до 14 МГц, а значит таймер будет отмерять время более точно. И ошибутся.

  • Название WinTimerTester выбрано неудачно. Функция QueryPerformanceCounter не имеет отношения к таймеру. Это высокоточный счетчик, с помощью которого измеряют уже прошедшее время, как правило небольшой длительности. А HPET используется вендою в качестве таймера без всяких твиков (это можно проверить с помощью функции NtQueryTimerResolution или измерив задержки в DPC Latency Checker).
  • Если в QueryPerformanceCounter используется TSC, то реальная частота выше 3 МГц.
  • 3 Мгц — это примерно 3000000 отсчетов за одну секунду. Такой точности хватит с головой. Почувствовать разницу между 3 МГц и 14 МГц не сможет даже робот. :)

Как видно, плюсов от твика на нормально работающем компьютере нет, а вот минусы имеются. Например, чтение HPET занимает заметно больше времени, чем чтение TSC. Не зря useplatformclock по-умолчанию отключен.

Для любителей волшебных твиков советую баловаться с гипертрейдингом. Его включение или отключение творит чудеса: улучшается «рега», уменьшается пинг, в проводах рассасываются скрутки, и т.д. Включение гипертрейдинга помогает даже обладателям процессоров AMD!
Оценитe материал

Возможно вас заинтересует

Популярные новости

Сейчас обсуждают