Все прерывания делятся по следующим приоритетам: 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 минуты после загрузки системы. Не двигаем мышку и не используем клавиатуру в момент измерений. Потом остановка и скриншот.
Заблокирован Статус: Не в сети Регистрация: 17.05.2021 Откуда: Zanzibar Фото: 6
anta777 писал(а):
Поднять, а не снизить время для системного таймера до 15,625 мс!
мне тоже этот пункт режет глаз. Наверно следует обозначить в шапке, что производительный режим пк подразумевает постоянные и частые прерывания, соответственно
anta777 писал(а):
Борьба с прерываниями
это борьба с производительностью. А это не совсем то, зачем мы здесь.
_________________ Asus h510m | 10400F | 2666cl13 | 6700XT RD | Be quiet SP 600 | Samsung 980 Pro 512 | FHD&240Hz Pretty good, huh ?
Moderator
Статус: Не в сети Регистрация: 10.06.2011
Вот
Первое и самое главное. Установка максимально облегченной и очищенной системы. Если хватит 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"
Member
Статус: Не в сети Регистрация: 15.09.2008 Фото: 0
anta777 Зачем всё это нужно, если запуск практически любого мультимедийного приложения и так переключает таймер с 15.625 на 1мс? Это прекрасно видно в реалтайме при запущенном ISLC.
Борьба с прерываниями за счет увеличения задержки системы это абсурд... Для каких задач? Данные методы снизят производительность системы и вы не получите никакой пользы в игровых и рабочих задачах. Времена твикинга на Windows уже давно прошли... Сейчас тюнинг актуален только на линуксе, но то что здесь в теме описано это ШИЗА, в профессиональных дата центрах где важен минимальные значения DPC latency итд совсем другие методы используются...
Member
Статус: Не в сети Регистрация: 17.02.2019 Фото: 0
Хотелось бы узнать, что можно сделать для стабилизации на более низком уровне? За неделю до кризиса памяти собрал еще одну сборку на B650M-HDV/M.2+7500F+4060, нужен был ПК для стриминга, но чисто технически понимаю, что происходит с ним что-то не то. То WDF1000Sys, то нвидиа драйвер, то еще какая-то ерунда на взлет идут.
Как будто проблем нет, но latencymon отчаянно может показывать спайки по с резкими взлетами и падениями, а также почему-то ошибки в страницах которые указывают на защитник Windows (?). Иногда из за этого во время стрима происходят странные замирания, сеть в порядке, точно не сетевая сторона. Т.к если стримить с основного ПК, то проблем нет, буфферизации нет, картинка стабильная. Думал на плату видеозахвата, так она тоже в порядке. Я вот думаю, что это может быть и как диагностировать точно да решить? В первую очередь хотелось бы разобраться с этой ошибкой, которая ниже, хавает ошибки страниц с защитника.
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: msmpeng.exe
Total number of hard pagefaults 45 Hard pagefault count of hardest hit process: 38 Number of processes hit: 4
Заблокирован Статус: Не в сети Регистрация: 17.05.2021 Откуда: Zanzibar Фото: 6
MurkLyaMurk писал(а):
latencymon отчаянно может показывать спайки по с резкими взлетами и падениями
latmon сам не айс по компактности, и делать выводы по одной проге не комильфо. Попробуй мерять другой линейкой, например dpclatency *от автора DDU, она легче, проще и удобнее на оставить в фоне, сама отфильтрует куда смотреть :
помню еще в старой latencymeter зеленой зоной считались прерывания до 1ms и желтой до 2ms, я по старинке беру это за норму для своих обычных рабочих сценариев - серфинг, игры и прочий повседнев. Без этой статы в работе разница незаметна, одиночные редкие алярмы не в счет ибо рабочий шум, об этом и шапке упоминается, что обращать внимание следует на частоту а не на макс значение прерываний. Диагностику советую проводить сначала этой прогой, час в серфинге, два под игровой/рабочей нагрузкой. Latencymon для глубокого анализа при явных проблемах. Замеры по паре минут в простое, сразу после ребута и без рабочей нагрузки считаю практически бесполезными, ака охота за попугаями в бенчмарках. Все это имхо.
лечение tcpip
раньше я уже копал tcpip настройками wifi адаптера и вроде помогло в <0.6ms, но сейчас ИИ + dpclatency со своим Event Type задали мне другое направление - "входное" качество интернета от провайдера или роутера. Короч на пробу подключился к другому опсосу на втором роутере и получил <0.2ms за час активного серфинга, ничего не меняя в системе :
Заблокирован Статус: Не в сети Регистрация: 17.05.2021 Откуда: Zanzibar Фото: 6
MurkLyaMurk писал(а):
только плюсы
на уровне плацебо по ощущениям. В цифрах бенчмарков вроде и есть разница в полтора попугая, но не факт что это польза на повседнев + некоторые бенчмарки помечали результат как невалидный. В целях стабильности и чтобы не оставлять подозреваемых за спиной после этих ковыряний в таймерах, я давно выбрал сток и
WhiteRatify писал(а):
Откат на сохранку до всех манипуляций показывает чистый bcdedit без clock/tick значений и таймер TSC со временем в 0,496ms
_________________ Asus h510m | 10400F | 2666cl13 | 6700XT RD | Be quiet SP 600 | Samsung 980 Pro 512 | FHD&240Hz Pretty good, huh ?
Заблокирован Статус: Не в сети Регистрация: 17.05.2021 Откуда: Zanzibar Фото: 6
MurkLyaMurk мы как то уже спорили с ним этот счет. Для себя я понял, что позиция куратора - максимально соответствовать названию темы - уменьшение прерываний, и в своих советах он исходит из этого тезиса, а не из того что нам действительно нужно. Эт только мы сами решаем и даже не всегда знаем что нам хорошо а что плохо, пока не попробуем. По мне работа пк это куча прерываний, уменьшение прерываний - уменьшение работы, и замеры прерываний
Лангольер писал(а):
в состоянии простоя системы т.е. без дисковой, сетевой активности, и любой другой, с выключенным ав и приложениями в трее и автозагрузке,
вызваны необходимостью выявить аномалии и баги, а не целью задушить все процессы в системе для красивой статы. Нужно в баланс а не в крайности, типа того.
_________________ Asus h510m | 10400F | 2666cl13 | 6700XT RD | Be quiet SP 600 | Samsung 980 Pro 512 | FHD&240Hz Pretty good, huh ?
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения