1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

RTC баг на многоядерном ядре Windows XP

Тема в разделе "WASM.SOFTWARE", создана пользователем xpmod21, 30 май 2021.

Статус темы:
Закрыта.
  1. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.547
    Я хз что это. Переполнение может вызвать ошибку только если значение следующей за переполнением выборки больше значения предыдущей. Если меньше, должно корректно обрабатываться.
     
  2. xpmod21

    xpmod21 Member

    Публикаций:
    0
    Регистрация:
    30 май 2021
    Сообщения:
    65
    Эти таймеры работают только при работе ОС. Но накрученное время, остается и после перезагрузки и после выключения/включения ПК. То есть оно энергонезависимое, значит может храниться только в таймере RTC, который питается от батарейки.
     
  3. algent

    algent Member

    Публикаций:
    0
    Регистрация:
    11 апр 2018
    Сообщения:
    33
    xpmod21, У Вас есть звездолёт?? :)
    Скорость убегания может меняться?
     
  4. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.642
    xpmod21,

    Время читается и загружается в cmos, не только при запуске/завершении системы. С чего вообще ты решил что бежит время, те системное или rtc ?

    Выдача той утилиты cpuz какая то чушь, #210 - в качестве qpc используется pmt, поэтому частота выдана одинаковой. Третье поле RTC" расчётное на основе времени прерываний #215 - timeGetTime(), а не реальное системное время.

    Данная тема судя по всему началась тут:

    - это не верная калибровка частот, без учёта разрядности, точнее свойств источника tsc и какие то невнятные попытки чтения системного времени в обход паблик методов/апи.
    --- Сообщение объединено, 15 ноя 2021 ---
    Прямой способ прочитать время из rtc видимо один андок:

    Код (Text):
    1. NtSetSystemTime(IN PLARGE_INTEGER SystemTime,):
    2.     if !SystemTime
    3.         Real = HalQueryRealTimeClock()
    4.         if !ExpRealTimeIsUniversal    ; ~ "RealTimeIsUniversal"
    5.                         ; "Session Manager\TimeZoneInformation"
    6.             Time = KeQuerySystemTime()
    7.             if !ExpSystemIsInCmosMode    ; def 1
    8.                 HalSetRealTimeClock(Time)
    9.             else
    10.                 KeSetSystemTime(Real)
    11.             fi
    12.         fi
    13.     fi
    - первый арг NtSetSystemTime() не опциональный судя по прототипу, но по дизу получается если время не задано, оно загружается напрямую из rtc. Значит можно вызвать NtSetSystemTime(0, 0) -- NtQuerySystemTime()/прочитать_USD.SystemTime.
    --- Сообщение объединено, 15 ноя 2021 ---
    Итак решающий эксперимент. Включен PMT, время уехало в cpuz" утилите на пару секунд за минуту. Перезагружаем его из RTC, изменений никаких как и ожидалось, при этом с системным временем всё впорядке(GetSysTime -- Sleep(1min) -- NtSetSystemTime(0) -- GetSysTime):

    st.png

    А есчо в этой тулзе драйверный висяк через пару минут происходит, говнософт короче.
    --- Сообщение объединено, 15 ноя 2021 ---
    - опечатка небольшая в логе, s/ms -> m/s :)
     

    Вложения:

    • st.7z
      Размер файла:
      585 байт
      Просмотров:
      18
  5. ormoulu

    ormoulu Active Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    756
    Так где ошибка, в днк у ТС?

    ЗЫ: к слову о линуксах
    upload_2021-11-15_15-18-59.png

    Это нормально вообще?
     
  6. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.442
    Нет.
     
  7. xpmod21

    xpmod21 Member

    Публикаций:
    0
    Регистрация:
    30 май 2021
    Сообщения:
    65
    Всё началось с того, что я заметил, что системное время убегает вперед при использовании Хромобраузеров. Оказалось что Хром постоянно дрочит RTC таймер переключая тик 16 мс / 1мс. Потом была написана программа, которая дрочит этот таймер каждые Х секунд (по дефолту 0,2 сек) и вызывает набег времени вперёд.

    Что нужно наблюдать при работе st.exe?
    Процесс висит, ничего не выводится.
     
  8. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.642
    xpmod21,

    > я заметил, что системное время убегает вперед

    Каким образом, те относительно чего, какого источника эталонного времени ??

    Что ты заметил это то же врядле, судя по ссылке выше. Как ты мог узнать вообще про какие то часы, если не знаешь что делать с приложением из десяти строк..

    > Что нужно наблюдать при работе st.exe?

    Ничего, как сказано выше. Установка системного времени из rtc не влияет на время cpuz".
     
  9. xpmod21

    xpmod21 Member

    Публикаций:
    0
    Регистрация:
    30 май 2021
    Сообщения:
    65
    Вы 10-й раз спрашиваете, как я мог заметить уход времени. Речь же идет не про миллисекунды. Разве проблема заметить уход времени по 2-3-4 минуты за сутки от использования Хрома? А накручивая через специальную программу от Ксении - до 40 минут за сутки!

    За этой херней я наблюдал несколько месяцев, пока не понял в чем причина.... Напишу вкратце всю историю. Всё началось с того, что каждый день я начал замечать, что системное время уходит на 2-3-4 минуты вперед. Вначале я грешил на херовый часовой резонатор 32768 Гц, который стоит на материнской плате (от его тактируется часовой RTC таймер). Взял кварц со старой материнки и заменил. Также менял батарейку, но ситуация не изменилась.

    Потом заметил, что время убегает не всегда - а только в Виндовс ХП. При работе в Виндовс 7 или при выключенном ПК, время идет точно. Ну может уходит плюс/минус пару секунд за сутки - но это не критично, это нормальная точность. В итогек, ситуация стала понятнее - проблема возникает только когда ПК работает в ХП-ишке!!!

    Потом начал присматриваться ближе, что набег возникает не всегда, а только при работе определенных программ. Потом выяснилось что любая программа, которая часто переключает режим с 16 мс на 1 мс - приводит к накрутке времени. Типичным представителем таких говнопрограмм, оказался Хром - который может дрочить этот таймер переключая период по несколько раз в секунду. При чем происходит это не всегда, достаточно отрыть даже пустую вкладку и ничего не делать. Хром может и 10-20 секунд не трогать таймер, а потом начать его дрючить постоянно и делать это пока запущен браузер, даже если вы не серфите, а просто браузер висит в фоне.

    Программист Ксения написала 2 программы:
    №1 - отображает текущий период таймера
    №2 - периодически дрюкает таймер 16 мс -> 1 мс

    Используя программу №2 можно накручивать время и без запуска Хрома. При интервале переключений каждые 0,2 секунды можно накрутить системное время на 2 секунды за минуту, то есть на 2 минуты за час или 40 минут за день!

    Потом я заметил, что CPU-Z также показывает набегающее время, при использовании программы накрутки. Потом заметил, что если установить тик жестко на 1 мс - то переключение в 16 мс не происходит и набег времени прекращается. Тогда родилась программа Timer_Fix, которая жестко удерживает период на 1 мс и она вошла в состав интегратора патчей от специалистов WinRaid. К сожалению, Timer_Fix - единственное решение для исправления данной проблемы. Хотя я думал, что придумал временный костыль, но за 10 месяцев другого решения не появилось.
     
  10. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.642
    xpmod21,

    > Разве проблема заметить уход времени по 2-3-4 минуты за сутки

    Проблема как оказалось из за неверных эталонных часов^.

    > CPU-Z также показывает набегающее время, при использовании программы накрутки.

    Оно показывает чушь, без всякой перестройки частот у него время бежит для pmt. Чем есчо измеряли ?
     
  11. xpmod21

    xpmod21 Member

    Публикаций:
    0
    Регистрация:
    30 май 2021
    Сообщения:
    65
    Мне пофиг что показывает CPU-Z и как он считает... Я заметил, что показания CPU-Z меняются при использовании программы накрутки - поэтому сопоставил эти факты, как следствие одной проблемы.

    Мне нужно чтобы системные часы не приходилось постоянно синхронизировать при использовании Хрома или других программ, которые дрочат делитель RTC таймера. Прочитайте ещё раз 1й пост данной темы. Кажется вы не поняли суть проблемы и идете не в ту сторону...

    Известные факты:
    1) проблеме подвержена только ВинХП, в остальных ОС баг не замечается
    2) проблема возникает только на мультипроцессорном ядре ХПишки
    3) проблема возникает при частом переключении делителя RTC таймера и чем чаще он переключается - тем больше временной набег. Программа №2 от Ксении четко это демонстрирует
    4) проблемы нет в Вин7 (там делитель заблокировани на периоде 1 мс)
    5) также проверки проводил на более старых двухядерных ПК и видел эту же проблему
    6) любой желающий у кого имеется 2-х (или более) ядерный ПК может запустить программу №2, оставить ПК на час и убедиться, что через час системное время уйдет на +2 минуты вперед
    7) любой желающий может запустить Timer_fix, зафиксировать делитель на 1 мс и убедиться, что набег времени не возникает
    --- Сообщение объединено, 16 ноя 2021 ---
    Даже я понимаю, что остальные таймера, которые упоминаете - ваще не при чем!! Они используются для тактирования элетроники внутри ПК, системной шины (короче на высоких мегагерцах) и для точного измерения временных интервалов до наносекунд через такты процессора (на гигагерцах), но на показания СИСТЕМНЫХ ЧАСОВ (на низкой частоте - на килогерцах) они не влияют.

    Системное время вычисляется по энергонезависимой микросхеме RTC таймера, который тактируется низкочастотным кварцем на 32 кГц. Вся беда в том, что Виндовс также использовала этот низкочастотный таймер для обработки медленных событий с дефолтной частотой 64 Гц (соответствует периоду 16 мс). При работе Винде бывает нужна повышенная частота 1024 Гц (0.977 мс) и она переключает делитель на новый режим. За время переключения на счетчик проскакивают "лишние" импульсы и он физически насчитывает больше импульсов, что равносильно уходу времени "вперед".

    Зная, что в Вин7 переключения этого делителя заблокированы - я понимаю, что проблему программисты Майкрософта решить не смогли - поэтому тупо заблокировали делитель. Но мы знаем уровень тех программистов. Зачастую, 1 хакер-самоучка знает больше чем 1000 программистов крупной компании. Да и отсутствие бага на однопроцессорном ядре, вселяет надежду, что проблему таки можно разрешить программно.
     
  12. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.374
    Я не пойму, а почему нельзя пересобрать хромиум, и выпилить из него этот функционал? Либо поставить хук на эти апи в браузере ? на кой лезть внутрь ОС?

    Кстати, о браузерах. Открыл для себя яндекс.браузер - оказывается, там можно смотреть инглиш видео с переозвучкой! Сбылась мечта. Переозвучка вполне сносная, конечно не идеал, но лучше так, чем кривые субтитры и т.д.
    з.ы. знаю, что надо учить инглиш, что программист без инглиша типа не программист, не пишите это.
    з.з.ы. пост проплачен Яндексом.
     
    Mikl___ нравится это.
  13. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.642
    xpmod21,

    > Кажется вы не поняли суть проблемы

    Есть какой то софт для замеров времени, он глючит и на нём бежит время, при этом эталонное время вычисляется по прочим чем rtc таймерам. Выхлоп cpuz это не физические часы рядом с монитором.. При тесте выше на cpuz время плавает без всяких изменений частот и это не связано с системой, кривой замер тупо, а загрузка времени в систему из rtc ничего не меняет. Вот и что я не так понял ??
     
  14. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.547
    Проблема со спешащим временем в вендах существует. Достаточно загуглить, там не только на ХР будут жаловаться. Сталкивался на 8.1 с таким, не помню чем закончилось и закончилось ли - комп вскоре поменял.
     
  15. ormoulu

    ormoulu Active Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    756
    Так XP не умеет время по интернету синхронизировать или что? Вроде должна.
     
  16. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.642
    На xp есть периодическая загрузка времени в rtc. Может этот параметр менять посмотреть что произойдёт.

    "Session Manager\\Executive"
    "MaxTimeSeparationBeforeCorrect" def. 60
     
  17. xpmod21

    xpmod21 Member

    Публикаций:
    0
    Регистрация:
    30 май 2021
    Сообщения:
    65
    Поддержку ХП имеет только 360ЕЕ, а он хоть и хромоклон, но с закрытым кодом! Плюс могут найтись и другие программы, которые дрючат таймер. Поэтому проблему лучше решать со стороны патчения Виндовс.

    Вас заклинило на тех (высокочастотных) таймерах. Они используются для формирования высокочастотных сигналов и точного измерения временных промежутков (с точностью до микро и наносекунд). Но они не используются для подсчёта ВРЕМЕНИ СИСТЕМНЫХ ЧАСОВ!

    Для часов используется микросхема RTC таймера, которая работает на частоте 32 768 Гц. Период RTC = 30 мкс. На RTC вы не сможете сформировать сигнал меньше 30 мкс или измерить точнее 30 мкс! Поэтому для формирования частот работы системной шины/портов/периферии используются ACPI и другие (высокочастотные) таймеры. Но на работу системных часов они скорее всего не влияют.

    Куда это вписать?
     
  18. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.642
    xpmod21,

    > Но они не используются для подсчёта ВРЕМЕНИ СИСТЕМНЫХ ЧАСОВ!

    Сам себе противоречишь. Использовался эталонный таймер что бы увидеть что время бежит(относительно него). Выкинь тогда софт, бери физические часы или осцилл втыкай в эелезо и пиши видос с экрана. Достаточно любого стабильного таймера с приемлемым разрешением, что бы не только обнаружить разбежку, но и её событие. Ты же читаешь не время rtc, а время системы через её интерфейсы из этого делаешь вывод что железо сбоит. Тогда напрямую читай с портов, а не бери значения из памяти ядра, которые там неизвестно как и откуда появились. При этом всё втыкать про какие то частоты. Эта тема безнадёжна как и её автор :mda:
     
  19. xpmod21

    xpmod21 Member

    Публикаций:
    0
    Регистрация:
    30 май 2021
    Сообщения:
    65
    upload_2021-11-16_19-33-39.png

    Меня волнует ход вот этих часов, в сравнении в обычными часами.... Как там считает CPU-Z мне абсолютно похер. Ещё раз говорю, что CPU-Z я упомянул только по причинам:
    1) накручиваю софтом время, оно накручивается и в CPU-Z
    2) не накручитаю, оно не накручивается и в CPU-Z
    3) блокирую таймер на 1 мс, время идет и там и там одинаково

    Ввиду того, что CPU-Z ведет себя одинаково с системными часами, я и приплел эту тулзу.

    Любой пользователь ХП, у которого не какая-то виртуальная буйня, а реальное железо с 2 или более ядрами процессора, может запустить "Программу №2 от Ксении" и накрутить время. Неужели, чтоб ой заметить уход +40 МИНУТ за СУТКИ нужны атомные часы... Такое впечатление, что мы в дурдоме.
     
  20. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.442
    Забавно, но даже такой магл, как я, уже давно понял, в чем проблема ТСа, а топовые спецы какую-то бредятину затирают. Хотя может просто маглы друг друга лучше понимают, чем спецы маглов.
     
Статус темы:
Закрыта.