Поделиться через


Известные проблемы производительности TCP/IP

Примечание.

Эта статья включена в 3-часть серии. Вы можете ознакомиться с разделом 1. Общие сведения о производительности TCP/IP и часть 2. Проблемы с производительностью базовой сети tcp/IP.

В этой статье описаны следующие проблемы с производительностью TCP/IP:

  • Низкая пропускная способность в сети с высокой задержкой и высокой пропускной способностью
  • Низкая пропускная способность в сети с низкой задержкой и высокой пропускной способностью
  • Проблемы с базовой сетью

Низкая скорость пропускной способности в сети с высокой задержкой и пропускной способностью

Два сервера, расположенные на разных сайтах, подключены через сеть с высокой задержкой. Пропускная способность, измеряемая с помощью инструмента ctsTraffic , ниже базовой.

Это связано с тем, что параметр масштабирования окна TCP не включен на любом сервере. Используйте командную строку Windows или Windows PowerShell, чтобы включить этот параметр, задав уровень автоматического настройки окна получения TCP.

Использование командной строки для включения уровня автонастройки

Выполните следующую команду:

netsh int tcp set global autotuninglevel=normal 

Чтобы проверить, включен ли уровень автонастройки, используйте следующую команду:

netsh int tcp show global

Команда командной строки для проверки уровня автотунига.

Включение уровня автоматической настройки с помощью PowerShell

Запустите следующий командлет:

Get-NetTCPSetting | Set-NetTCPSetting -AutoTuningLevelLocal Normal

Чтобы проверить, включен ли уровень автоматического переключения, используйте следующий командлет:

Get-NetTCPSetting | Format-List SettingName,Autotuninglevel*

Командлет PowerShell для проверки включения уровня автонастройки.

Примечание.

Существует пять уровней для автоматического настройки окна получения: отключены, строго ограниченные, ограниченные, обычные и экспериментальные. Дополнительные сведения о том, как автоматическое изменение влияет на пропускную способность, см. в разделе "Настройка производительности сетевых адаптеров".

Низкая скорость пропускной способности в низкой задержке и сети с высокой пропускной способностью

Два сервера подключены к одной сети с низкой задержкой и высокой пропускной способностью. При создании базовой или тестовой производительности TCP с помощью средства ctsTraffic только ЦП 0 пики на сервере ЦП с несколькими ядрами.

Эта проблема возникает, так как функция масштабирования на стороне получения (RSS) или очереди виртуальных машин (VMQ) не включена или не настроена правильно. Используйте VMQ, если физический компьютер является гипервизором. Если это не так, включите RSS в операционной системе (ОС) и на сетевых картах.

Примечание.

Беспроводные сетевые карты не поддерживают функции RSS или VMQ.

Включение RSS для ОС

Включите RSS с помощью командной строки или PowerShell следующим образом:

Командная строка: netsh int tcp set global rss=enabled

PowerShell: Set-NetAdapterRss -Name <interface name> -Enabled $True

Включение RSS для сетевых карт

Сначала проверьте, включена ли функция RSS. Проверьте дополнительные свойства сетевой карты для связанной конфигурации с помощью следующего командлета:

Get-NetAdapterAdvancedProperty | Where-Object -property RegistryKeyword -Like *rss* | format-table -AutoSize

Примечание.

Изменения расширенных свойств могут привести к прерыванию или потере сетевого подключения. Перед внесением изменений ознакомьтесь с документацией поставщика сетевых адаптеров.

Выполните следующие действия, чтобы включить RSS для сетевых карт:

  1. Запустите ncpa.cpl , чтобы открыть сетевые подключения.
  2. Щелкните правой кнопкой мыши целевое подключение и выберите пункт "Свойства>".
  3. На вкладке "Дополнительно" найдите масштабирование на стороне получения в списке свойств и задайте для параметра "Включить".
  4. Нажмите кнопку ОК.

RSS также можно включить с помощью командлета PowerShell:

Set-NetAdapterAdvancedProperty -Name <Interface name> -RegistryKeyword *RSS -RegistryValue 1

Проблемы с базовой сетью

В этом разделе описывается, как проверить наличие базовых проблем с сетью при измерении базовой пропускной способности или устранении неполадок с пропускной способностью.

Чтобы получить анализ журнала на уровне пакетов, проверьте базовые сетевые проблемы с помощью средства сбора сетевых пакетов (например, Microsoft Network Monitor, Wireshark или ctsTraffic).

Действия по сбору журналов с помощью средств записи сетевых пакетов

  1. Начните ведение журнала с помощью Microsoft Network Monitor или Wireshark , чтобы записать трафик на обеих конечных точках. Вы также можете использовать встроенное средство записи Windows следующим образом:

    1. Откройте командную строку от имени администратора.

    2. Выполните следующую команду:

      NETSH TRACE START CAPTURE=YES REPORT=DISABLED TRACEFILE=<FILEPATH>.ETL MAXSIZE=512
      

      Примечание.

      При использовании netsh trace команды может потребоваться несколько записей.

  2. Запустите средство CTStraffic.exe, чтобы создать файл .csv.

  3. Остановите ведение журнала. Для встроенного средства записи Windows введите NETSH TRACE STOP командную строку в качестве администратора.

Анализ файла записи

Ниже приведен пример анализа отфильтрованного результата. В этом сценарии средство ctsTraffic использует шаблон push-отправки (шаблон по умолчанию), что означает, что пакет отправляется от клиента на сервер.

  1. Откройте файл записи в Microsoft Network Monitor.

  2. Отфильтруйте трассировку сети с помощью Property.TCPRetransmit==1 && tcp.Port==4444 фильтра, который находит пакеты повторной передачи. Повторная передача пакетов означает, что подтверждение TCP заданной последовательности TCP от отправителя никогда не получено.

    Примечание.

    Чтобы проанализировать ETL-файл, перейдите к разделу >"Параметры>синтаксического анализа профилей>" Windows>, заданных как активный.>

    Запись сетевой трассировки для повторной передачи кадра.

    Как показано на снимке экрана, кадр #441 повторно передается дважды, что означает, что он передается отправителем три раза. Используйте тот же номер последовательности TCP (2278877548), чтобы определить этот кадр.

  3. Щелкните правой кнопкой мыши параметр SequenceNumber в сведениях о кадре и выберите " Добавить выбранное значение" для отображения фильтра.

    Выбрав параметр

  4. Отключите предыдущий фильтр, добавив "//" следующим образом:

    Отключение предыдущего фильтра в фильтре отображения.

  5. Выберите Применить. Полная последовательность TCP с данным порядковым номером отображается следующим образом:

    Нажмите кнопку

    В этом результате показано, что исходный кадр #441 не получается сервером и перенаправляются отправителем. Повторная передача кадра происходит, если подтверждение последовательности не получено. Чтобы понять, как работает TCP, ознакомьтесь с трехсторонним подтверждением через TCP/IP и описание функций Windows TCP. Затем скопируйте TCP.SequenceNumber == <value> фильтр последовательности из клиентской трассировки и вставьте его в трассировку сервера.

    На сервере получается только один пакет заданной последовательности, как показано в следующем результате:

    Последовательность TCP, показанная на стороне сервера.

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

Производительность обратного цикла TCP

В выпуске Windows Server 2019 модель обработки обратного цикла TCP/IP была изменена, чтобы устранить определенные узкие места производительности, которые существовали в предыдущих выпусках windows. В этом разделе описаны параметры конфигурации, доступные для изменения поведения обработки обратного цикла TCP/IP.

Параметры конфигурации доступны с помощью средства настройки netsh. Каждый параметр можно задать отдельно для IPv4 и IPv6. Значения по умолчанию могут отличаться от разных версий Windows.

Примечание.

На компьютерах с Windows общего назначения значения по умолчанию не следует изменять.

Если разработчик приложения определяет, что путь к данным обратного цикла является основной причиной недостаточной производительности приложений, можно использовать следующие команды для настройки конфигурации в соответствии с отдельными потребностями приложения.

netsh int ipv6|ipv4 set gl loopbackexecutionmode=adaptive|inline|worker
netsh int ipv6|ipv4 set gl loopbackworkercount=<value>
netsh int ipv6|ipv4 set gl loopbacklargemtu=enable|disable

Описание

Loopbackexecutionmode
Worker

В этом режиме пакеты помещаются в очередь на стороне отправителя и обрабатываются рабочим потоком на стороне получателя. Этот режим предпочитает пропускную способность по задержке.

Inline

В этом режиме обработка выполняется в контексте потоков приложений как на стороне отправителя, так и получателя. Этот режим способствует задержке по пропускной способности.

Adaptive

Первые пакеты потока данных обрабатываются встроенными, а затем пакеты откладываются на рабочие потоки. Этот режим пытается сбалансировать задержку и пропускную способность.

Loopbackworkercount

Позволяет настроить количество используемых рабочих потоков.

Loopbacklargemtu

Позволяет настроить использование большого MTU, это необходимо включить.