Все прерывания делятся по следующим приоритетам: 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
Статус: Не в сети Регистрация: 25.01.2004 Откуда: Ростов-на-Дону Фото: 4
OLD Hunter писал(а):
Но от того что ты их увидел что изменилось?
Многое. Применительно к овервотч и другим онлайн играм исследовать не получится, потому что надо записывать дебагерами-трассировщиками работу системы, а за них могут бан в игре выписать. В дебагерах и трассировщиках можно будет увидеть на что было потрачено время в момент появления лага. И от этого уже плясать. Правда не исключен вариант, что причину не удастся увидеть, потому что программа наблюдатель является частью наблюдаемой системы. Ну то есть она лаганет вместе со всей системой и ничего не запишет. Но это уже надо к узким специалистам, кто имеет опыт наблюдения за системой такими инструментами.
_________________ 12400|224XT|MSI PRO B660M-A DDR4|4x8Gb@3466|KFA2 3060-12X|Deepcool PQ650M|Corsair 200R|Win11x64
Member
Статус: Не в сети Регистрация: 14.06.2009 Откуда: Омск
CorniliuS писал(а):
Если есть задержки можно смело продолжать трагично жаловаться на судьбу, ну или попытаться решить проблему.
Зафиксировали увидели. Каким образом решать? Если оно меняется по времени, это раз. Второе - ни стабы, ни фильтры этот не фиксят. У единиц нормально работает от батареи ИБП, которой хватает на 10 минут. Ничего невозможно сделать по сути, если сам дом такой. Что конкретно не важно, ту же проводку в многоэтажном доме никто перекраивать не будет. А если это внешний фон, ещё хуже. По сути не важно, это нерешаемо. Знаю лишь несколько человек кто исправил - они переехали и купили новые компы. Старый в нормальном месте хоть и работает в 100 раз лучше, но все равно уже не так как должен.
Добавлено спустя 5 минут 32 секунды: Genrix Такие исследования в полном объеме могут заниматься только корпорации с практическими неограниченными ресурсами. Простой смертный максимум что может это купить монитор 360гц с рефлексом и камеру, что пишет в 1000 фпс и это как бы уже очень затратно. И все что ты сможешь запечатлеть это те самые задержки что чувствуешь. Для всего остального нужны другие ресурсы, инструменты и финансы.
Поэтому максимум что можно сделать - лучшая осведомленность и огласка проблемы. Чем больше людей знает что это есть тем лучше. Так же многие Уже имеют эту проблему, но не догадываются что это именно она, списывая на работу серверов, игры, игры разума и т.д.
OLD Hunter Я бы не спешил с выводами, сначала ее зафиксируй, можно ведь ничего и не зафиксировать... Про какой фон ты сейчас говоришь? Электромагнитный? Можно экранировать пк клеткой фарадея. Изготовить ее можно очень легко буквально из подручных средств.
Member
Статус: Не в сети Регистрация: 25.01.2004 Откуда: Ростов-на-Дону Фото: 4
OLD Hunter писал(а):
Genrix Такие исследования в полном объеме могут заниматься только корпорации с практическими неограниченными ресурсами. Простой смертный максимум что может это купить монитор 360гц с рефлексом и камеру, что пишет в 1000 фпс и это как бы уже очень затратно. И все что ты сможешь запечатлеть это те самые задержки что чувствуешь. Для всего остального нужны другие ресурсы, инструменты и финансы.
Ну прямо ресурсов всей вселенной не хватит чтобы отловить лаги в пекарне. Дебаг и трассировка - это не для 500 IQ. Просто я в этом не разбираюсь достаточно.
_________________ 12400|224XT|MSI PRO B660M-A DDR4|4x8Gb@3466|KFA2 3060-12X|Deepcool PQ650M|Corsair 200R|Win11x64
Добрый день, появилась проблема с плаваньем мышки где-то год назад, потом проблему я починил тем что пофиксил ОЗУ. Но сейчас увидел что мой avarege measured interrupt to process latency в latencymon прыгает от 6 до 12 при том что ниже 6 никогда не опускается, начав изучать проблему узнал что у всех знакомых ~3, по DPC самый нагружаемый драйвер dxgkrnl.sys и nvlddmkm.sys, за своим пк слежу и все дрова обновлены, на старушке gtx660 эффект тот же. Биос шил как самый новый так и самый старый, все что есть на мою мамку - все перепробывал. Есть только один нюанс, как-то раз я статикой убил звук подключая после чистки gtx660 где-то 1,5 лет назад, но СЦ по гарантии починил мамку. БП у меня старый 2012 года+-. Кроме показателей latencymon чувствуется эффект плаванья мыши через 30-40 секунд после разворачивания окна ксго к примеру. Тыкните пожалуйста хоть как-то в нужную сторону жития нет с этой чепухой.
Member
Статус: Не в сети Регистрация: 14.06.2009 Откуда: Омск
Band1tx Нету фикса. Обычный путь человека с этой траблой - переустановка винды, все мыслимые и немыслимые твики и оптимизации там, твики биоса. Смена железа, начиная по одной железки, заканчивая тем что меняется все в компе. Смена переферии, обычно всей. Смена мониторов. Смена ПК полностью. Если смена ПК полностью не помогает (в редких случаях "фиксится") - далее идут "фиксы" уровнем выше - стабилизаторы, фильтры, ИБП. Кто-то доходит до подъездных проводов и щитка. Кто-то лезет ещё дальше. Чтобы не повторять этот путь, или хотя бы его сократить есть самые простые 2 варианта: 1) банальное, переустановка винды. Без всяких твиков, оптимизаций и прочего. Чистый образ. Ставим. Если получаем все то же самое, те же глюки , переходим к пункту 2(1 пункт я думаю многие могут вообще игнорировать, т.к система и так переустанавливал не 1 раз) 2) Нужно найти где-то комп без такой проблемы, для проверок. Вариантов масса - от одолжить у друга на пару часов, до покупки в магазине, с возможностью возврата. Либо покупки бу, с конфигом который тянет КС и подобные игры. В случае чего бу ПК можно будет продать по той же цене.
Нужен полностью ПК в сборе, т.к очень высокой вероятностью на нем будут те же проблемы что и на старом компе. Это сразу даст понять что проблема не в какой-то железке и вообще не в ПК)
Если же новый пк(образно новый, просто другой) будет работать нормально то затем уже заменой и перетасовкой комплектующих можно будет понять в чем дело.
Member
Статус: Не в сети Регистрация: 28.02.2008 Откуда: Калининград Фото: 99
Band1tx писал(а):
Но сейчас увидел что мой avarege measured interrupt to process latency в latencymon прыгает от 6 до 12 при том что ниже 6 никогда не опускается, начав изучать проблему узнал что у всех знакомых ~3, по DPC самый нагружаемый драйвер dxgkrnl.sys и nvlddmkm.sys, за своим пк слежу и все дрова обновлены, на старушке gtx660 эффект тот же.
Это нормальные (даже хорошие) показатели и лечить тут нечего
OLD Hunter писал(а):
Обычный путь человека с этой траблой - переустановка винды, все мыслимые и немыслимые твики и оптимизации там, твики биоса
А что если перечисленные твики возьмут и помогут? ))
Member
Статус: Не в сети Регистрация: 14.06.2009 Откуда: Омск
iG0Lka писал(а):
эти я видел а где ставиться 20 или 30?
Автоматически. Делаешь ограничение и такой тикрейт будет , по ctrl shift N видно.
k2viper писал(а):
А что если перечисленные твики возьмут и помогут? ))
Ну флаг в руки, если поможет. Но по дефолту мышки не плавают в нормальных домах и квартирах, переставая плавать ночью. Покупаешь комп ставишь винду, игру и вперед.
Member
Статус: Не в сети Регистрация: 28.02.2008 Откуда: Калининград Фото: 99
OLD Hunter писал(а):
Но по дефолту мышки не плавают в нормальных домах и квартирах
Ну вот у меня, по твоему представлению, нормальный дом и квартира - однако и у меня мыши плавали и срывались Рэйзер тайпан например, и некоторые другие, не всегда а при некоторых условиях - например если сенсор немного забьется невидимым на первый взгляд волоском. Откуда? Ну например у меня волосатые руки, и кошка по столу ночью может ходить, хотя я это пытаюсь пресекать но она пробирается ) Почистил сенсор кисточкой и снова норм.
Member
Статус: Не в сети Регистрация: 25.01.2004 Откуда: Ростов-на-Дону Фото: 4
OLD Hunter писал(а):
На счет мышки - я знаю чела из квейк чампионс, достаточно сильного. Он сменил 15 мышек(!) и они у него работали нормально несколько часов/дней.
У него в дискорде случайно ник не штакет? А то общался с квакером по проблеме мышек один в один, у него полная хата мышек уже. Купит новую, поработает и рипается.
_________________ 12400|224XT|MSI PRO B660M-A DDR4|4x8Gb@3466|KFA2 3060-12X|Deepcool PQ650M|Corsair 200R|Win11x64
Member
Статус: Не в сети Регистрация: 28.11.2015 Фото: 38
Если проблемы у нвидии, то может обратите внимание на то, что заметил канал hardwareunboxed. В силу исполнения планировщика у нвидии программно, а не аппаратно как у амд. Происходит отжор ресурсов процессора, вплоть до 30%.Разница просто чудовищна. Это не было заметно на дх11 из-за исполнения обычно не более чем на двух потоках. Однако в современных как: вулкан, дх12 это становиться видно. https://www.youtube.com/watch?v=JLEIJhunaW8 https://www.youtube.com/watch?v=TD6-Y2a1XbE https://www.youtube.com/watch?v=G03fzsYUNDU
Те проверить вы это можете в своих играх путём снижения настроек обсчитываемых цп как: тени, освещение, кол-во источников звуков, частицы, дальность прорисовки (в мультиплеере влияет), лимитировать фпс. Где основная задача добиться чтоб на мониторинге загрузка цп НЕ превышала 65-70%. Попутно разгрузите первое ядро - core 0. Вручную переназначьте исполнение всех процессов, не трогайте только драйвера нвидии, оставьте в дефолте.
Member
Статус: Не в сети Регистрация: 22.03.2005 Откуда: Уфа Фото: 0
korino писал(а):
обратите внимание
Ха! Смотрим в первом видосе на 3:10. 3070 на мощном ЦП дрюкает RX5600 только так по обоим фпс. Но, на слабом ЦП, ситуация - ровно наоборот. Вывод тут не 1, а 2! Да, RX не забирает у слабого ЦП ресурс на планирование и это - гуд. Но, свой аппаратный планировщик у карты, хоть и быстрее слабых ЦП, но он медленнее в планировании, чем мощные ЦП! (смотрим графики 5600Х+3070) Это прекрасно иллюстрирует, почему НВ просто сделала ставку на программный планировщик для ЦП, а не свой на ГП (который ещё и + к себестоимости). Здесь, главное, чтобы ресурс НВ отжирала не у основного рендер-потока, который всегда лимитирует ЦП производительность, т.к. когда упор в ЦП - это снижает фпс, который мог быть ещё выше с аппаратным планировщиком у НВ.
Добавлено спустя 19 минут 36 секунд: Кстати, есть ещё и третий вывод - о том, что на картах НВ фпс, из-за программного планировщика, плавает с большей амплитудой (замес - не замес в игре), чем у АМД (это справедливо только для слабых ЦП! У сильных - наоборот. ). А человек, как мы помним, хорошо отмечает именно появление разницы, а не конкретное текущее значение: 60, 120 или 300 (фпс).
Добавлено спустя 10 минут 42 секунды: А с HAGS вообще, похоже, прикол получился. АМД: у меня уже есть аппаратный планировщик на картах. Он как бы работает и сам и помогать там нечему. Спасибо, HAGS за предложение. НВидиа: а мои карты всё на ЦП планируют - нам на ГП вообще нечего ускорять с вашим HAGS.
Member
Статус: Не в сети Регистрация: 28.11.2015 Фото: 38
У тебя расхождения с логикой.... Логическую цепочку не прослеживаешь по взаимосвязям? В случае, когда цп, условно говоря мощный, естественно у него есть запас ресурса (процессорного времени!) Однако планировщик как жрал его ресурс так и будет продолжать жрать. И каждый раз это балансирование на грани фола, поскольку всё в зависимости от игрового проекта и используемых настроек. Где в случае если использовать амд с аппаратным, запас ресурса будет намного выше.Те сразц, поставил нвидеа - урезал проц по производительности! И уже нет ресурса по сути в должной мере в запасе на выделение дополнительного обсчёта. Всё на грани фола.
А твоя логика- ну как же , вот же, мощный цп, и всё отлично. Когда с амд картой тот же цп отрисует больше и выходит что ровнее фреймтайм будет.
Member
Статус: Не в сети Регистрация: 22.03.2005 Откуда: Уфа Фото: 0
korino писал(а):
расхождения с логикой
Похоже это ты не понял мою логику и расхождение с ней только у тебя. За исключением упоминаний не к месту про какой-то "на грани фола" - я не увидел никаких явных противоречий написанному мной. А вот урезал ты или не урезал ЦП картой НВидиа - зависит от ответа на вопрос: многопоточный алгоритм у планировщика задач для ГП или однопоточный (потому как, в первом случае, при большом числе ядер, т.е. с запасом - никто никого не урезает, а как говорят в народе просто "ЦП раскрывает ГП"). И, да, мощный ЦП = всегда отлично, даже если он будет подрезан картой НВидиа, т.к. он всё равно будет производительней планировщика ГП АМД!
Member
Статус: Не в сети Регистрация: 28.11.2015 Фото: 38
k2viper писал(а):
На практике такого не особо происходит ведь? Значит не всё так просто.
Если брать видюшки максимально близкие по уровню. То в сравнении 6 серии от амд и 3 сериие от нвидеа мы видим, что без трассировки, именно по заполнению уже подготовленных кадров в fhd (которые внезапно готовит цп),фпс выше.
Методику тестирования я предложил желающим выше.
Добавлено спустя 3 минуты 5 секунд:
Alex TOPMAN писал(а):
Похоже это ты не понял мою логику и расхождение с ней только у тебя. За исключением упоминаний не к месту про какой-то "на грани фола" - я не увидел никаких явных противоречий написанному мной. А вот урезал ты или не урезал ЦП картой НВидиа - зависит от ответа на вопрос: многопоточный алгоритм у планировщика задач для ГП или однопоточный (потому как, в первом случае, при большом числе ядер, т.е. с запасом - никто никого не урезает, а как говорят в народе просто "ЦП раскрывает ГП"). И, да, мощный ЦП = всегда отлично, даже если он будет подрезан картой НВидиа, т.к. он всё равно будет производительней планировщика ГП АМД!
Ах ну да, эмуляция эффективнее исполнения в кремнии. Да ты гений! Цп время жрётся и как оно уже распределится зависит от мноних факторов, ооочень многих. Но ты можешь и дальше пытаться убеждать себя что програмное исполнение лучше нативного... Где твой мощный цп становится на ступеньку ниже по выдаваемой мощности чем он мог бы работать без эмуляции
Member
Статус: Не в сети Регистрация: 22.03.2005 Откуда: Уфа Фото: 0
korino писал(а):
эмуляция эффективнее исполнения в кремнии
ЦП - это тоже кремний, к твоему сведению. И планировщик, такая штука, которая нужна и есть почти везде. У ЦП есть свой планировщик, у винды свой - почти везде есть такой "регулировщик - кому направо, а кому - налево". И слово "эмуляция" тут неуместно. А вот то, что НВидиа "расплачивается" накладными за процедуру планирования "где-то там - на ЦПУ", это неоспоримый факт.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения