Task offload что это
Большие потоки трафика и управление прерываниями в Windows
Мне очень понравился топик про распределение нагрузки от прерываний сетевого адаптера по процессорам, поэтому я решил описать как это делается в Windows.
Disclaimer: судя по некоторым комментариям в предыдущих постах, мне стоит повторить то, с чего я начал первый пост: я не даю (и не могу давать) общеприменимых рецептов. Особенно это касается производительности, где мельчайшая неучтенная деталь может катастрофически повлиять на результат. Вернее рекомендацию то я даю: ТЕСТИРОВАНИЕ И АНАЛИЗ. Смысл моей писанины в том, чтобы дать людям как можно больше информации для анализа, ведь, чем больше понимаешь в том, как что либо работает, тем легче находить пути устранения боттлнеков.
Итак, масштабируемость пропускной способности сети. Потребуется Windows Server 2003 SP2+. Сетевая карта, поддерживающая Receive Side Scaling (можно с достаточной долей уверенности сказать, что подойдет любая серверная сетевая карта, выпущенная в последние 5 лет или любая вообще 1Gb+ NIC, хотя частенько можно увидеть RSS и на 100Mb). Устанавливаем Windows Server и драйвера на карту…
ВСЕ. Настройка завершена. RSS по умолчанию включен во всех версиях Windows, в которых он поддерживается.
Тестирование
Возьмем не особо новый Dell-овый сервер с двумя четырехядерными ксеонами:
На борту две двухпортовые 1Gb сетевые карты и одна 10Gb, но я не нашел 10Gb свитча, так что завести не удалось — ну да ладно:
Что интересно в этих картах, так это то, что несмотря на поддержку RSS в 8 очередей, они не поддерживают ни MSI-X ни даже MSI. Более того, из четырех доступных линий pin-based прерываний на каждый сетевой порт отведена только одна (соответственно никакими способами заставить прерывания приходить на разные процессоры уже нельзя — это аппаратное ограничение данной конфигурации). 10 гигабитка зарегистрировала на себя то ли 32 то ли 64 (на глаз) вектора прерываний, но ее использовать — не судьба. Сможет ли индусская поделка для запуска игр справиться с задачей?
На всякий случай проверяем RSS (хотя если его не будет — будет заметно и так):
Для начала выключим RSS (включал обратно я уже после тестирования, но том же окне)
и запустим нагрузочный тест:
Полностью загружены два ядра, все остальные простаивают
Сеть загружена на треть:
50% одного процессора забито обработакой прерываний, еще 20% того же процессора — обработка DPC. Остальное — tcpip стек и приложение, которое отдает трафик.
Включаем RSS (скриншот выше). Процессор:
Сеть:
Треть одного процессора забита прерываниями, но DPC отлично распараллелены.
В общем, на данной конфигурации можно было бы отдавать порядка 3 гигабит (с одной сетевой карты) и только тогда мы бы встретили бутылочное горлышко.
На всякий случай, скажу, что у RSS есть менее известный родственник — Send Side Scaling. Если перед посылкой списка буферов выставить значение хеша, то прерывание после завершения посылки будет доставлено в соответствии с установленными indirection table-ами.
Вот здесь можно почитать про RSS, а здесь есть неплохая презентация в картинках поясняющая работу RSS. Если интересно, могу попробовать своими словами описать механизмы работы RSS, но как по мне — лучше читать первоисточники.
TCP Offload Engine
Если нечто подобное RSS в Linux вот-вот появится (не нашел никаких упоминаний о поддержке нормального аппаратного RSS в Linux: кто знает — дайте ссылку — проапдейчу пост). То с TOE в Linux все официально сложно. Патч от Chelsio (один из производителей high-end сетевых карт), реализующий поддержку TOE, был отклонен, а вместо этого начались какие то совершенно идиотские отмазки (при прочтении стоит иметь в виду, что BSD и Windows имеют нормальную поддержку TOE уже много лет).
Итак, что же это такое? TOE — это полная реализация TCPIP на аппаратном уровне: с подтверждением доставки, ретрансмитами при ошибках, контролем окна и пр.: сетевая карта по DMA прямо из памяти берет данные, режет на пакеты, присоединяет хедеры, а рапортует (при помощи прерываний) только в самых крайних случаях.
По умолчанию TOE стоит в automatic режиме. Смотреть Chimney Offload State:
Скриншот снимался во время активного тестирования, но в статистике видно, что ни одного «выгруженного» в сетевую карту соединения нет (о причинах позже). Включем принудительно (и через некоторое время запрашиваем статистику):
А вот и причина: в данную сетевую карту можно выгрузить только 1024 соединения (но реально система смогла выгрузить 1022). Довольно дорогой ресурс, чтоб можно было выгружать все подряд. Система эвристически пытается обнаруживать соединения (get/put больших файлов по http, пересылка файлового контента на файл-серверах и т.п.), которые проживут долго и выгружает в первую очередь их.
Но все же глянем, что получилось. Процессор разгрузился втрое:
Очень сильно уменьшилось количество (и время проводимое в) как ISR так и DPC:
Проблемы с драйвером Atheros L1 Gigabit Ethernet 10/100/1000Base-T Controller в Windows 7 x64
После чистой установки Windows 7 SP1 x64 периодически стала возникать неприятная проблема: система намертво зависала (никаких синих экранов, просто изображение застывает и все). Вывести комп из этого состояния мог только ресет. В логах никаких сообщений об ошибках, только сообщение о внезапном завершении работы. Проблема оказалась в драйвере сетевой карты Atheros L1 Gigabit Ethernet.
Логичное решение – обновить драйвер. Последняя версия под Windows 7 x64 – 2.4.7.29 (ее также предлагает для установки Windows через автоматическое обновление).
Установил, возникла проблема – скорость соединения упала до 10 Мбит/c (#$%@@@. ), зависаний вроде бы не наблюдалось, но драйвер пришлось откатить.
Дальнейший поиск в сети привел на страницу: http://blog.malyshev.com/?p=690 (большое спасибо автору).
Суть решения такова: обновляем драйвер, установленный системой по умолчанию. Из-за проблем с последней версией 2.4.7.29, я установил промежуточный драйвер версии 2.4.7.27 (скорость 100 Мбит/c).
Atheros L1 Gigabit Ethernet
После этих действий зависания прекратились и скорость вроде бы в норме.
Проблема с этой сетевой картой возникает только под Windows 7 x64, c 32-битной системой до этого работал без проблем.
36 ответов к “Проблемы с драйвером Atheros L1 Gigabit Ethernet 10/100/1000Base-T Controller в Windows 7 x64”
На проблемных ПК (их у нас много) установлена ОС Windows 7 x86.
Системная плата: ASUS P5B-VM SE, ОЗУ: 2 Гб DDR2, процессор: Intel Core 2 Duo E4400, сетевая карта: Atheros L1 Gigabit Ethernet 10/100/1000Base-T.
ASUS P5KPL, Atheros L1 Gigabit Ethernet 10/100/1000Base-T встроенный
Периодически/ постоянно отваливался шлюз (индикация на порту платы/ модема была) при запущенном торрент – клиенте. Приходиловь вкл/ откл сетевуху (cmd – шник сделел через netsh перезапускал).
Версия драйвера (РУС) 2.4.7.292 от 29.06.2011 (Win 8.1 х64 поставила сама).
Отключение “Управление потоком” помогло (ниже напишут).
На х64 7-ке дрова менял на старые (падала в синий экран).
На x32 говорят таких проблем не наблюдали.
СПАСИБО!!
Спасибо автору, помогло! Уже не знал что делать. Система полностью висла при попытке передать что-то по сети, а при установке промежуточного драйвера и отключении двух указанных функций все заработало как должно!
у меня была следующая проблема! интернет работал отлично, но когда через браузер пробовал что то загрузить, например фото или видео в соц сеть или еще куда то, то сразу пропадал интернет! помогло отключение этх опций! инет сам перезапустился, проверил, все работает на ура!! Спасибо! драйвер стоит последний, а не промежуточный
Симптомы и конфигурация полностью как у Serg, но решение пришло намного проще. Удалил устройство из диспетчера устройств, перезагрузил и драйв поставился автоматически. Возможно драйвера встали какие-то обновленные. Просто Обновить – не помогло. Надо именно удалить устройство из системы. Может кому-то будет полезно.
У меня вчера появилась та же проблема. Установил дома новый Net через сетевую карту (скорость 100 mb), на радостях поставил через uTORRENT несколько торрентов и…. упс – через 5 минут жёлтый треугольник на сети (без доступа в интернет). Что только не делал, обшарил весь и-т, в поиске причины выключил KIS 2013 и… – в ту же секунду жёлтый треугольник пропал, закачка возобновилась. Продолжил свой путь, включил каспера (без защиты нельзя), проблема возобновилась, тогда в настройках карты отключил NDIS 6 filter Kaspersky antivirus, что возобновило закачку. Но отключать или удалять эту надстройку лаб. Kaspersky категорически не рекомендует. Включил ее, снова прокопался пол дня, дошел до исключений каспера, после долгих поисков и проб удалил вообще из исключений автоматически включенный проце svchost.exe и больше никаких проблем – KIS2013, KIS NDIS 6 Filter – включены, uTORRENT и сеть (в том числе сетевае передача большых файлов) работают без проблем. Параметры: Win7 x64, Atheros L1 Gigabit Ethernet 10/100/1000Base-T v.2.4.7.29, utorrent v3.3.2.30180.
Win7x64. Зависание исчезло, но появились BSODы при серфинге. Танцы с бубном не помогают, Атэрос походу вообще забил на обновление драйверов и техподдержку. Стабильной работы так и не удалось добиться.
Проблему решил покупкой и установкой Intel EXPI9301CT. Теперь всё ОК.
Настройка производительности сетевых адаптеров
область применения: Windows server 2022, Windows server 2019, Windows Server 2016, Azure Stack хЦи, версии 21H2 и 20H2
используйте сведения в этом разделе для настройки сетевых адаптеров производительности для компьютеров под управлением Windows Server 2016 и более поздних версий. Если сетевые адаптеры предоставляют параметры настройки, эти параметры можно использовать для оптимизации пропускной способности сети и использования ресурсов.
Правильные параметры настройки для сетевых адаптеров зависят от следующих переменных.
В следующих разделах описывается ряд параметров настройки производительности.
Включение функций разгрузки
Включение функций разгрузки на сетевом адаптере обычно имеет положительный эффект. Однако сетевой адаптер может оказаться недостаточно мощным для обработки возможностей разгрузки с высокой пропускной способностью.
Не используйте разгрузку задач IPSec функции разгрузки или разгрузку TCP Chimney. эти технологии являются устаревшими в Windows Server 2016 и могут негативно сказаться на производительности сервера и сети. Кроме того, эти технологии могут не поддерживаться корпорацией Майкрософт в будущем.
Например, рассмотрим сетевой адаптер с ограниченными аппаратными ресурсами. В этом случае включение возможности разгрузки сегментации может снизить максимальную устойчивую пропускную способность адаптера. Однако если приемлема пропускная способность, следует включить функции сегментирования разгрузки.
Для некоторых сетевых адаптеров требуется включить разгрузку компонентов независимо для путей отправки и получения.
Включение масштабирования на стороне приема (RSS) для веб-серверов
RSS способно повысить веб-масштабируемость и производительность, когда число сетевых адаптеров меньше количества логических процессоров на сервере. Когда весь веб-трафик проходит через сетевые адаптеры, поддерживающие RSS, сервер может обрабатывать входящие веб-запросы с разных соединений одновременно на разных процессорах.
Избегайте использования сетевых адаптеров, отличных от RSS, и сетевых адаптеров, поддерживающих RSS, на одном сервере. Из-за логики распределения нагрузки в RSS и протоколе HTTP, производительность может быть значительно снижена, если сетевой адаптер, не поддерживающий RSS, принимает веб-трафик на сервере с одним или несколькими сетевыми адаптерами, поддерживающими RSS. В этом случае необходимо использовать сетевые адаптеры, поддерживающие RSS, или отключить RSS на вкладке Дополнительные свойства в свойствах сетевого адаптера.
Чтобы определить, поддерживает ли сетевой адаптер RSS, можно просмотреть сведения RSS на вкладке Дополнительные свойства в свойствах сетевого адаптера.
Профили RSS и очереди RSS
стандартный профиль RSS по умолчанию — нумастатик, который отличается от используемого по умолчанию предыдущих версий Windows. Прежде чем приступить к использованию профилей RSS, ознакомьтесь с доступными профилями, чтобы понять, когда они полезны и как они применяются к сетевой среде и оборудованию.
Например, если открыть диспетчер задач и проверить логические процессоры на сервере и они будут недостаточно загружены для приема трафика, можно попробовать увеличить число очередей RSS по умолчанию, равное двум, до максимума, поддерживаемого сетевым адаптером. В используемом сетевом адаптере могут быть параметры для изменения числа очередей RSS в драйвере.
Увеличение ресурсов сетевого адаптера
Для сетевых адаптеров, позволяющих вручную настраивать ресурсы, такие как буферы приема и отправки, следует увеличить выделенные ресурсы.
В некоторых сетевых адаптерах устанавливаются небольшие буферы приема для экономии выделенной памяти от узла. Это ведет к потере пакетов и снижению производительности. Поэтому для сценариев с интенсивным приемом рекомендуется увеличить буфер приема до максимума.
Если сетевой адаптер не предоставляет настройки ресурсов вручную, он динамически настраивает ресурсы, или для ресурсов задано фиксированное значение, которое нельзя изменить.
Включение контроля прерываний
Для управления прерываниями прерываний некоторые сетевые адаптеры предоставляют различные уровни управления прерываниями, различные параметры объединения буфера (иногда отдельно для буферов отправки и получения) или и то, и другое.
Следует рассмотреть возможность контроля прерываний для рабочих нагрузок, привязанных к ЦП. При использовании управления прерываниями учитывайте компромисс между экономией ЦП узла и задержкой, а также увеличением экономии ресурсов узла из-за большего количества прерываний и снижения задержки. Если сетевой адаптер не выполняет контроль прерываний, но он предоставляет объединение буферов, можно повысить производительность, увеличив число Объединенных буферов, чтобы освободить больше буферов на отправку или получение.
Настройка производительности для обработки пакетов с низкой задержкой
Многие сетевые адаптеры позволяют настраивать параметры для оптимизации системной задержки. Задержка — это время между обработкой входящего пакета сетевым драйвером и отправкой этого пакета обратно. Обычно это время измеряется в микросекундах. Для сравнения время передачи пакетов на длинные дистанции обычно измеряется в миллисекундах (это на порядок дольше). Эта настройка не сокращает время прохождения пакета.
Ниже приведены некоторые советы по настройке производительности для загруженных сетей, в которых на счету каждая микросекунда.
Установите в операционной системе профиль управления электропитанием Высокая производительность.
Этот параметр не работает должным образом, если BIOS системы имеет значение отключить управление питанием в операционной системе.
Включить статические разгрузки. Например, включите контрольные суммы UDP, контрольные суммы TCP и отправку параметров большой разгрузки (LSO).
Если трафик проходит через несколько потоков, например при получении многоуровневого трафика многоадресной рассылки, включите RSS.
Отключите Управление прерываниями в драйверах сетевых адаптеров, которым требуется самая низкая задержка. Помните, что эта конфигурация может использовать больше времени ЦП и представляет компромисс.
Обрабатывайте прерывания сетевого адаптера и DPC на основном процессоре, который совместно использует процессорный кэш с ядром, которое используется программой (пользовательским потоком), обрабатывающей пакет. Для передачи процесса конкретным логическим процессорам можно использовать настройку фиксации ЦП вместе с настройкой RSS. Использование одного ядра для прерываний, DPC и пользовательского потока ведет к снижению производительности из-за увеличения нагрузки, поскольку ISR, DPC и поток будут конкурировать за ядро.
Прерывания управления системой
Многие аппаратные системы используют прерывания управления системой (SMI) для различных функций обслуживания, таких как сообщения об ошибках с кодом коррекции ошибок (ECC), поддержка устаревшей совместимости с USB, управление вентилятором и управление параметрами питания, управляемой BIOS.
SMI — это прерывание с наивысшим приоритетом в системе и помещает ЦП в режим управления. Этот режим загружает все остальные действия, в то время как SMI запускает подпрограммы службы прерываний, обычно содержащиеся в BIOS.
К сожалению, такое поведение может привести к скачкам задержки 100 микросекунд или более.
Когда необходимо обеспечить минимальную задержку, следует запросить у поставщика оборудования версию BIOS, в которой прерывания SMI имеют наименьший возможный приоритет. Эти версии BIOS часто называются «BIOS с низкой задержкой» или «SMI Free BIOS». В некоторых случаях аппаратная платформа не может полностью исключить активность SMI, так как она используется для управления важными функциями (например, вентиляторами).
Операционная система не может управлять SMIs, так как логический процессор работает в специальном режиме обслуживания, что предотвращает вмешательство пользователя операционной системы.
Настройка производительности TCP
Для настройки производительности TCP можно использовать следующие элементы.
Автоматическая настройка окна приема TCP
в более ранних версиях Windows сетевой стек Windows использовал окно приема фиксированного размера (65 535 байт), которое ограничивает общую возможную пропускную способность для подключений. Общая пропускная способность подключений TCP может ограничивать сценарии использования сети. Автоматическая настройка окна приема TCP позволяет этим сценариям полностью использовать сеть.
Для окна приема TCP, имеющего определенный размер, можно использовать следующее уравнение для вычисления общей пропускной способности отдельного соединения.
Общая пропускная способность в байтах Размер окна приема TCP в байтах * (1/ Задержка подключения в секундах)
Например, для соединения с задержкой 10 мс общая пропускная способность составляет только 51 Мбит/с. Это значение целесообразно для большой корпоративной сетевой инфраструктуры. Однако с помощью автонастройки для настройки окна приема подключение может обеспечить полную скорость линии для подключения 1 Гбит/с.
Некоторые приложения определяют размер окна приема TCP. Если приложение не определяет размер окна приема, скорость связи определяется следующим образом:
Например, на компьютере с установленным сетевым адаптером с 1 Гбит/с размер окна должен быть 64 КБ.
Эта функция также обеспечивает полное использование других функций для повышения производительности сети. Эти функции включают остальные параметры TCP, определенные в RFC 1323. используя эти функции, компьютеры на базе Windows могут согласовать размеры окна приема TCP, которые меньше, но масштабируются по определенному значению в зависимости от конфигурации. Такое поведение упрощает обработку размеров для сетевых устройств.
Может возникнуть проблема, при которой сетевое устройство не соответствует параметру TCP Window Scale, как определено в RFC 1323 и, следовательно, не поддерживает коэффициент масштабирования. в таких случаях обратитесь к этой статье KB 934430, если вы пытаетесь использовать Windows Vista за устройством брандмауэра или обратитесь в службу поддержки для поставщика сетевых устройств.
Проверка и настройка уровня автонастройки окна приема TCP
для просмотра или изменения уровня автонастройки окна приема TCP можно использовать команды netsh или командлеты Windows PowerShell.
в отличие от версий Windows, которые предварительно устарели Windows 10 или Windows Server 2019, вы больше не можете использовать реестр для настройки размера окна приема TCP. Дополнительные сведения об устаревших параметрах TCPсм. здесь.
Подробные сведения о доступных уровнях автонастройки см. в разделе уровни автонастройки.
Использование команды Netsh для просмотра или изменения уровня автонастройки
Чтобы проверить текущие параметры, откройте окно командной строки и выполните следующую команду:
Выходные данные этой команды должны выглядеть следующим образом:
Чтобы изменить этот параметр, выполните в командной строке следующую команду:
В предыдущей команде представляет новое значение для уровня автоматической настройки.
Использование PowerShell для просмотра или изменения уровня автонастройки
Чтобы проверить текущие параметры, откройте окно PowerShell и выполните следующий командлет.
Выходные данные этого командлета должны выглядеть следующим образом.
Чтобы изменить этот параметр, выполните следующий командлет в командной строке PowerShell.
В предыдущей команде представляет новое значение для уровня автоматической настройки.
Дополнительные сведения об этих командлетах см. в следующих статьях:
Уровни автонастройки
Можно настроить автоматическую настройку окна приема на любой из пяти уровней. Уровень по умолчанию — Обычная. В следующей таблице описаны уровни.
Level | Шестнадцатеричное значение | Комментарии |
---|---|---|
Normal (по умолчанию) | 0x8 (коэффициент масштабирования 8) | Задайте для окна приема TCP значение рост в соответствии с практически всеми сценариями. |
Выключено | Коэффициент масштабирования недоступен | Задайте для окна приема TCP значение по умолчанию. |
С ограниченным доступом | 0x4 (коэффициент масштабирования 4) | Задайте размер окна приема TCP, превышающего значение по умолчанию, но ограничьте такой рост в некоторых сценариях. |
С высоким уровнем ограничений | 0x2 (коэффициент масштабирования 2) | Задайте размер окна приема TCP, превышающего значение по умолчанию, но это очень консервативно. |
Экспериментальный | 0xE (коэффициент масштабирования 14) | Задайте для окна приема TCP значение рост в соответствии с экстремальными сценариями. |
Если для записи сетевых пакетов используется приложение, приложение должно сообщить данные, аналогичные приведенным ниже, для различных параметров автонастройки окна.
Уровень автонастройки: нормальный (состояние по умолчанию)
Уровень автонастройки: отключен
Уровень автонастройки: ограниченный
Уровень автонастройки: очень ограниченный
Уровень автонастройки: экспериментальный
Устаревшие параметры TCP
следующие параметры реестра из Windows Server 2003 больше не поддерживаются и не учитываются в более поздних версиях.
Все эти параметры были расположены в следующем подразделе реестра:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters
Платформа фильтрации Windows
Windows в Vista и Windows Server 2008 появилась платформа фильтрации Windows (WFP). WFP предоставляет интерфейсы API независимым поставщикам программного обеспечения (ISV) для создания фильтров обработки пакетов. Например, для брандмауэров и антивирусного ПО.
Плохо написанный фильтр WFP может значительно снизить производительность сети сервера. дополнительные сведения см. в разделе перенос Packet-Processing драйверов и приложений в WFP в Windows Центр разработки.
Ссылки на все разделы данного руководства см. в разделе Настройка производительности сетевой подсистемы.