justmann

BANNED | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Цитата: Никаких проблем с датой/временем в Windows XP не наблюдается, как в виртуальных машинах, так и на реальном железе 2005/2012 годов. Все установки с оригинальных дистрибутивов с полным комплектом обновлений под систему + таймзоны. | Наблюдается.... Ещё и как наблюдается.... Уход времени "вперёд" на многоядерных процессорах под Windows XP При использовании Windows XP на материнских платах с многоядерными CPU обнаружился досадный глюк - системное время уходит вперёд, причем степень ухода зависит от активности работы ПК и может набегать до 5 минут в день. Проблема проявляется только в Windows XP. На выключенном ПК, под UEFI/BIOS или в современной ОС - время идет правильно. Хотя часовая микросхема RTC должна быть независимой частью, но на современных материнских платах это не так. Исследование показало, что уход часов "вперед" происходит при постоянном переключении периода системного таймера 16 мс в 1 мс и обратно. В Windows XP (по умолчанию) этот таймер работает с периодом 16 мс и если на ПК не проявлять активности - то системный таймер продолжит работать с периодом 16 мс. Но при запуске Хрома или мультимедиа приложений, таймер переключается в режим работы с периодом 1 мс и может возвращаться на 16 мс. При жестко установленном периоде 16 мс (или 1 мс) время идет точно, но при постоянном переключении таймера 16 мс - 1 мс - 16 мс - 1 мс происходит сбой в работе часов реального времени RTC. Решение проблемы: Поскольку специалисты с Win-Raid не смогли разобраться с причиной данной проблемы, то "красивого" решения (на уровне патча системных файлов) по состоянию на 3 января 2021 года ещё не появилось. Имеющиеся правленые файлы hal.dll и intelppm.sys решают какую-то другую проблему с таймерами, но описанный глюк никак не влияют. Зато мы имеем "костыльное" решение - программа 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 Данная программа служит для наглядной демонстрации проблемы с 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 должны находиться рядом, в одной директории. Проверка 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 мс и выводит измеренное значение на экран поверх всех окон. Скачать 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 |