Все прерывания делятся по следующим приоритетам: 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
Статус: Не в сети Регистрация: 14.06.2009 Откуда: Омск
SubL0ck в одной игре?) Т.е вот сразу налету меняешь мышки, с одной фризит и инпут лаг, а с другой нет?
я просто крайне скептически отношусь к "решению" этой проблемы(а это та самая проблема, с инпут лагом, рассинхроном и задержками), тем более когда меняют, мыши, железо пк, настройки ос и сами ос. Нет, я не против если все так как ты говоришь, и даже возможно рад, что ты решил проблему, но верится с большим трудом. Ибо все кто с таким сталкиваются то первое на что думают - лагает мышь, а дальше пошло поехало, пока не перетрусят весь системник, все настройки и ос не успокаиваются(так делают все, в том числе и я).
Advanced member
Статус: Не в сети Регистрация: 29.03.2017
https://ru.wikipedia.org/wiki/Message_S ... Interrupts По сути она правит одну запись в реестре для соотвествующего устройства. HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\PCI\%устройство%\Device Parameters\Interrupt Management\MessageSignaledInterruptProperties
Вы ищите проблему где её нет. Проблемы с DPC latency обычно явно выражены и не требует отслеживания системы часами. А то, что у вас скорее следствие чего-то иного, но не причина.
Bomchik Есть же новая версия с возможность выбора приоритета для прерываний. Народ, у меня 1080 kernel mode driver всегда значение 200-210 после 2 минут ожидания без нагрузки на систему и отключенной сети. У меня похоже здесь самое высокое значение. ((
Member
Статус: Не в сети Регистрация: 25.06.2013 Откуда: Правобережна UA
Agiliter писал(а):
Вы ищите проблему где её нет. Проблемы с DPC latency обычно явно выражены и не требует отслеживания системы часами. А то, что у вас скорее следствие чего-то иного, но не причина.
Я тоже так думаю. Но куда копать я не знаю. Программа показывает, что тупит(ntoskrnl.exe), но я не смог нагуглить причину проблемы. А куда и что копать я не знаю. По меркам оверов, я нубас и такие тонкости системы для меня темный лес.
Hsdgasd самый действенный способ для меня оказался: отключил все все энергосберегайки в БИОС и отключил очень много служб - на скриншоте видно какие включены и работают, все остальное отключено.
Последний раз редактировалось lampa 28.05.2019 21:23, всего редактировалось 1 раз.
Member
Статус: Не в сети Регистрация: 22.04.2016 Откуда: от верблюда Фото: 0
Подскажите, иногда в играх бывают пики, виноват при этом драйвер wdf1000.sys, куда копать?
_________________________________________________________________________________________________________ CONCLUSION _________________________________________________________________________________________________________ Your system appears to be having trouble handling real-time audio and other tasks. You are likely to experience buffer underruns appearing as drop outs, clicks or pops. One problem may be related to power management, disable CPU throttling settings in Control Panel and BIOS setup. Check for BIOS updates. LatencyMon has been analyzing your system for 0:56:43 (h:mm:ss) on all processors.
_________________________________________________________________________________________________________ SYSTEM INFORMATION _________________________________________________________________________________________________________ Computer name: HAL9000 OS version: Windows 10 , 10.0, version 1803, build: 17134 (x64) Hardware: X370GT7, BIOSTAR Group CPU: AuthenticAMD AMD Ryzen 7 1700 Eight-Core Processor Logical processors: 16 Processor groups: 1 RAM: 16338 MB total
_________________________________________________________________________________________________________ CPU SPEED _________________________________________________________________________________________________________ Reported CPU speed: 2994 MHz
Note: reported execution times may be calculated based on a fixed reported CPU speed. Disable variable speed settings like Intel Speed Step and AMD Cool N Quiet in the BIOS setup for more accurate results.
_________________________________________________________________________________________________________ MEASURED INTERRUPT TO USER PROCESS LATENCIES _________________________________________________________________________________________________________ The interrupt to process latency reflects the measured interval that a usermode process needed to respond to a hardware request from the moment the interrupt service routine started execution. This includes the scheduling and execution of a DPC routine, the signaling of an event and the waking up of a usermode thread from an idle wait state in response to that event.
Highest measured interrupt to process latency (µs): 2302,856787 Average measured interrupt to process latency (µs): 4,592246
Highest measured interrupt to DPC latency (µs): 2300,804940 Average measured interrupt to DPC latency (µs): 2,031542
_________________________________________________________________________________________________________ REPORTED ISRs _________________________________________________________________________________________________________ Interrupt service routines are routines installed by the OS and device drivers that execute in response to a hardware interrupt signal.
Highest ISR routine execution time (µs): 8,837675 Driver with highest ISR routine execution time: Wdf01000.sys - Среда выполнения платформы драйвера режима ядра, Microsoft Corporation
Highest reported total ISR routine time (%): 0,000001 Driver with highest ISR total time: Wdf01000.sys - Среда выполнения платформы драйвера режима ядра, Microsoft Corporation
Total time spent in ISRs (%) 0,000001
ISR count (execution time <250 µs): 808 ISR count (execution time 250-500 µs): 0 ISR count (execution time 500-999 µs): 0 ISR count (execution time 1000-1999 µs): 0 ISR count (execution time 2000-3999 µs): 0 ISR count (execution time >=4000 µs): 0
_________________________________________________________________________________________________________ REPORTED DPCs _________________________________________________________________________________________________________ DPC routines are part of the interrupt servicing dispatch mechanism and disable the possibility for a process to utilize the CPU while it is interrupted until the DPC has finished execution.
Highest DPC routine execution time (µs): 323,667335 Driver with highest DPC routine execution time: Wdf01000.sys - Среда выполнения платформы драйвера режима ядра, Microsoft Corporation
Highest reported total DPC routine time (%): 0,000011 Driver with highest DPC total execution time: Wdf01000.sys - Среда выполнения платформы драйвера режима ядра, Microsoft Corporation
Total time spent in DPCs (%) 0,000024
DPC count (execution time <250 µs): 1922 DPC count (execution time 250-500 µs): 0 DPC count (execution time 500-999 µs): 10 DPC count (execution time 1000-1999 µs): 0 DPC count (execution time 2000-3999 µs): 0 DPC count (execution time >=4000 µs): 0
_________________________________________________________________________________________________________ REPORTED HARD PAGEFAULTS _________________________________________________________________________________________________________ Hard pagefaults are events that get triggered by making use of virtual memory that is not resident in RAM but backed by a memory mapped file on disk. The process of resolving the hard pagefault requires reading in the memory from disk while the process is interrupted and blocked from execution.
NOTE: some processes were hit by hard pagefaults. If these were programs producing audio, they are likely to interrupt the audio stream resulting in dropouts, clicks and pops. Check the Processes tab to see which programs were hit.
Process with highest pagefault count: latmon.exe
Total number of hard pagefaults 209 Hard pagefault count of hardest hit process: 104 Number of processes hit: 3
_________________________________________________________________________________________________________ PER CPU DATA _________________________________________________________________________________________________________ CPU 0 Interrupt cycle time (s): 293,905047 CPU 0 ISR highest execution time (µs): 1,513026 CPU 0 ISR total execution time (s): 0,000049 CPU 0 ISR count: 60 CPU 0 DPC highest execution time (µs): 265,931864 CPU 0 DPC total execution time (s): 0,005228 CPU 0 DPC count: 1170 _________________________________________________________________________________________________________ CPU 1 Interrupt cycle time (s): 150,222462 CPU 1 ISR highest execution time (µs): 1,993988 CPU 1 ISR total execution time (s): 0,000214 CPU 1 ISR count: 344 CPU 1 DPC highest execution time (µs): 323,667335 CPU 1 DPC total execution time (s): 0,006394 CPU 1 DPC count: 448 _________________________________________________________________________________________________________ CPU 2 Interrupt cycle time (s): 56,289290 CPU 2 ISR highest execution time (µs): 0,0 CPU 2 ISR total execution time (s): 0,0 CPU 2 ISR count: 0 CPU 2 DPC highest execution time (µs): 6,372745 CPU 2 DPC total execution time (s): 0,000035 CPU 2 DPC count: 17 _________________________________________________________________________________________________________ CPU 3 Interrupt cycle time (s): 21,741407 CPU 3 ISR highest execution time (µs): 0,0 CPU 3 ISR total execution time (s): 0,0 CPU 3 ISR count: 0 CPU 3 DPC highest execution time (µs): 12,014028 CPU 3 DPC total execution time (s): 0,000027 CPU 3 DPC count: 11 _________________________________________________________________________________________________________ CPU 4 Interrupt cycle time (s): 26,391104 CPU 4 ISR highest execution time (µs): 0,0 CPU 4 ISR total execution time (s): 0,0 CPU 4 ISR count: 0 CPU 4 DPC highest execution time (µs): 27,154309 CPU 4 DPC total execution time (s): 0,000094 CPU 4 DPC count: 21 _________________________________________________________________________________________________________ CPU 5 Interrupt cycle time (s): 21,303856 CPU 5 ISR highest execution time (µs): 0,0 CPU 5 ISR total execution time (s): 0,0 CPU 5 ISR count: 0 CPU 5 DPC highest execution time (µs): 11,282565 CPU 5 DPC total execution time (s): 0,000164 CPU 5 DPC count: 37 _________________________________________________________________________________________________________ CPU 6 Interrupt cycle time (s): 26,302870 CPU 6 ISR highest execution time (µs): 0,0 CPU 6 ISR total execution time (s): 0,0 CPU 6 ISR count: 0 CPU 6 DPC highest execution time (µs): 11,312625 CPU 6 DPC total execution time (s): 0,000081 CPU 6 DPC count: 24 _________________________________________________________________________________________________________ CPU 7 Interrupt cycle time (s): 20,232850 CPU 7 ISR highest execution time (µs): 0,0 CPU 7 ISR total execution time (s): 0,0 CPU 7 ISR count: 0 CPU 7 DPC highest execution time (µs): 19,659319 CPU 7 DPC total execution time (s): 0,000025 CPU 7 DPC count: 8 _________________________________________________________________________________________________________ CPU 8 Interrupt cycle time (s): 28,322092 CPU 8 ISR highest execution time (µs): 0,0 CPU 8 ISR total execution time (s): 0,0 CPU 8 ISR count: 0 CPU 8 DPC highest execution time (µs): 8,176353 CPU 8 DPC total execution time (s): 0,000071 CPU 8 DPC count: 26 _________________________________________________________________________________________________________ CPU 9 Interrupt cycle time (s): 20,042155 CPU 9 ISR highest execution time (µs): 0,0 CPU 9 ISR total execution time (s): 0,0 CPU 9 ISR count: 0 CPU 9 DPC highest execution time (µs): 3,947896 CPU 9 DPC total execution time (s): 0,000012 CPU 9 DPC count: 8 _________________________________________________________________________________________________________ CPU 10 Interrupt cycle time (s): 27,646698 CPU 10 ISR highest execution time (µs): 0,0 CPU 10 ISR total execution time (s): 0,0 CPU 10 ISR count: 0 CPU 10 DPC highest execution time (µs): 6,913828 CPU 10 DPC total execution time (s): 0,000031 CPU 10 DPC count: 13 _________________________________________________________________________________________________________ CPU 11 Interrupt cycle time (s): 18,881638 CPU 11 ISR highest execution time (µs): 0,0 CPU 11 ISR total execution time (s): 0,0 CPU 11 ISR count: 0 CPU 11 DPC highest execution time (µs): 12,404810 CPU 11 DPC total execution time (s): 0,000165 CPU 11 DPC count: 44 _________________________________________________________________________________________________________ CPU 12 Interrupt cycle time (s): 36,338215 CPU 12 ISR highest execution time (µs): 1,072144 CPU 12 ISR total execution time (s): 0,000144 CPU 12 ISR count: 275 CPU 12 DPC highest execution time (µs): 36,002004 CPU 12 DPC total execution time (s): 0,000163 CPU 12 DPC count: 30 _________________________________________________________________________________________________________ CPU 13 Interrupt cycle time (s): 20,061987 CPU 13 ISR highest execution time (µs): 1,182365 CPU 13 ISR total execution time (s): 0,000018 CPU 13 ISR count: 29 CPU 13 DPC highest execution time (µs): 31,472946 CPU 13 DPC total execution time (s): 0,000093 CPU 13 DPC count: 20 _________________________________________________________________________________________________________ CPU 14 Interrupt cycle time (s): 32,368301 CPU 14 ISR highest execution time (µs): 1,032064 CPU 14 ISR total execution time (s): 0,000020 CPU 14 ISR count: 28 CPU 14 DPC highest execution time (µs): 22,384770 CPU 14 DPC total execution time (s): 0,000233 CPU 14 DPC count: 44 _________________________________________________________________________________________________________ CPU 15 Interrupt cycle time (s): 22,155679 CPU 15 ISR highest execution time (µs): 8,837675 CPU 15 ISR total execution time (s): 0,000070 CPU 15 ISR count: 72 CPU 15 DPC highest execution time (µs): 5,931864 CPU 15 DPC total execution time (s): 0,000014 CPU 15 DPC count: 11 _________________________________________________________________________________________________________
Вложения:
Безымянный.png [ 82.49 КБ | Просмотров: 1808 ]
_________________ У тебя нет врагов. Никто во всём мире не желает тебе зла. Тебе ни с кем не надо воевать. (c)
lampa То есть проц молотит на полную всегда? У меня нет возможности отключить HPET в биос. Если честно, лагов в играх нет, линия "время кадра" в MSI AB ровная без просадок и спайков.
Hsdgasd получается, что молотит, но я ещё пару неделек так поиграюсь и потом верну всё как было. На графики не смотрел, просто не ощущаю проблем. HPET вроди как можно и в самой винде отключить и это то же работает и если не ошибаюсь, то Win 10 не использует его по умолчанию, в ней новый таймер.
Привет! Появились фризы в играх. 6700К 4.4 Мгц, мать Asus Maximus VIII Ranger + оператива Кингстон Хайпер Саваж 2133 (не гнал) так вот раньше сидел на мониторе 60Гц с вкл верт синхронизацией + печ 1070, все работало как надо, микрофризов не было. Недавно купил монитор UltraWide 144Гц (2560 на 1080) с гисинк + печ 1080Ти и началось, фпс 100-140 но фризы секундные вымораживают и резкое падение фпс до 80. Винда чистая, выключил все ненужное, игры стоят на ссд как и сама винда 10, файл подкачки включен на дисках. Драйверы ставил на чистую винду с ДДУ. Но не во всех играх так, в DOOM новый все очень хорошо, Метро тоже все хорошо, но редко проскакивает фриз. В ведьмаке 3 стало намного хуже фпс 100-130 с резкими просадками фпс до 80-90, играть невозможно фриз каждые десять секунд и сам процессор стал грузится с резкими скачками до 93% раньше грузился вроде на 50-60%. Тоже и с Pugb. Видеокарта тоже на 99% не всегда работает, резко до 80-75-90% может падать. Вертикальная синхронизация в играх выкл. В настройках драйвера: Режим макс производительность Вертикальный синхроимпульс на быстро Максимальное количество заранее подготовленных кадров на 1 и вкл Гисинк Неужели дело в процессоре, получается если раньше сидел на включенном всинке в игре то и процессор особо не напрягался? Смотрел на ютубе тест с таким же камнем (4.4Мгц) +1080ти + UltraWide, в ведьмаке грузится на 70% и всегда 99% видеокарта. Частоты процессора в простое прыгают, отключить энергосберегайки в биосе и в винде? Но раньше и с ними норм работало же.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения