Все прерывания делятся по следующим приоритетам: 1 место - работает на уровне кольцо -2 прерывания SMI (system management interrupt — прерывание системного управления), которое возникает: -по сигналу от чипсета или периферии на материнской плате -программный SMI, посланный системным ПО через порт ввода-вывода -запись по адресу ввода-вывода, для которого микропрограммно установлена необходимость активации SMM. 2 место - гипервизор, который работает в кольце -1 3 место - ядро операционной системы - работает в кольце 0 4 место - пользовательский уровень - работает в кольце 3
Позднее дополню каждый раздел. Все проблемы у нас связаны с тем, что windows относится к операционным системам с вытесняющей многозадачностью. Вытесняющая многозадачность требует обработки системного прерывания от аппаратного таймера. По истечении кванта времени, отведённого процессу, происходит прерывание и вызывается планировщик процессов. Частота вызова планировщика критична: слишком частый его вызов будет расходовать процессорное время впустую. Единственное, что мы можем изменить - это увеличить время кванта и поменять соотношение квантов времени на активную задачу и задачи в фоне, за это отвечает параметр в реестре Win32PrioritySeparation По умолчанию 0х26 кванты 18:6 = Оптимальный вариант. https://github.com/keoy7am/Win32PrioritySeparationTool При этом само время кванта зависит от системного таймера. При системном таймера 15.625 мс оно будет больше, чем при 1.0 мс. Высчитывается время системного таймера * тики. 1 тик= 3 кванта Для системного таймера 0.5 мс фону тогда буде даваться 0.5мс*6/3 = 1мс из каждых 4 мс. При 1 мс - 2мс из каждых 8мс. При 2 мс - 4мс из каждых 16мс. Для борьбы с фризами оптимально выставить системный таймер 0.5мс.
SMI-прерывания зависят от BIOS/UEFI и оборудования. Отключаем все лишнее, отключаем энергосохранение, скорость вентиляторов фиксируем, это все, что мы можем сделать. В нашем плане энергосохранения выбрать оценка для поднятия частоты вместо 15 мс максимум 5000 мс. Есть программа Intel SMI Latency Checker Для гипервизора - отключаем поддержку виртуальных машин в биосе.
Про прерывания на уровне ядра и пользователя в windows.
В Windows применяется: - для x86 - 32 уровня IRQL от 0 до 31 (в скобках указано числовое значение): High (31) Power fail (30) IPI (29) Clock (28) Profile (27) Диапазон аппаратных прерываний, называемых Devices IRQL, или DIRQL (от 26 до 3) или ISR DPC/DISPATCH (2) APC (1) PASSIVE (0) Это означает, например, что планировщик (работающий на уровне DPC/DISPATCH) может быть прерван аппаратными прерываниями, межпроцессорными прерываниями (IPI) и т. д., но не может быть прерван асинхронными процедурами (APC) и обычными потоками, работающими на уровне PASSIVE. Межпроцессорные прерывания IPI могут быть прерваны сбоем электропитания (прерывание на уровне Power fail), но не могут быть прерваны обычными аппаратными прерываниями от устройств и т. д. - для х64 16 уровней IRQL (от 0 до 15) High/Profile (15) Interprocessor interrupt/Power (14) Clock (13) Synch (12) Device n (11) ......... Device 1 (3) Dispatch/DPC (2) APC (1) Passive/Low (0)
При этом: hardware interrupts 3-15 (3-31) software interrupts 1-2 (1-2) normal thread execution 0 (0)
Наш пользовательский процесс может иметь следующие приоритеты: Idle - 4 Below Normal - 6 Normal -8 Above Normal -10 High -13 Real-Time -24 Внутри процесса мы можем задать приоритет для его потоков: Idle дает итоговый приоритет процесса с потоком 1, кроме real-time, там он его просто снизит до фиксированной 16 Lowest -2 Below Normal -1 Normal 0 Above Normal +1 Highest +2 Time Critical +7
Итоговый приоритет потока - это сумма приоритетов процесса и потока. 31 - максимум Real-Time - от 16 до 31. При этом даже максимальный 31 приоритет не лает нам возможности подняться выше уровня Passive/Low(0), поэтому любое прерывание на нашем ядре прервет нашу программу.
Борьба с прерываниями. Бороться надо двумя путями. Первый путь - уменьшить само количество прерываний=их частоту. Частота прерываний за 1 секунду до 10000 считается еще неплохой. Второй путь - уменьшить длительность прерываний. Есть еще третий путь - освободить от прерываний нужные нам ядра.
Первое и самое главное. Установка максимально облегченной и очищенной системы. Если хватит windows 10, то лучше ставить ее. 23H2 лучше, чем 24Н2. Отключить динамический таймер. Поднять, а не снизить время для системного таймера до 15,625 мс! Если снизим до 0.5 мс, то увеличим количество прерываний. Но тут вступает в действие многозадачность винды. 1/4 времени отдается фоновым процессам. Минимум - это 6 тиков=2 кванта Полностью вырубить все фоновые процессы на винде мы не сможем. Для 120 кадров нам нужно иметь перерыв не больше 1/120=8.(3) мс. Поэтому подходит время для системного таймера только 0.5 мс /1 мс и условно 2 мс , так как 2 мс*2=4 мс. Внести в реестр для глобальной настройки системного таймера (работает только для win 11) [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\kernel] "GlobalTimerResolutionRequests"=dword:00000001"
Отключить VSYNC. Включить тройную буферизацию если процессор успевает рендерить, то компенсирует воемя двух кадров: 2*1000 мс / частоту кадров в Гц Краткий список исследований по психофизиологии: Watson (1986): Задержки <5 мс незаметны. Kelly (1979): Порог фликера <2 мс. Burr & Ross (1982): 10% кадра = 100мс/частоту кадров (при движении). Clayton (2018): 1–2% кадров= 1000мс*процент пропуска кадров (10–20 мс/с) незаметно. Carrasco (2011): <5–10 мс при внимании. Hoffman et al. (2017): <3 мс с размытием. Swafford et al. (2016): <4 мс, 2% (20 мс) при редких фризах (реже 1 раза в секунду). Digital Foundry (2025): 0.125 фриза/с=0.125*1000мс/частоту кадров Гц) заметно при частых повторениях.
Для 120 Гц: 1982-0.833мс 2025-1.042мс
Снизить частоту опроса мыши до 125Гц.
Главные правила для таймеров: Таймеры используются для времени (QPC) и для системных прерываний=тиков.
useplatformclock disables TSC and uses the platform source clock instead (HPET or PMT). PMT is used when HPET is disabled in BIOS. useplatformtick disables TSC tick and uses the platform source tick instead (RTC). Does disabledynamictick work when useplatformtick is used? No, it does not do anything since RTC is not a dynamic tick counter.
При этом возможны разные комбинации таймеров.
TSC + TSC without desync: bcdedit /deletevalue useplatformclock - bcdedit /deletevalue useplatformtick (make sure HPET is enabled in BIOS) TSC + RTC: bcdedit /deletevalue useplatformclock - bcdedit /set useplatformtick Yes HPET + RTC: bcdedit /set useplatformclock Yes - bcdedit /set useplatformtick Yes (make sure HPET is enabled in BIOS) PMT + RTC: bcdedit /set useplatformclock Yes - bcdedit /set useplatformtick Yes (make sure HPET is disabled in BIOS) Частота HPET 14.318180 MHz, в 4 раза выше частоты ACPI PM Timer. RTC устаревший тайминг с частотой от 2-х до 8192 Гц. Использует кварц 32.768 KHz HPET требует больше времени на вызов, чем TSC или PM Timer, но это важно только для системных прерываний. HPET и PM timer находятся в южном мосте. TSC в процессоре. Поэтому вполне допустима комбинация HPET (для времени QPC)+TSC (для тиков).
bcdedit /set useplatformtick no (отключаем RTC и включаем TSC для тиков) bcdedit /set useplatformclock no (отключаем HPET и включаем TSC для времени QPC) bcdedit /set disabledynamictick yes (отключаем динамическое изменение частоты системного таймера - влияет только на тики) bcdedit /set tscsyncpolicy Enhanced (включаем улучшенную синхронизацию TSC-таймера) HPET не следует отключать в биосе и в диспетчере устройств. Посмотреть текущую конфигурацию можно с помощью команды bcdedit /enum
Обсуждение проблем ОС и оборудования: задержка реакции системы (latency), микроcтаттер, инпутлаг, фризы.
Перед тем как задавать вопросы, просьба прочитать FAQ
Осуществлять мониторинг программойLatency Monitorнужно в течение 1 минуты, в состоянии простоя системы т.е. без дисковой, сетевой активности, и любой другой, с выключенным ав и приложениями в трее и автозагрузке, не раньше чем через 2 минуты после загрузки системы. Не двигаем мышку и не используем клавиатуру в момент измерений. Потом остановка и скриншот.
Member
Статус: Не в сети Регистрация: 28.02.2008 Откуда: Калининград Фото: 99
OLD Hunter писал(а):
А у других людей, которые вообще без проблем играют в вашем же городе/районе/подъезд, а ещё смешнее если в доме - у них какой-то другой интернет, нет соседей, они в вакууме где-то без iptv и прочей чепухи.
Неа, не другой начиная с граничных BRAS и выше. Но вот сеть в доме/районе вполне себе другая. И я чуть выше об этом написал:
k2viper писал(а):
А вообще, наверное, провайдер провайдеру, и район району рознь. Где-то сеть новее, где-то проникновение услуг ниже, где-то отдельно взятый оператор монополист (и на его сеть нагрузки максимальны), а где-то у него 5 равноценных конкурентов. Я только могу поставить средний по больнице диагноз, наблюдая тенденцию расширения спектра сопутствующих широкополосному интернету услуг и их агрессивного предложения клиентам.
Проблемы, корень которых я вижу именно в высокой нагрузке на сети на домовом/районном уровне и росте этой нагрузки из-за IPTV и предложений скоростных тарифов, действительно неоднородно проявляются. Потому что см.выше. А ещё их нетрудно диагностировать, если проверять адрес не снаружи, а внутри провайдерской сети. Тогда-то и станут видны лаги не зависящие от перипетий на аплинках и сормах.
Вот так примерно это выглядит, мои тесты не совсем релевантны т.к. у меня "хорошая" ситуация и значительных лагов нет. Однако таким методом вполне можно заметить, что у провайдера без IPTV практически идеально ровно (первый скрин), а вот у провайдера с IPTV (ТТК) уже можно наблюдать небольшие флуктуации пинга. Там где обстановка хуже, эти флуктуации будут больше. Аплинки и сормы не имеют отношения к этому трафику.
Заблокирован Статус: Не в сети Регистрация: 21.03.2012 Откуда: Донбасс Фото: 0
У себя в системе через панель Нвидии выключил G-Sync для монитора с FreeSync - в том же PUBG сетка рабица перестала мерцать при движении, общий отклик и скорость движения мышки стали намного быстрее, что приходится править чувствительность сенсора в настройках игр. При всём этом никаких разрывов картинки не вижу. Хрен его знает, что они там в драйверах Нвидии чудят, но у себя заметил улучшения. Драйвер последний официальный 461.09.
_________________ Мы мненью вашему вращенье придавали и осью был наш детородный орган. إن شاء الله
Заблокирован Статус: Не в сети Регистрация: 21.03.2012 Откуда: Донбасс Фото: 0
OLD Hunter Ты же меня не первый год знаешь - к чему такую глупость в мой адрес писать? Естественно, полноэкранный режим везде. Почему так, а не иначе - понятия не имею. Пишу то, что вижу конкретно у себя на своей системе. Расходится с общим мировоззрением - ну, бывает...
_________________ Мы мненью вашему вращенье придавали и осью был наш детородный орган. إن شاء الله
Member
Статус: Не в сети Регистрация: 14.06.2009 Откуда: Омск
Makc1968 Так нет никакого мировоззрения. Такие вещи работают только так и никак иначе. Не замечаешь это уже другое, непонятно почему, разрывы никуда не денутся, если нет технологий синхронизаций. Хоть какой фпс сделай, хоть сколько угодно Гц. Просто не обращаешь внимания на них, почему-то.
Member
Статус: Не в сети Регистрация: 28.02.2008 Откуда: Калининград Фото: 99
OLD Hunter писал(а):
Такие вещи работают только так и никак иначе.
Полноэкранная оптимизация не выкл, возможно
OLD Hunter писал(а):
Не замечаешь это уже другое, непонятно почему, разрывы никуда не денутся, если нет технологий синхронизаций. Хоть какой фпс сделай, хоть сколько угодно Гц.
Скажем при 300-400фпс и 240гц разрывы столь невелики что глаза не режут
Member
Статус: Не в сети Регистрация: 04.06.2017 Фото: 6
OLD Hunter на каком-то этапе вы перестаете ощущать задержку монитора, инпутлаг. Также и с разрывами. Как только разница между 2 состояниями, которые вы способны распознать как разные, станут неразличимыми из-за неуловимой вашему глазу разницы, так вы сразу сможете считать, что "разрывов нет". Я именно потакому принципу и играю в шутеры. Навалить побольше фпс и отрубить все синхронизации. Итог: идеальная картинка, идеальный лаг.
Member
Статус: Не в сети Регистрация: 28.02.2008 Откуда: Калининград Фото: 99
OLD Hunter писал(а):
И какая связь? ХОть включено хоть выключено, разрывы все равно должны быть.
Некоторые игры при использовании неэксклюзивного полноэкранного режима (borderless windowed) или полноэкранного с неотключённой "оптимизацией во весь экран" (что по существу весьма близко к borderless) включали что-то вроде адаптивного vsync. То есть ты синхронизацию не заказываешь, а оно есть.
Junior
Статус: Не в сети Регистрация: 15.11.2020 Фото: 3
Deviance писал(а):
Добавлено спустя 2 часа 4 минуты 24 секунды: Update: не смог чуть чуть копнуть тему и слиться, нырнул с головой... От отключения HPET может быть профит еще в одном случае! Когда Производитель МП неправильно задал настройки HPET... Есть у нас такой документик IA-PC HPET Specification, начиная с 10 страницы описываются все настройки и местоположение их в памяти. С помощью RWEverything чекнул у себя в дампе все настроечки на ASrock AB350 Pro4 и немного удивился, что разрядность таймера стоит 32 бит, вместо 64 и стоит настройка совместимости LegacyReplacement IRQ Routing, которая на современном железе вообще не уперлась... Проц чтоб получить данные читает 2 раза по 32 бита, а не один 64. Хотя 64 бит режим совместим с 32 бит приложниями... Если первые 64 бит с главными настройками недоступны для записи, то бит включение/выключения таймера и LegacyReplacement IRQ Routing доступны, выключение LegacyReplacement IRQ Routing сразу несколько меняет ощущение работы мыши(Logitech G502), выключение таймера медленно вешает систему в течении двух минут))) И стоит учитывать, что никаких useplatformclock не стоит, TSC используется по умолчанию. Так и приходится писать в асрок еще раз, то они XHCI hand-off включат и уберут, а учитывая новый AMD PSP, просто так после AMIBCP не прошьешься - беда, то теперь HPET в режиме совместимости 32 бит в 2к17 на мп под 4-8 ядер, когда этот режим просто изначально делали для 32 битных процессов на lga 775 просто без физической поддержки 64 бит. И видимо я все таки был неправ, не у всех плацебо на overclock.net))) Так же кому интересно у себя чекнуть, можно считать все настройки таймера с ACPI таблиц, в аиде так же можно посмотреть и разрядность и наличие режима совместимости со старыми методами прерываний.
На дефолтных настройках HPET таймера, курсор ватный. Действительно отключение режима совместимости сброс в 0 15-го бита делает курсор очень чувствительным, а установка 13 бита переключает с 32bit в 64bit, повышается точность позиционирования курсора.
Junior
Статус: Не в сети Регистрация: 15.11.2020 Фото: 3
iG0Lka писал(а):
где и как это сделать?
Rweveveryting http://rweverything.com/ В таблице apic ищещ смещение hpet в памяти, открывает редактор памяти, по смещению +9 DWORD от начала HPET в памяти. Устанавливаеш бит 13, сбрасываеш бит 15. Настройки hpet сразу применяются, до следующей перезагрузки системы. #77
Member
Статус: Не в сети Регистрация: 16.05.2010 Откуда: Ленинград Фото: 545
buildorbust писал(а):
В таблице apic
Вы зря потратили время:
Software has several ways of reading the 64 bit counter using 32 bit reads. The first is that it may halt the counter, read the high and low 32 bits, and then restart the counter. This has the obvious drawback of shifting the counter timebase.
If software does not want to halt the timer, it can use the 64-bit timer as a 32-bit timer by setting the TIMERn_32MODE_CNF bit. This will cause the timer to behave as a 32-bit timer. The upper 32-bits will always be 0.
Alternatively, software may do a multiple read of the counter while it is running. Software can read the high 32 bits, then the low 32 bits, then the high 32 bits again. If the high 32 bits have not changed between the two reads, then a rollover has not happened and the low 32 bits are valid. If the high 32 bits have changed between reads, then the multiple reads are repeated until a valid read is performed.
Note: On a 64-bit platform, if software attempts a 64 bit read of the 64-bit counter, software must be aware that some platforms may break the 64 bit read into two 32 bit reads, and therefore the read may be inaccurate if the low 32 bits roll over between the high and low part reads.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения