Counter-Strike 2

Counter-Strike 2

Not enough ratings
Она вам не Винда!
By Metrograde
Сенсационное расследование о тайных настройках Windows 10
   
Award
Favorite
Favorited
Unfavorite
Вступление


Простенькая на первый взгляд операционная системка, которая кажется вроде бы и так неплохо работоает, но она только хочет казаться нам вполне законченной и не нуждающейся в каких-либо дополнительных настройках. В этом расследовании я расскажу о её тайных настройках которые вляют на сетевые процессы происходящие в игре. Всё началось казалось бы с незначительной и не относящейся к делу вещи - с кроссовок! Сижу, смотрю на свои кроссовки и думаю - "Вот провёл я сетку 100 Мбит. Да стало гораздо лучше чем на гнилом adsl или на 4G от жадных опрераторов, но чёго-то всё равно явно не хватает". И после этого начался процесс изучения винды!
Глава 1. MTU
Первое, что должен сделать каждый, кто сидит через роутер - это проверить MTU! Если же при подключении компьютера напрямую к интернету Windows выставляет его автоматически, то при подключении через роутер он всегда ставит 1500 байт. Если MTU системы больше MTU сети, то пакеты при отправке будут фрагментироваться, фрагментация - это задержки, а задержки - это плохо! Чтобы определить MTU, понадобится "Командная строка" (запущенная с правами администратора) и несложная команда ping с ключами -f (запрет фрагментации) и -l <размер пакета в байтах> Пример:

ping 8.8.8.8 -f -l 1472

если же результат выглядит примерно так
Требуется фрагментация пакета, но установлен запрещающий флаг. Требуется фрагментация пакета, но установлен запрещающий флаг. Требуется фрагментация пакета, но установлен запрещающий флаг. Требуется фрагментация пакета, но установлен запрещающий флаг.
или же пишет что-то наподобие "ответа нет", то следует выходить на митинги то следует уменьшать размер пакета до тех пор пока не появится ответ от пингуемого узла. После чего к размеру пакета, на котором получился удачный ответ, прибавляем 28 байт (размер заголовка ICMP) - это и будет наш MTU. Пинговать лучше всего DNS-сервера вашего провайдера (если вы не используете альтернативные DNS-сервера).

В сетях 3G/4G бывает так что пинг не поможет определить MTU сети, тут лучше воспользоваться сторонними сервисами в интернете например Speedguide Analyzer[www.speedguide.net]

И так после того как мы определили MTU, его надо установить в системе. Для этого введём следующие команды:
netsh int ip set int <Имя интерфейса> mtu=<размер MTU> store=persistent netsh int ip set subint <Имя интерфейса> mtu=<размер MTU> store=persistent
Глава 2. Настройки TCP/IP
Тюниг TCP важен не только для тех игр, кто его использует, и не только потому что современные игры используют одновременно протоколы UDP и TCP. Одновременная работа TCP вместе с UDP может создавать проблемы в работе последнего (возникновение задержек и потерь) - поэтому тюнинг TCP не менее важен!

Autotuning level
Многие в интернете жалуются на функцию автоизменения размера окна приёма - она может являться даже причиной низкой скорости. Основная же причина, по которой стоит её выключить - это возникновление явления "переполнения буфферов" (Buffer bloat) - задержки вызванные нехваткой размера сетевых буфферов. Для отключения AutotuningLevel можно воспользоваться средой PowerShell:

Set-NetTCPSetting -SettingName InternetCustom -AutoTuningLevelLocal Disabled


Receive Segment Coalescing
Функция объединения нескольких пакетов в один. Также создаёт задержки. Отключить можно в том же PowerShell (хотя в Windows 10 уже отключена по умолчанию):

Set-NetOffloadGlobalSetting -ReceiveSegmentCoalescing Disabled Set-NetOffloadGlobalSetting -PacketCoalescingFilter Disabled


Nagle's Algorithm
С отключением этого алгоритма, пакеты будут отправляться сразу же без задержек. Для его отключения понадобится запустить редактор реестра (Win+R и ввести regedit) и пойти по следующему пути:
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{индификатор сетевой карты}
* Лично я нахожу свою сетевую карту присваивая статический IP


И создаём там две переменные DWORD со следующими значениями:
TcpAckFrequency=1
TcpDelAckTicks=0
Глава 3. Планировщик классов мультимедия
Это вполне себе полезная функция появилась ещё в Windows 7 - она управляет приоритетами всей мультимедия включая и игры - но со времём той же Windows 7 создаёт и одну проблему: Майкрософт считает, что работа с сетью требует много ресурсов процессора и при этом мешает приложениям мультимедия, поэтому они просто ограничили процессорное время для работы с сетевыми протоколами - 10 тактов / мс. Тогда возможно Майкрософт считали, что этого хватит, но как показывает практика и как сознаются сами Майкрософт - это значение мало кого устраивает. Для того, чтобы убрать эту социальную несправедливость, пойдём в знакомый нам редактор реестра по следующему пути:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile
Найдём там переменную NetworkThrottlingIndex и присвоим ей значение ffffffff (шестнадцатеричное), это отключит межанизм ограничения.
Глава 4. QoS - "Вы не любите кошек? Вы просто не умеете их готовить!"
Читая разные руководства по оптимизации сети для онлайн игр, я заметил, что многие устраивают гонения на QoS, мол он "только мешает", "съедает траффик" и т.д. Но! На самом деле QoS может позволить вашим пакетам выжить в жестоком мире интернета... ну или хотя в вашей домашней сети.

Идём в оснаску "Групповая политика" (Win+R и ввести gpedit.msc) и ищем там "QoS на основе политики" (рисунок 4.1)


Рисунок 4.1

Далее нажимаем на этом пункте нажать правой кнопкой мыши и выбрираем "Дополнительные параметры QoS" и выставить их как показано на рисунке 4.2 и нажать OK


Рисунок 4.2

Далее опять нажимаем на пункте "QoS на основе политики" правой кнопкой мыши и выбираем "Создать новую политику" и пошагово выставляем значения для интересующей игры: название, exe-файл и обязательно выставить DSCP значение 46 (EF приоритет в QoS самый высокий) - рисунки 4.3 - 4.6.


Рисунок 4.3


Рисунок 4.4


Рисунок 4.5


Рисунок 4.6
Заключение
В качестве заключения лучше расскажет демонстрация игрового процесса в разных игровых приложениях.

Battlefield 3 - пинг 80 мс

Прямая ссылка

Call of Duty: Black Ops 2 - пинг 85 мс

Прямая ссылка

Counter-Strike: Global Offensive - пинг 60 мс

Прямая ссылка

Настройки ОС оказали сильное влияние на игровой процесс, но также сильно могут влиять настройки сетевой карты и роутера, но это уже совсем другая история...
P.S.
Через Windows можно также отключить HPET, при этом не пользуясь командной строкой и ковыряя BIOS: достаточно найти в Диспетчере устройств в разделе Системные устройства пункт Высокоточный таймер событий
P.P.S.
Windows по умолчанию начала включать масштабирование окон при повторных отправках, хотя по документации оно выключена по умолчанию, исправляем это:
Set-NetTCPSetting -SettingName InternetCustom -ForceWS Disabled

RouteCacheLimitEntries почему-то стал 4096, хотя по документации 128
Set-NetIPv4Protocol -RouteCacheLimitEntries 128

Отключаем LSO если есть
Disable-NetAdapterLso -Name *

Новый алгоритм контроля перегрузки TCP теперь CUBIC, если с ним возникают проблемы, то вернуть CTCP можно следующими командами:
netsh int tcp set supplemental template=internetcustom congestionprovider=ctcp netsh int tcp set supplemental template=internet congestionprovider=ctcp
13 Comments
ASG Nov 21, 2024 @ 8:08am 
Set-NetTCPSetting -SettingName InternetCustom -AutoTuningLevelLocal Disabled

К чертям ломает просмотр твитча, начинает буферится каждые 2 секунды
Metrograde  [author] May 1, 2020 @ 11:05pm 
Wakalaka>>akka, В "Панель управления\Сеть и Интернет\Сетевые подключения" можно посмотреть или через командную строку netsh int ip show int в столбце "Имя" - берёшь имя подключенного к интернету интерфейса (кроме Loopback Pseudo-Interface). Если имя например Ethernet и MTU=1480, то команда будет выглядеть так: netsh int ip set int "Ethernet" mtu=1480 store=persistent
Wakalaka>>akka Apr 26, 2020 @ 11:28am 
@N1 на котором получился удачный ответ, прибавляем 28 байт/ если прибавить получается опять пишит требуется фрагментация.
netsh int ip set int <Имя интерфейса> mtu=<размер MTU> store=persistent\\\ имя интерфейса какое?)... железо меня для этой игры должно хватать ..i5 3400 gt750ti и 8 г оперативы я думаю этого должно хватать для этой игры.. просадки есть но нменьше 130 не падает я фпс на 120 ограничил и просадок нет вообще.
N1 Apr 26, 2020 @ 1:00am 
@Wakalaka>>akka чувак, у тебя проблемы не с интернет соединением (хотя не исключено, что и это тоже), а с руками, в следствии того, что у тебя при разрешении 1440 x 900 просадки ниже 60 fps, для CS:GO это недопустимо, с таким fps нормальной стрельбы у тебя не будет, не удивительно, что за over 5k часов у тебя звание "калаш". Обновляй железо, 2020 год как бы на дворе. :lunar2019shockedpig:
Metrograde  [author] Apr 26, 2020 @ 12:27am 
Wakalaka>>akka, что именно не понятно?
Wakalaka>>akka Apr 20, 2020 @ 10:17am 
я больше половины не понял как сделать если можеш помоги) у меня огромные проблемы с регистрацией попаданий пол обоимы выстреливаю долетает 2-3 пульки..... причем как то пару дней все было хорошо потом опять та же проблема
I hate heartbreak May 25, 2017 @ 10:17pm 
Я вас понял, благодарю за исчерпывающие ответы)
Metrograde  [author] May 24, 2017 @ 8:52am 
NoFlame&NoExcuses:

6. Повторюсь, я не люблю сторонний софт, у меня с ним всё плохо заканчивалось
P.S.: как раз кажется с AusLogics лагов становилось только больше
Metrograde  [author] May 24, 2017 @ 8:52am 
NoFlame&NoExcuses:

4. Я сторонник тех, кто не любит ставить лишний софт если что-то можно седлать без него. И потому что процедура тривиальная - зачем для этого челую программу ставить.
5. Стала лучше регистрация попаданий, стало меньше лагов, уменьшилась задержка между выстрелом и попаданием - максимально полуилось минимизировать настройкой роутера.

Кстати свой bufferbloat можете протестировать на http://www.dslreports.com в разделе "Speed Test"