Впервые вчера столкнулся с интересной особенностью 10ки. История такова, что один софт попросили посмотреть. Наблюдались странности. Софт показывает картинки. И вот иногда они показываются ускоренно. При чем рандомно. То есть может работать как надо, а после какого то времени - не так как надо - быстро. Решается перезагрузкой. Собственно не буду говорить как натолкнулся. Но суть такова. 1) queryperformancefrequency API, по которому идет опрос частоты процессора - возвращает всегда 10 мегагерц. (об этом на сайте МС инфа есть - хоть и не связана с 10кой напрямую) Линк: https://docs.microsoft.com/en-us/wi...-high-resolution-time-stamps#direct-tsc-usage Хотя гипервизор не запущен. То есть нативная система. 2) queryperformancecounter API - тоже возвращает ерунду. То значение улетает далеко вперед, то обратно возвращается. Собственно интересно было бы обсудить - почему и зачем на 10ке это изменили \ поскипали \ испортили? Или дело не в 10-ке ?)
Так ведь как раз таки, похоже, дело в деградации кода венды, о чом и говорится в топике про это-наше-всё winxp
HoShiMin, спасибо, попробую. UbIvItS, да, но в основном это мощные машины. Типа Core i9 или Xeon последних поколений. А так же это материнские платы типа Gigabyte X299 DESIGNARE EX. Если надо точнее - скажу позже. Если не трудно - почекайте у себя вывод хотя бы того же QueryPerformanceFrequency. Это делов на 5 минут запустить студию . Если у вас 10ка и свежее железо.
У меня тоже 10 МГц. Как отключить HPET на Z-390 - хз, в биосе нет. Но есть какие-то флаги для bcdedit.
Ага тоже не нашел где отключать. UbIvItS, Ну ради эксперимента попробую. Но имхо - не прокатит кажется. Есть другие процы где core i7 4 поколения на 10ке - тоже самое поведение.
попытка - не пытка в любом случае для нахождения причины нужно исключать все возможные варианты. --- Сообщение объединено, Jul 9, 2020 --- повторяемость на разных машинах говорит, что ситуация не локальна, то бишь сразу отпадают частные проблемы с дровами и в итоге имеем... 1. софтина мокрых. 2. особенности процев интела.
UbIvItS, дело в том, что queryperformancefrequency не частота процессора, а частота внутреннего таймера, для перф каунтера. В винде вообще. А у кого есть может 7 установленная. Кто проверить может ? Что выдаст.
RDTSC - в 32 битных прогах работает нормально* RDTSC - в 64 битных прогах работает скачет в минус. Минус связаны с тем что ядра процессора стартуют с задержкой смотри MP-Specification. *Если 32 битную программу замучить, то она перескочит с ядра. Достаточно запустить высоко нагруженную программу желательно парочку. Это от того, что ядра стартуют с задержкой. А МС ленивые жопы выронить не могут. У меня QueryPerformanceCounter - работает нормально без улётов назад. Неравномерность не привышает 1 мс. ОС Win7 на 10 позже проверю. --- Сообщение объединено, Jul 9, 2020 --- Где 10 МГц у вас какая версия десятки?
Проверил на Win 10 проц i7-4700HQ всё норм. QueryPerformanceCounter не скачет неравномерность 60-1200 мкс в зависимости от нагрузки и энергосберегающего режима.
Приветствую ) У меня 1903 версия. Попозже покажу два кода. 1 исходный который работает не так, как от него ожидают. А второй - уже с моими исправлениями (убрал вообще QPC)
а в тестах учитывали режим защиты ядра, то бишь отключали его? TermoSINteZ, кстати, можно ориентироваться по нагреву проца == в зависимости от энергосберегающего режима и защиты от перегрева на проце роняется частота.
TSC тикает на фиксированной частоте и от энергосберегаек не зависит, даже если процессор сбрасывает фактическую частоту. А 10 МГц - это какая-то синтетическая частота. Возможно, они ввели её для унификации замеров времени, чтобы точность не зависела ни от частоты TSC, ни от HPET, и измерялась строго в 100-наносекундных интервалах, как FileTime. Таким образом, на разном железе будет одинаковая точность.
но тут возникает Вопрос == точность ЧЕГО??? просто замерять время не имеет особого смысла без привязки к актуальной скорости проца.
именно по этому и начали возникать глюки когда в код был написано с учетом изменения скорости. ахахах 5
hal 10-ки, KeQueryPerfCount() - функция не на константах, опорное значение HalpPerformanceCounter, это переменная. Далее копируется туда из HalpAlwaysOnCounter <- HalpTimerSelectRoles <- HalpAlwaysOnTimer <- HalpTimerSelectRoles <- HalpFindTimer <- HalpRegisteredTimer* <- HalpRegisteredTimerCount <- HalpTimerRegister <- HalpTimerInitializeEarlyStallSource <- есчо куча функций <- HalpRtcDiscover <- HalSocGetAcpiTable <- HalpAcpiGetTable <- HalpAcpiGetTableWork <- HalpAcpiGetCachedTable <- HalpAcpiTableCacheList <- HalpAcpiGetRsdt <- HalpAcpiCopyBiosTable/HalpInvalidAcpiTable etc пошло в железо. --- Сообщение объединено, Jul 16, 2020 --- TermoSINteZ, У тебя тупо стоит какой то ядерный фильтр возвращающий константу, удали авера и таймеры будут работать как положено