Заметки о Windows и других программных продуктах Microsoft...

Отключаем Recieve Window Auto-Tuning в Windows 7/Server 2008

Отключаем Recieve Window Auto-Tuning в Windows 7/Server 2008

Несколько лет назад, работая в IT отделе одной компании, столкнулся я с одной проблемой. Заключалась она в невозможности копирования по сети файлов большого размера. При попытке скопировать\перенести файл размером больше 100 МБ процесс намертво вставал, иногда вешая всю систему. Причем, что самое неприятное, проблема проявлялась периодически на разных компьютерах и локализовать ее не удавалось.

В тот раз решить проблему так и не удалось. Через некоторое время она ушла сама, так же неожиданно, как и появилась, и о ней благополучно забыли. И вот, по прошествии некоторого количества лет (и смены нескольких мест работы) я снова увидел знакомые симптомы. Но на сей раз все же удалось раскопать причину подобного поведения.

Дело в том, что в новой версии набора протоколов TCP/IP для Windows 7\Server 2008 была реализована функция TCP Receive Window Auto-Tuning — автоматическая настройка окна приема TCP. Теоретически эта функция предназначена для оптимизации пропускной способности и улучшения работы сети, а практически является причиной множества проблем.

Теория

Окно приема TCP используется для ограничения потока данных и для обеспечения возможности контроля потока на принимающей стороне. Окно TCP представляет собой объем данных, который получатель разрешает отправлять за один прием. То есть, чем больше окно, тем лучше работа в сетях с высокой пропускной способностью.

Для TCP/IP в Windows XP\Server 2003 максимальный размер окна приема фиксирован и по умолчению составляет 64КБ. В Windows 7\Server 2008 оптимальный размер окна приема определяется динамически. Для этого измеряется пропускная способности канала и скорость извлечения приложением данных из окна приема, после чего размер окна адаптируется в соответствии с этими параметрами. Автотюнинг использует масштабирование окна TCP, благодаря чему максимальный размер окна приема составляет 16 МБ.

В идеале при включении автотюнинга передача данных по сети должна стать более эффективной. Однако не всё так просто. Например, приложение не успевает извлекать данные, текущее окно приема заполняется и принимающий узел начинает уменьшать его размер. При заполнении максимального окна приема размер текущего окна уменьшается до 0 байт, после чего передача данных прекратится.

Практика

Как я уже говорил, проблему с автотюнингом очень сложно локализовать. Поэтому, при наличии неопределенных проблем с сетевыми подключениями в первую очередь смотрим настройки TCP. Сделать это можно из командной строки (с повышенными привилегиями) командой:

netsh interface tcp show global

Здесь нас интересует параметр ″Уровень автонастройки окна получения″ (англ. Receive Window Auto-Tuning Level). Он может принимать значения:

disabled — автотюнинг выключен, используется фиксированное значение размера приемного окна TCP — 64KB;
higlyrestricted — позволяет размеру приемного окна выходить за пределы значения по умолчанию, очень ограниченно превышая его;
restricted — допускает более существенный рост размера окна относительно значения по умолчанию;
normal — по умолчанию. Позволяет менять размер окна в зависимости от различных условий работы;
experimental — позволяет увеличивать размер окна до очень больших значений. Следует применять очень осторожно.

Можно попробовать подобрать нужный уровень, например попробовать higlyrestricted, а если не помогает, то отключить:

netsh interface tcp set global autotuninglevel=disabled

После изменения настройки компьютер следует перезагрузить.

выключение window auto-tuning

 

Проблема с автотюнингом присутствует в операционных системах Windows Vista, Windows 7, Windows Server 2008 и 2008 R2. По Windows 8 и Server 2012 пока данных нет, хотя автотюнинг в них есть и используется. Возможно всплывет позже 🙂

 
 
Комментарии

Интересно, а есть возможность посмотреть текущий размер окна?
Если есть, то настраивать autotuninglevel можно будет осознанно, а не наугад.

Можно попробовать проанализировать сетевой трафик, например с помощью Network Monitor.

А вариантов типа sysctl в линуксе нету? Эта команда показывает все текущие настройки(параметры) ядра.

Текущий размер окна приема — это не настройка, он не имеет фиксированного значения. Так что сниффер в руки, и вперед 🙂

Спасибо.
Нашел статью blogs.technet.com/b/ru_forum_support/archive/2010/12/20/network-monitor-3-4-1.aspx
Изучаю.

Руслан

Долго мучился, чтоб подцепить сетевой диск в DOS (net use), c расшаренной папки в Win7. После отключения этого параметра все получилось .Спасибо за статью!!

Алексий

Пользователи Win7 жаловались на долгое открытие расшаренных ресурсов на Server 2003. На машинах с XP таких проблем не было. Отключил на проблемных машинах автотюнинг. Все летает.

Руслан

Проблема в 2012 R2 пробую отпишу.

Кто-то тестил варианты:
1) на клиенте autotuninglevel выкл, на сервере — вкл
2) на клиенте autotuninglevel вкл, на сервере — выкл
?

На Windows 8.1 была та же проблема при печати на расшаренный принтер Windows 2003, две строчки текста печатались 5-10мин. После исправления (autotuninglevel=restricted) все ОК. Спасибо.

Спасибо на Server 2012 помогло.