GoInterruptPolicy
GoInterruptPolicy — вундервафля из арсенала диванных оптимизаторов, обещающая превратить твой лагающий комплюктер в сверхсветовую машину для нагиба. По заверению адептов, эта шайтан-программа способна усмирить прерывания драйверов, снизить системные задержки до уровня рефлексов пьяного ниндзя и, как следствие, подарить тебе +100 к скиллу в любимой онлайн-дрочильне. На деле же это просто утилита для ручного распределения аппаратных прерываний (IRQ) по ядрам процессора, что в теории должно уменьшить так называемый Deferred Procedure Call (DPC) Latency. Является ли это всё правдой или очередным плацебо для поехавших на почве микростаттеров? Сейчас разберемся.
А оно мне надо?[править]
Прежде чем с горящими глазами качать очередной «ускоритель ПК без СМС и регистрации», любой уважающий себя анонимус задастся вопросом: а есть ли в этом вообще какой-то профит? И тут, внезапно, ответ не так уж и прост. С одной стороны, создатели и адепты этой утилиты с пеной у рта доказывают, что их жизнь разделилась на «до» и «после». С другой — эффект может варьироваться от «ВАУ, ЭТО ШЕДЕВР!» до «а чо изменилось-то?».
Вся суть в том, что эта приблуда борется с системными задержками, которые, как метастазы, проникают во все аспекты работы твоей пекарни. Они влияют на всё: от скорости отклика мышки до стабильности звука и, конечно же, на тот самый пресловутый input lag в играх. Чем выше задержки, особенно пиковые всплески DPC, тем больше шансов словить фриз в самый ответственный момент, когда ты пытаешься сделать хэдшот очередному школьнику. Утилита же обещает навести в этом бардаке порядок, заставив каждый драйвер сидеть на своем, персонально выделенном ядре процессора, и не отсвечивать. По идее, это должно стабилизировать работу компа и сделать его более отзывчивым. Но, как и любое шаманство, требует доказательств. В качестве доказательства приводятся тесты, где на древнем ведре с Ryzen 1700 первого поколения после всех манипуляций задержки действительно упали, а всплески DPC, которые ранее достигали 468 микросекунд, практически исчезли. Так что, возможно, смысл есть, но только если ты готов сам всё проверять.
Как измерить свой DPC, или Тестируем на кошечках[править]
Чтобы не уподобляться аудиофилам, которые слышат разницу в звучании проводов из бескислородной меди, нам потребуется инструмент для объективной оценки — LatencyMon. Эта бесплатная программа — твой личный детектор лжи для системы.
Перед началом экзекуции нужно подготовить пациента. Вырубай всё! Вообще всё, что можно вырубить в трее, все фоновые процессы, торренты, антивирусы, мессенджеры и прочий мусор. Система должна быть чиста, как слеза девственницы. Запускаешь LatencyMon, жмешь зеленую кнопку «Play» и оставляешь его на 5-10 минут. Он будет мониторить твое железо и выявлять самых злостных виновников тормозов.
Твоя главная задача — смотреть на показатели Highest measured interrupt to process latency (µs) и Highest measured interrupt to DPC latency (µs). Если ты видишь там цифры, улетающие в космос (особенно больше 1000 µs), и программа горит красным, поздравляю, в твоей системе анархия, и драйверы устраивают дискотеку прямо на процессорных ядрах. А вот если средние показатели Average measured interrupt to process latency и Average measured interrupt to DPC latency стремятся к единице или даже ниже, то у тебя все в порядке. Но даже в этом случае всегда есть место для «улучшений».
Во вкладке Drivers можно увидеть конкретных виновников торжества — обычно это nvlddmkm.sys (привет, NVIDIA), dxgkrnl.sys (DirectX), ndis.sys (сетевуха) или HDAudBus.sys (звук). Зачастую проблемы кроются в кривых или устаревших драйверах, поэтому первое, что стоит сделать — это снести их к чертям с помощью Display Driver Uninstaller и поставить свежие, желательно с официального сайта производителя, а не из говносборки. Также стоит помнить, что процессоры Intel исторически имеют меньшие задержки, чем AMD Ryzen, особенно старых поколений. Так что если у тебя древний Ryzen, шансы на получение профита от этих манипуляций выше.
Настройка GoInterruptPolicy: Шаманство для избранных[править]
Итак, ты убедился, что твоя система — лагающее днище, и готов окунуться в мир черной магии. Для начала нам нужно определить, какие ядра процессора самые быстрые и незагруженные. Ведь сажать самый важный драйвер видеокарты на одно ядро с каким-нибудь системным мусором — идея так себе. Для этой цели существует еще одна утилитка — AutoGpuAffinity. Запускаешь ее из командной строки, жмешь Enter, и она начинает поочередно тестировать все твои ядра и потоки. Процесс небыстрый, так что можешь пойти заварить Доширак. По итогу она выдаст скриншот с результатами, где зеленым будут подсвечены самые производительные ядра. В одном из тестов это оказались ядро 8 и ядро/поток 9.
Теперь, вооружившись этим сакральным знанием, запускаем саму GoInterruptPolicy.exe. Находим в списке свою видеокарту (например, NVIDIA GeForce GTX 1660 Ti). Кликаем, и открывается окно настроек. Здесь начинается самое интересное. Ставим галочку на Message Signaled-Based Interrupts (MSI Mode), выставляем Device Priority на High, а в Device Policy выбираем Specified Processors. После этого внизу станет доступен выбор ядер. Снимаем галочки со всех и оставляем только те, которые нам подсказала AutoGpuAffinity — в нашем примере это Thread 8 и Thread 9. Жмем OK, и драйвер видеокарты теперь будет работать исключительно на этих выделенных, элитных ядрах, не отвлекаясь на всякую чепуху.
А как же мышь и PCI-шины?[править]
Но разве это всё? Конечно, нет! Настоящие твикеры на этом не останавливаются. В ход идут USB-контроллеры и даже PCI-шины. Самый главный кандидат на оптимизацию после видеокарты — это USB хост-контроллер, к которому подключены твоя мышь и клавиатура. Ведь именно от него зависит, как быстро твои рефлекторные клики долетят до игры. Чтобы найти нужный контроллер, открываем Диспетчер устройств, переключаемся на вид Устройства по подключению и начинаем разворачивать ветки, пока не найдем свой «Расширяемый хост-контроллер», в котором будут висеть HID-совместимая мышь и HID-совместимая клавиатура. Как только нашел, кликаешь на сам контроллер правой кнопкой, выбираешь Свойства -> Сведения, а в выпадающем меню — Имя объекта физического устройства. Копируешь это имя (например, \Device\NTPNP_PCI0022), вставляешь в поиск в GoInterruptPolicy, и вуаля — вот он, наш пациент. Ему тоже выставляем высокий приоритет и сажаем на отдельные, не менее элитные ядра, например, Thread 10 и Thread 11.
Некоторые особо поехавшие энтузиасты идут еще дальше и проделывают то же самое с мостом PCI-PCI, на котором висит видеокарта. Логика в этом есть, но многие твикеры не заметили от этого вообще никакого эффекта. Так что это, скорее всего, из разряда плацебо, но если у тебя овердофига свободного времени, можешь попробовать.
Итоги, или Профит?[править]
После всех этих танцев с бубном самое время снова запустить LatencyMon и сравнить результаты. Результаты одного из тестов были весьма показательны:
До:
- Average measured interrupt to process latency: 3.406 µs
- Average measured interrupt to DPC latency: 1.310 µs
- Highest measured interrupt to process latency: 468.70 µs
После:Average measured interrupt to process latency: 3.275 µs
Average measured interrupt to DPC latency: 1.160 µs
Highest measured interrupt to process latency: 26.30 µs
Как видим, средние задержки немного снизились, но что более важно — пиковые всплески ушли в небытие. Вместо ужасающих 468 µs мы видим скромные 26 µs. Это означает, что система стала работать значительно стабильнее, и вероятность словить внезапный лаг, который приведет к очередному сливу катки и последующему срачу в чате, заметно уменьшилась.
Стоит ли оно того? Если ты обычный юзер, который запускает комп раз в неделю, чтобы посмотреть котиков на ютубе — однозначно нет. Но если ты киберкотлета, для которого каждая миллисекунда на счету, или просто энтузиаст, одержимый идеей выжать из своего железа все соки, то попробовать определенно стоит. В конце концов, в худшем случае ты просто потратишь полчаса времени, а в лучшем — получишь более отзывчивую и стабильную систему. Профит? Решать тебе, анонимус.