Оборудование, на котором проводился разбор
Физические характеристики
| Материнская плата | ASRock B660M Steel Legend |
|---|---|
| Процессор | Intel Core i5-12400 |
| Оперативная память | 40 ГБ: 2× A-Data AX4U32008G16A-DTBKD3 (DIMM 2/4), Kingston HX421C14FB2/8 (DIMM 1), Apacer GD2.1843BS.00L (DIMM 3) |
| Видеокарта | NVIDIA GeForce GTX 1660 SUPER (ASUS ROG-STRIX-GTX1660S-O6G-GAMING) |
| Накопители | NVMe Samsung MZVLB256HBHQ-000L2; Toshiba DT01ACA050; Toshiba MQ01ABF050; WDC WD10EZEX-08WN4A0; WDC WDS480G2G0A-00JH30 |
| Блок питания | Cougar VTE600 |
Программные характеристики
| Ядра / потоки — частота | 6 / 12 — 2496 МГц |
|---|---|
| Память — тайминги | 3200 МТ/с — 22-22-22-53 CR1 |
| Система | Windows 11 25H2, сборка 26200.8246 (Eagle) |
Где стояла игра
- Диск D: — WDC WDS480G2G0A-00JH30
- Здоровье по SMART: хорошее (74%)
- Путь установки не содержит кириллицы
- Проверка целостности файлов игры выполнена
Чем измеряли
- Windows Performance Recorder — профили CPU Activity и GPU Activity
- Windows Performance Analyzer — разбор полученной трассировки
Ход профилирования
Трассировка в Windows Performance Analyzer — видна пиковая активность диска.
Причина первая: чтение с безбуферного диска
В процессе анализа проблемы была найдена пиковая активность по диску. Среди процессов, активных на момент пика, обнаружен BEService.exe — в его ветке находился процесс чтения d2d1.dll. Попытки чтения были произведены за 10 секунд до зависания и 4 раза в начале пика.
Процесс чтения занял в общей сумме 173 748 700 микросекунд, создав 973 обращения на операцию чтения.
Процессы, активные в момент пика нагрузки.
Причина вторая: блокирующий DNS-запрос
Главный поток игры 11,15 секунды висел на блокирующем DNS-запросе.
Точные тайминги: поток TheCrewMotorfest.exe TID 25616 — тот самый, что владеет окном, — ушёл в ожидание в t=6.207 с с причиной WrLpcReply и был разбужен в t=17.355 с. Это 11 147 275 мкс непрерывного ожидания.
Стек в момент блокировки (изнутри наружу):
ntoskrnl (ALPC wait) ← ntdll ← rpcrt4 ← dnsapi ← mswsock ← ws2_32 ← TheCrewMotorfest.exe
Это getaddrinfo() — разрешение доменного имени, вызванное синхронно из главного потока. Через RPC запрос ушёл в службу Dnscache (svchost.exe PID 3056 — система с момента записи не перезагружалась, это точно она), и ответа не было 11 секунд.
Почему встала вся игра
За 100 микросекунд до главного потока в ожидание ушли ещё четыре рабочих потока джоб-системы (11568, 30200, 26324, 3128) с причиной UserRequest — они ждали задач от главного. Рендер-поток 30092 добавился следом. Все шесть показали ровно 0 мкс CPU на протяжении всего окна.
Пробуждение в t=17.355 с зафиксировано: svchost.exe (3056) tid=23600 разбудил поток 25616, тот через 1,1 мс поднял всех воркеров, и игра сразу вернулась к полной скорости: 2780 → 169 → 3270 мс CPU на секунду.
Перед решением: проверьте состояние диска
Прежде чем что-то менять, нужно выяснить техническое состояние диска, на котором установлена игра. Скачайте CrystalDiskInfo и сверьте показатели ниже. Если по ним есть отклонения — настройками проблема не лечится, диск под замену.
| Атрибут | Что означает | Когда менять диск |
|---|---|---|
| 05 | Переназначенные блоки | Больше 00000000000C (например 0D) |
| C5 | Проблемные блоки, ждут переназначения | Больше 000000000150 |
| A9 | То же, у части моделей вместо C5 | Больше 000000000150 |
| C7 | Ошибки шины UDMA | От 000000000001 — проблема с подключением или шиной на плате |
Решение первой причины: диск
1. Свободное место и обслуживание диска
- Для диска без буфера настоятельно рекомендуется держать занятым не более 85% объёма.
- Выполните defrag <буква диска>: /L /U /V. Повторяйте после удаления 10% и более данных.
2. Отключить индексацию на диске с игрой
Проводник → правой кнопкой по диску → «Свойства» → снять галочку «Разрешить индексировать содержимое файлов на этом диске в дополнение к свойствам файла» → выбрать «Применить ко вложенным папкам».
3. Перенести файл подкачки
Назначьте файл подкачки на более быстрый диск или хотя бы на тот, где не лежит игра.
Win + R → sysdm.cpl → «Дополнительно» → «Быстродействие» → «Дополнительно» → «Изменить» → снять галочку автоматического выбора объёма.
4. Включить управление питанием канала AHCI
Создайте на рабочем столе текстовый файл и вставьте в него:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\0012ee47-9041-4b5d-9b77-535fba8b1442\0b2d69d7-a2a1-449c-9680-f91c70521c60] "Attributes"=dword:00000002 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\0012ee47-9041-4b5d-9b77-535fba8b1442\dab60367-53fe-4fbc-825e-521d069d2456] "Attributes"=dword:00000002
«Файл» → «Сохранить как…» → <любое название>.reg → открыть и применить изменения.
Затем: Win + R → powercfg.cpl → «Настройка схемы электропитания» → «Изменить дополнительные параметры питания» → «Жёсткий диск»:
- AHCI Link Power Management — HIPM/DIPM → выбрать HIPM+DIPM
- «Отключать жёсткий диск через» → значение 0 → «Применить»
5. Проверить TRIM
В PowerShell от имени администратора выполните:
Get-PhysicalDisk | Select FriendlyName, MediaType, HealthStatus Get-Volume | Select DriveLetter, FileSystemLabel, SizeRemaining, Size fsutil behavior query DisableDeleteNotify
Если DisableDeleteNotify = 1, включите TRIM:
fsutil behavior set DisableDeleteNotify 0
Решение второй причины: DNS
Игра обращается к своим серверам из главного потока, поэтому любая задержка ответа DNS останавливает процесс игры.
1. Посмотреть, какие DNS используются сейчас
PowerShell от имени администратора:
Get-DnsClientServerAddress -AddressFamily IPv4 | Where-Object ServerAddresses | Select InterfaceAlias, ServerAddresses
2. Замерить, кто отвечает быстрее
Этот скрипт опрашивает несколько известных серверов и показывает время ответа в миллисекундах — меньше значит лучше:
$servers = "77.88.8.8","1.1.1.1","8.8.8.8","9.9.9.9","208.67.222.222"
$host_to_test = "ubisoft.com"
$servers | ForEach-Object {
$s = $_
$t = (Measure-Command {
try { Resolve-DnsName $host_to_test -Server $s -DnsOnly -ErrorAction Stop | Out-Null }
catch { }
}).TotalMilliseconds
[pscustomobject]@{ Сервер = $s; Ответ_мс = [math]::Round($t) }
} | Sort-Object Ответ_мс | Format-Table -AutoSize
Прогоните два-три раза: первый замер всегда медленнее из-за "холодного" кеша. Сервер, который стабильно отвечает быстрее остальных, нужно сохранить и вписать в св-ва DNS
3. Либо подобрать автоматически - DNSJump
Если возиться с командами не хочется, есть DNSJump - маленькая бесплатная утилита, которая сама опрашивает список публичных DNS, замеряет отклик каждого и показывает результат таблицей. Дальше достаточно выбрать самый быстрый и применить его кнопкой - программа пропишет адреса в настройки адаптера за вас.
Порядок работы простой: запустить от имени администратора, нажать проверку скорости, дождаться окончания теста, выбрать верхнюю строку и применить.
4. Применить выбранный сервер вручную
Замените Ethernet на имя своего адаптера из первого шага, а адреса — на выбранные при замере. Второй адрес нужен как запасной: если первый не ответит, система сразу спросит его.
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ServerAddresses ("77.88.8.8","1.1.1.1")
Вернуть как было — получить адреса от роутера автоматически:
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ResetServerAddresses
5. Очистить кеш и перезапустить службу
ipconfig /flushdns Restart-Service Dnscache -Force
6. Убедиться, что игра открывается
Запустите игру и проверьте вход. Если после смены DNS подключение перестало проходить — значит новый сервер отдаёт адреса, недоступные из вашей сети. Верните прежние настройки командой из четвёртого шага и возьмите следующий по скорости сервер из таблицы.

