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

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

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

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

    xpmod21 Member

    Публикаций:
    0
    Регистрация:
    30 май 2021
    Сообщения:
    65
    RTC баг - уход времени "вперёд" на многоядерных процессорах под Windows XP

    При использовании Windows XP обнаружился досадный глюк - системное время уходит вперёд, причем степень ухода зависит от активности работы ПК и может набегать до 5 минут в день. Проблема проявляется только в Windows XP. На выключенном ПК, под UEFI/BIOS или в современной ОС - время идет правильно. Хотя часовая микросхема RTC должна быть независимой частью, но на современных материнских платах это не так. Исследование показало, что уход часов "вперед" происходит при постоянном переключении периода системного таймера 16 мс в 1 мс и обратно. В Windows XP (по умолчанию) этот таймер работает с периодом 16 мс и если на ПК не проявлять активности - то системный таймер продолжит работать с периодом 16 мс. Но при запуске Хрома или мультимедиа приложений, таймер переключается в режим работы с периодом 1 мс и может возвращаться на 16 мс. При жестко установленном периоде 16 мс (или 1 мс) время идет точно, но при постоянном переключении таймера 16 мс - 1 мс - 16 мс - 1 мс происходит сбой в работе часов реального времени RTC.

    Решение проблемы:
    Поскольку специалисты с Win-Raid не смогли разобраться с причиной данной проблемы, то "красивого" решения (на уровне патча системных файлов) по состоянию на май 2021 года не появилось. Зато мы имеем "костыльное" решение - программа Timer_Fix с исходным кодом, написанная на Visual Studio 6.0. Программа не имеет интерфейса, после запуска она переведет системный таймер на период 1 мс и оставит его неизменным, программа постоянно висит в процессах до перезагрузки ОС. Для завершения работы (в случае необходимости) нужно просто прибить процесс Timer_Fix.exe через "Диспетчер задач". Для удобства лучше положить данную программу в "Автозагрузку" и напрочь забыть о проблеме с уходом времени. Каких-либо косяков от использования данного метода не обнаружено. В целом, данный фикс можно считать "костыльным", но ничего лучшего на данный момент нет.

    Скачать - https://www.upload.ee/files/13002205/Soft_Control_Time.zip.html или https://yadi.sk/d/KpTGDPITsNWn7w

    Программа демонстрации RTC bug (программа накрутки времени):

    RTC_bug_demonstrations\Timer_v10\Timer_src_BCB6.0 - исходные коды программы
    RTC_bug_demonstrations\Timer_v10\timeBeginPeriod.exe
    RTC_bug_demonstrations\Timer_v10\timer.exe

    Разработчик программы - Xenia. Данная программа служит для наглядной демонстрации проблемы с RTC таймером. Она устанавливает период системного таймера 1 мс (0.977 мс) выдерживает 0.2 секунды, устанавливает 16 мс (15.625 мс) выдерживает 0.2 секунды и далее продолжает переключать системный таймер с заданными длительностями. Программа состоит из 2-х частей:
    1. timeBeginPeriod.exe - консольная программа для установки режима таймера. Заданный режим (период и длительность) передаётся в параметрах командной строки. Программа представлена с исходным кодом на Borland C++ Builder 6.0.
    2. timer.exe - это GUI интерфейс для timeBeginPeriod.exe. В графическом режиме можно задать период 1, длительность 1 и период 2, длительность 2 работы системного таймера. Программа представлена с исходным кодом на Borland C++ Builder 6.0.
    Важно!!! Для корректной работы timeBeginPeriod.exe и timer.exe должны находиться рядом, в одной директории.

    [​IMG]

    Проверка RTC-bug:
    1. Проверку производим на свежезагруженной системе, без выполняющихся фоновых задач. Все фоновые процессы должны быть закрыты, поскольку они могут удерживать таймер на 1 мс, что помешает работе демонстрационной программы.
    2. Запускаем Clockres - программу для контроля периода системного таймера. Измеренный период должен = 15.625 мс
    3. Запускаем CPU-Z, переходим на закладку About, нажимаем кнопку Timers и кнопку Start, чтобы контроллировать частоты системных таймеров
    4. Запускаем timer.exe. Устанавливаем режимы Период 1 = 1 мс, Длительность 1 = 0,2 секунды, Период 2 = 16 мс, Длительность 2 = 0,2 секунды и нажимаем кнопку Start. Эти режимы заданы режимами по-умолчанию.
    5. В установленном режиме (по-умолчанию) будет происходить "накрутка" времени RTC таймера приблизительно +2 секунды за 1 минуту работы программы. При Длительности = 0.1 секунда, накрутка времени будет составлять +4 секунды за 1 минуту.

    Состав архива:
    Clockres - программа для контроля периода системного таймера
    CPU-Z - в закладке About, кнопка Timers можно контроллировать частоты системных таймеров
    Neutron 1.07 - программа для контроля и синхронизации времени через интернет
    Timer_Fix (с исходным кодом) - фикс проблемы с уходом времени вперед (устанавливает таймер на 1мс)
    Timer_v10 (с исходным кодом) - программа накрутки времени, для демонстрации проблемы

    Скачать (2 МБ) - https://www.upload.ee/files/13095203/RTC_bug_demonstrations.zip.html

    На замену консольной Clockres, по моей просьбе, программист Xenia разработала программу Timer_Interval_v4 - графическую замену Clockres. Программа измеряет интервал таймера каждые 50 мс и выводит измеренное значение на экран поверх всех окон.

    [​IMG]

    Скачать Timer_Interval_v4 (с исходным кодом) - https://www.upload.ee/files/13142806/Timer_Interval_v4.zip.html

    Ещё раз о RTC баге на многопроцессорном ядре

    Вначале я полагал, что баг присущ исключительно "современным" материнским платам (новее 2014 года), которые не предназначены для Windows XP. Но проведя тесты на ПК 2008-2009 года сборки, который имеет официальную поддержку Windows XP я обнаружил такой-же баг! В тесте принимал участие Intel Celeron Core 2 Duo (2 ядра @ 2,8 GHz) на материнской плате с чипсетом G41. Поскольку оборудование довольно старое и имеет официальную поддержку Windows XP, то проверка делалась на оригинальном MSDN образе WinXP Pro SP3, со всеми штатными драйверами. Все только официальное, никаких модификаций. Но RTC баг всё равно есть!

    Неделю ранее, я получил подтверждение от товарища, который также тестировал на 2-х ядерном ПК и подтвердил накрутку времени при частом использовании Хрома. До этого, он не понимал причину и пенял на неточный часовой кварц. Но мы то теперь знаем, что ни кварц, ни батарейка не причем! В данное время я имею 100% подтверждение бага, на 3-х ПК из 3-х испытуемых. Из данного факта делаю вывод, что RTC багу подвержены абсолютно все системы с 2-х (и более) ядерным Intel-процессором. Происходит ли это на АМД не известно, нет такого ПК.

    Для подтверждения бага нужно:
    1) 2-х или более ядерный Intel процессор с установленной Windows XP (причем железо может быть и довольно старое, на ПК 2008 года баг уже проявляется)
    2) Отсутствие постоянно запущенной программы, удерживающей таймер на 1 мс (0.977 мс). На свежезагруженной ОС дефолтное значение периода должно быть = 16 мс, проверяется через Clockres
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.406
  3. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    303
    Лучше скажи, как на ХР нормально запустить карточку GeForce 1050Ti?
     
  4. xpmod21

    xpmod21 Member

    Публикаций:
    0
    Регистрация:
    30 май 2021
    Сообщения:
    65
    Никак.
    Покупай GTX 980 Ti - она в 3 раза мощнее 1050 и поддерживается в ВинХП.
     
  5. R81...

    R81... Member

    Публикаций:
    0
    Регистрация:
    1 фев 2020
    Сообщения:
    55
    На сколько мне помнится, для IBM PC AT RTC это MC146818A или аналоги, для систем таймер 8254 Out0 на IR0 первого 8259A или аналога вплоть до +APIC. Если после кнопки Reset или передергивания питания в Bios Setup время соответствует, то RTC функционирует верно и не протится системой. У меня было на W98 при длительных по времени многократно используемых ClI системное время естественно начинает отставать (прерывания-то запрещены и не обрабатываются до StI), а RTC этим не сбивается и по нему можно было устанавливать время по выходу из такой программы, а также в ней по мере необходимости, но время мне было не важно.
     
  6. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    303
    xpmod21, поздно, купил 1050, да и на такую карточку денег не хватило бы.
     
  7. xpmod21

    xpmod21 Member

    Публикаций:
    0
    Регистрация:
    30 май 2021
    Сообщения:
    65
    R81...,

    Я тоже думал, что ход RTC никак не должен зависеть от работы системы. Но фиг там... На мультипроцессорном ядре ВинХП, с помощью приведенных программ можно накрутить время на +2 секунды за 1 минуту проверки. С таким раскладом за день дергания предделителя в RTC можно накрутить время почти на +1 час (!!!) вперед. Что есть абсурдом для часов точного времени!!! Реально Хром конечно реже дрючит таймер, но +5-7 минут за день активной работы в браузере это реально!

    Intro,

    GTX 960 - будет на уровне GTX 1050, а 970 и 980 - дороже и гораздо мощнее.
     
  8. schuler

    schuler New Member

    Публикаций:
    0
    Регистрация:
    23 фев 2021
    Сообщения:
    2
    Бегло просмотрел исходник, не вникая в суть, но некоторые места бросаются в глаза, например:
    Код (Text):
    1.  
    2.  int period = 16, duration = 0;
    3.  
    4.   if( !period)
    5.   { printf( "Bad parameter period\n");
    6.   return 1;
    7.   }
    8.  
    9.   sscanf( argv[1], "%d", &period);  // ms
    10.   sscanf( argv[2], "%d", &duration);  // ms!
    11.  
     
  9. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.530
    Специалисты, чей тред был выпилен с win-raid.com, расследовали-расследовали, расследовали-расследовали и нарасследовали, что в доисторической ОС часы неправильно идут из-за постоянного шкандыбания периода системного таймера гавнопрограммами, авторы которых считают, что им лучше знать как этот глобальный параметр половчее настроить под свое гавно, не считаясь с тем, что другое гавно тоже по возможности должно корректно работать. И какое решение было найдено? Правильно - написать еще одну гавнопрограмму, которая делает то же самое, что и другие гавнопрограммы, ломающие часы.
     
    k3rnl нравится это.
  10. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.406
    Так а как им еще натянуть сову на глобус? Это - вынужденная мера, если ты хочешь работать на тотально устаревшей системе. Да и какого качества кода вы ожидаете от них, чем они/он богаты - тем и рады.
     
  11. xpmod21

    xpmod21 Member

    Публикаций:
    0
    Регистрация:
    30 май 2021
    Сообщения:
    65
    Гавнопрограмма у нас одна - Гугл Хром и все продукты на его основе.

    Timer_Interval_v4
    показывает насколько часто браузер "Google Chrome" (CoolNovo, 360EE и другие) переключает интервал системного таймера 15.6 мс - 1 мс и обратно. Переключения происходят, как при активной работе, так и в простое без какой-либо видимой закономерности. Например 2-3 переключения в секунду, потом секунда без переключений, потом 4-5 переключений за секунду, потом опять пауза несколько секунд. Бывает и несколько секунд подряд идут переключения. Зачем ядро браузера задрачивает этот таймер никому не известно - скорее всего какой-то баг.

    Кроме того, я протестировал около 30 программ разного функционала (файл менеджеры, архиваторы, просмотрщики картинок, плееры, медиапроигрыватели) - некоторые программы меняют интервал таймера, но меняют его 1 раз и держат новое значение пока вы не закроете программу, а Chrome и его клоны просто дрочат этот таймер, переключая несколько раз в секунду.

    Частые переключения системного таймера приводят к сбоям в системном времени на мультипроцессорном ядре Windows XP. Однопроцессорное ядро Windows XP не подвержено этой проблеме. В Windows 7 данная проблема не проявляется, поскольку Win7 постоянно удерживает системный таймер на интервале 1 мс (0.977 мс) и переключения не происходят.

    Если кто захочет пободаться с Гуглом и написать им баг-рипорт, а ранее Гугл выплачивал приличные гонорары за подобную проделанную работу - то в случае успеха, прошу разделить гонорар в 3-х равных частях:
    1) мне - 33%
    2) вам - 33%
    3) Xenia - 33%.
     
  12. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    4.406
    Ахахах, забавный ты конечно человечек.
     
  13. f13nd

    f13nd Well-Known Member

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

    xpmod21 Member

    Публикаций:
    0
    Регистрация:
    30 май 2021
    Сообщения:
    65
    Сбой системного времени при частом переключении RTC таймера проявляется на всех мультипроцессорных ПК, даже старых. RTC bug на 775 сокете - комп \2008-2009 года сборки.

    [​IMG]
     
  15. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    303
    Кстати, у меня M4N68T-M LE V2 процессор Athlon II X4 640, купил 2011 году, не каких проблем со временем в Windows XP SP3 я не наблюдаю. Хотя для полной функциональности материнка требует windows 7 x64.
     
  16. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.115
    Так ты синхронизацию времени отключи и софта разного наустанавливай, который будет дрючить системные таймеры целыми днями :)
    --- Сообщение объединено, 31 май 2021 ---
    А оставшийся процент отправить раковым детишкам в соседнем топике :)
     
  17. Rel

    Rel Well-Known Member

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

    xpmod21 Member

    Публикаций:
    0
    Регистрация:
    30 май 2021
    Сообщения:
    65
    Если бы не хромо-браузеры не накручивали время (по несколько минут за день вперед) - то RTC баг я бы не заметил... Ну или пенял на галимый часовой кварц 32768 Гц, севшую батарейку или что-то банальное.

    Вначале я заметил, что часы только спешат в ХП, но при работе в семерке (или на выключенном ПК) это не происходит. Сделал замеры... Потом обратил внимание, что в ХП это происходит не всегда, а зависит от запущенных программ, поскольку простоявшая с пустым рабочим столом ХП-ишка сбой по часам не давала. Потом понял что проблему вызывают все браузеры - Хромоклоны и что проблема, когда переключается таймер.

    Проблему изучал несколько месяцев, но написал о ней в январе, когда появилось решение (Timer_fix.exe) программа удерживающая таймер на 1 мс. Это моя работа, которую выложил на Win-Raid и фикс вошел всем известный интегратор (WinXP-IE Optional Patch Integrator v3.1.5\Integrator Files\Patches\Timer Fix v1.1\RTC\TimerFix.exe) Писать ранее не было смысла... Современные пользователи не имеют должных знаний, чтобы понимать элементарные вещи и закидали бы дерьмом. Например, как в случае не работающего 2D ускорения на базовых темах Виндовс 7. Некоторые дураки до сих пор повторяют бред - хочешь ускорить Вин7 используй классическую тему. Хотя на любом ПК новее 2014 года, аэро тема будет в разы производительнее. Потом Xenia написала 2 программки - для циклического дергания таймера (Timer_v10) и для замера его периода (Timer_Interval_v4 - графическую замену Clockres), запустив которые можно легко убедиться в наличии бага.

    Весь софт (с исходниками) в 2 архивах:
    https://www.upload.ee/files/13095203/RTC_bug_demonstrations.zip.html
    https://www.upload.ee/files/13142806/Timer_Interval_v4.zip.html

    Чего сейчас ждать я не знаю. Спецы с винрейда этим заниматься не хотят - наличие моего фикса достаточно, чтоб баг не проявлялся. Хромобраузеры используют многие, но под ХП - их не так и много... Да и уход времени не считают проблемой, главное чтоб телки на фотках открывались, да порнуха не подтормаживала... А что современным пользователям ещё надо...
     
  19. xpmod21

    xpmod21 Member

    Публикаций:
    0
    Регистрация:
    30 май 2021
    Сообщения:
    65
    Осовремененная сборка TOR браузера для WinXP

    Пользователь RetroRocket сделал довольно качественное обновление TOR Browser специально для пользователей Windows XP. Напоминаю, что официальный TOR браузер перестал поддерживать Windows XP после версии 7.5.6. Но тем не менее, с помощью небольших хаков, можно улучшить и осовременить работу браузера, с использованием фич новых версий.

    Описание сборки от автора RetroRocket:

    Скачать сборку TOR браузера для WinXP:

    https://www.upload.ee/files/13208684/TB756_ru_0458.ZIP.html
     
  20. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.355
    Опять начинаешь? Опять взялся за свое? То АМД глюки , а теперь таймер уже.
     
Статус темы:
Закрыта.