Все прерывания делятся по следующим приоритетам: 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 минуты после загрузки системы. Не двигаем мышку и не используем клавиатуру в момент измерений. Потом остановка и скриншот.
Advanced member
Статус: Не в сети Регистрация: 29.03.2017
Немного экстремального энергосбережения. Не делайте так. Включены все режимы которые только можно, включая скрытые по-умолчанию. Частота не фиксирована, просто чтобы алгоритмы начали её поднимать процессор надо как следует загрузить. Кстати её кажется нельзя зафиксировать через биос на таких низких значениях.
Advanced member
Статус: Не в сети Регистрация: 29.03.2017
Craft61 Так а в чём у вас проблема то? Дайте вывод LatencyMon в простое за одну минуту. Какой план питания стоит? Какая частота процессора в простое? Если навести на полностью незанятые ядра в диспетчере задач показывает ли подсказка что оно отключено? Пробовали воспроизвести проблему с минимальным количеством устройств и дополнительного ПО? Дополнительное ПО для мониторинга и управления тоже стоит отключить.
Advanced member
Статус: Не в сети Регистрация: 29.03.2017
А не надо его понимать. он на последних версиях LatencyMon на всех машинах где я проверял стал выделяться. Это ядро системы, вы с ним ничего не сделаете.
Craft61 1. Софт от рэйзера. 2. Память. Начни с удаления софта конечно, почти уверен что ситуация в корне изменится. Вообще весь софт от асус, мсай, гигибайт удали если таковой проинсталирован. Дальше память, убрать разгон, вообще все в дефолт.
Member
Статус: Не в сети Регистрация: 16.05.2010 Откуда: Ленинград Фото: 554
Craft61 писал(а):
Да я пытаюсь понять, из-за чего скачет тот процесс
это могут быть заплатки безопасности или изменения связанные с виртуализацией процессов в Ос.
По поводу райзер софта,у меня родные драйверы и пакет для настройки Синапс давал задержку на Интеле-, и срезал Латенси результаты в Аиде. Амд платформу я в целом плохо знаю,там у них может быть своя реализация Hpet, попробуйте по энергосбережению и настройкам биоса спросить автора Ryzen dram calculator и ClockTuner usmus-а в личке - у него должен быть доступ к актуальным докам по платформе-так как без них такой софт не написать, и если он сможет что-то сказать не нарушая рамок соглашения NDA - думаю сможет помочь.
По вашей проблеме конкретно, я бы сделал так, проверил бы без энергосбережения на портах, отключил бы засыпание портов глобально и проверил бы настройку хабов,и с простой клавиатурой и мышью в 2.0.
Добавлено спустя 55 секунд:
Agiliter писал(а):
Там нет ничего критичного в мониторинге LatencyMon. Если проблема и есть то LatencyMon её не видит.
Так пусть глянет вкладку ПРОЦЕССЫ И ДРАЙВЕРЫ,что толку на одни эти зеленые столбики смотреть)
Advanced member
Статус: Не в сети Регистрация: 29.03.2017
А вы уверены что у вас ядро не выделяется? попробуйте последнюю версию у себя погонять в простое и не очень. Я полагаю, что это вообще не является проблемой. Единственное что менялось с моих старых изменений это версия самой программы. Никаких проблем при этом не появилось.
Advanced member
Статус: Не в сети Регистрация: 29.03.2017
Да не нужно там ничего трогать. Я например знаю 100% способ как сделать чтобы этот график стал практически идеальным, пропадут вообще практически все спайки. Правда это уменьшит производительность и полностью испортит мониторинг загрузки в диспетчере задач. Называется отключение режима простоя в ОС. Пожалуйста делайте так только для эксперимента. powercfg -attributes SUB_PROCESSOR IDLEDISABLE -ATTRIB_HIDE Появится настройка в плане питания. Я серьезно её назначение только в том чтобы выстрелить себе в голову и посмотреть на красивый график в LatencyMon.
Member
Статус: Не в сети Регистрация: 16.05.2010 Откуда: Ленинград Фото: 554
Agiliter писал(а):
Я серьезно её назначение только в том чтобы выстрелить себе в голову и посмотреть на красивый график в LatencyMon.
Это всё понятно, только задача такого инструмента как латенси монитор, выяснить какой драйвер "криво написан", есть ли проблемы в работе энергосберегающих на конкретном наборе софта или железе.
Форсирование планов электропитания, или выключение с_state репортинга в биосе/ос, так же изменение разрешения таймера, да делает красивый график-в 10-30us, но это маскирует проблемы, если они конечно есть
Нет никаких проблем загнать график в ноль, но тогда и инструмент этот не нужен.))
Advanced member
Статус: Не в сети Регистрация: 30.03.2017 Откуда: Москва/Вешняки Фото: 11
Agiliter писал(а):
посмотреть на красивый график в LatencyMon
а ещё оказывается так бывает, что у nvlddmkm.sys +1080ti_&_465.42 может быть +-0.07мс и не менятся от переключения окон, режимов и пр ... xмм впервые такое https://disk.yandex.ru/d/5HCrewYxcZxbvw вижу или эт из разряда +- тобой или kiberman'ом описанного, а может и глюка
Последний раз редактировалось BOBKOC 28.02.2021 16:14, всего редактировалось 1 раз.
Member
Статус: Не в сети Регистрация: 28.02.2008 Откуда: Калининград Фото: 99
BOBKOC писал(а):
а ещё оказывается так бывает, что у nvlddmkm.sys +1080ti_&_465.42 может быть +-0.07мс и не менятся от переключения окон, режимов и пр ... xмм впервые такое
Такого скорее всего можно добиться на любом драйвере если исключить переключение P-state видеокарты. Чтобы частоты не сбрасывала, короче говоря ) Проверьте, может это не то счастье о котором мечталось.
Advanced member
Статус: Не в сети Регистрация: 30.03.2017 Откуда: Москва/Вешняки Фото: 11
k2viper писал(а):
переключение P-state видеокарты
нее не лочил это дело специально и вроде сбрасывает/подымает => https://disk.yandex.ru/d/5HCrewYxcZxbvw , а вот драйвера скорее всего, как то хитро встали(я тут с одной материнки на другую перекинул CCД и они соотв сами себя ставили автоматом, а изначально через NVCleanstall_1.8.0 ставил), + у меня HPET-off в биосе(но и вкл погоды не сделало) и в винде нетронуто. ещё↓ картинки
↓
Вложение:
nvidia4.jpg [ 745.34 КБ | Просмотров: 1141 ]
Вложение:
nvidia2.jpg [ 80.2 КБ | Просмотров: 1141 ]
Вложение:
nvidia1.jpg [ 358.95 КБ | Просмотров: 1141 ]
Вложение:
9.jpg [ 778.39 КБ | Просмотров: 1141 ]
переставил диск и видюху на другую материнку&платформу и всё вернулось в "норму" ака никаких больше 0.07 может у MSI праведные материнки или ещё куча вариантов на проверку
Member
Статус: Не в сети Регистрация: 28.02.2008 Откуда: Калининград Фото: 99
Profy13 писал(а):
И стало несколько лучше, играть можно
Ещё поможет правильная настройка таймингов памяти, по крайней мере DPC точно стали ниже после того как заморочился. В теме по разгону DDR4 есть варианты калькуляторов и авторы описывающие методы правильной настройки, надо не полениться и хоть несколько десятков страниц прочитать.
Хасус писал(а):
Зачем лочить 60 или 120 фпс free sync g-sync включите и про желейность инпута забудете точно
Это не факт, вопрос привычки. Кто привык играть без синхронизаций, как я например, сразу заметит что инпутлаг стал хуже, проверено. Даже если моник 240гц. То есть да, я замечаю разницу между 300fps/240гц nosync и 239fps/239hz gsync(compatible). Думаю любой подготовленный игрок в шутер привыкший играть с высоким фпс без синхронизации, её заметит.
Member
Статус: Не в сети Регистрация: 07.12.2011 Откуда: Тула Фото: 25
OLD Hunter писал(а):
И чем больше комп потребляет из сети, тем оно сильнее. (при 120фпс потребление выше чем при 60). Классическая история.
Не спорю, что проблема имеет место быть, я даже ферритовых фильтров накупил и, на что я возлагал большие надежды это:
Инверторный стабилизатор напряжения однофазный, Штиль IS10000 Old (8 кВт)
, а всё из-за большого количества проводов в одном месте как я думал, но и в целом штука-то не плохая:
Ну получилось так, я не виноват))
, а всё из-за одной игры:
UT4
. А выхлопа в итоге ноль. Сколько тем я не перечитал, сколько фиксов не пробовал... Единственное, что ощутимо помогает, это в моем случае было: дрова, недавно здесь посоветовавшие 442.74(разумеется облегченный), удаление штатных дров на Phoebus solo(чисто от микрософт сижу), настройка биоса(откл wifi, с-state, стаб. не большой разгон и т.д.) и немного настройка сетевой карты (выкл. interrup moderation и уменьшение пакетов на прием и передачу.) И стало несколько лучше, играть можно. Но, даже, когда не было столько проводов и система еще была на z87(сейчас на z390), проблема уже имела место быть, просто я её еще не замечал, только на подсознательном уровне думалось, что что-то не так...
iG0Lka писал(а):
У меня отзывчивость прицела и задержка на действие коррелирует с временем суток (интернет) и версия драйвера.
В итоге, по большому счету больше склоняюсь к мнению Иголки. Извините, просто высказался, грустно что-то)) Земли в квартире нету. ИМХО
OLD Hunter писал(а):
но затем столкнулся и заметил некоторые несостыковки, которые это противоречат.
Если бы мне кто-нибудь землю на третьем этаже прикрутил. Вот это было бы нормальным таким сравнением до и после. А так это все мои наблюдения и только.
Member
Статус: Не в сети Регистрация: 14.06.2009 Откуда: Омск
Profy13 А вы только в анрил играете? Там какие режимы, дуэли, дм? Против ботов когда играете есть ли какие-то изменения в инпут лаге, картинке и прочем в рандомное время или например ночью. Есть такое что ночью картинка становится более четкой и резкой, даже против ботов?
Member
Статус: Не в сети Регистрация: 07.12.2011 Откуда: Тула Фото: 25
k2viper писал(а):
Ещё поможет правильная настройка таймингов памяти, по крайней мере DPC точно стали ниже после того как заморочился.
Вот с памятью я никогда не заморачивался, может и зря конечно, просто выбрал профиль и он работает.
Добавлено спустя 4 минуты 10 секунд:
OLD Hunter писал(а):
только в анрил играете?
Сейчас да, дм и подобные режимы, но с ботами сто лет не пробовал, надо освежить память как-нибудь. В целом заметно от хаба к хабу, официальные и не очень ведут себя по разному, но ночью конечно же лучше. Я даже 500мбит от Дом.ру подключил, разницы от провайдеров нет, ибо все они где-то по одному каналу идут в забугорье.))
Сейчас этот форум просматривают: Inquisitorr и гости: 5
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения