Большие Потоки Трафика И Управление Прерываниями В Windows

Мне действительно это понравилось тема о распределении нагрузки от прерываний сетевого адаптера по процессорам, поэтому я решил описать, как это делается в Windows. Disclaimer: судя по некоторым комментариям в предыдущих постах, я должен повторить то, с чего начал в первом посте: я не даю (и не могу дать) общеприменимых рецептов.

Особенно это актуально для продуктивности, где малейшая неучтённая деталь может катастрофически повлиять на результат. Скорее даю рекомендацию: ТЕСТИРОВАНИЕ И АНАЛИЗ.

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

Требуется Windows Server 2003 SP2+.

Сетевая карта, поддерживающая масштабирование на стороне приема (можно с достаточной степенью уверенности сказать, что подойдет любая серверная сетевая карта, выпущенная за последние 5 лет, или любой сетевой адаптер 1 Гбит+, хотя часто можно увидеть RSS на 100 Мбит).

Установка Windows Server и драйверов на карту.

ВСЕ.

Настройка завершена.

RSS включен по умолчанию во всех версиях Windows, которые его поддерживают.



Тестирование

Возьмем не очень новый сервер Dell с двумя четырехъядерными процессорами Xeon:

Большие потоки трафика и управление прерываниями в Windows

На борту имеются две двухпортовые сетевые карты по 1Gb и одна сетевая карта на 10Gb, но 10Gb-свича я не нашел, поэтому установить его не удалось — ну да ладно:

Большие потоки трафика и управление прерываниями в Windows

Что интересно в этих картах, так это то, что, хотя они и поддерживают RSS с 8 очередями, они не поддерживают никаких MSI-X даже не MSI. При этом из четырех доступных линий прерываний по выводам каждому сетевому порту выделена только одна (соответственно заставить прерывания поступать на разные процессоры каким-либо образом уже невозможно — это аппаратное ограничение данной конфигурации).

На 10-гигабитной карте прописано то 32, то 64 (на глазок) вектора прерываний, но использовать ее не судьба.

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

Большие потоки трафика и управление прерываниями в Windows

На всякий случай проверяем RSS (хотя если его нет, то все равно будет заметно):

Большие потоки трафика и управление прерываниями в Windows

Для начала отключим RSS (после тестирования я его снова включил, но в том же окне)

Большие потоки трафика и управление прерываниями в Windows

и запустите нагрузочный тест: Два ядра загружены полностью, все остальные простаивают

Большие потоки трафика и управление прерываниями в Windows

Сеть загружена на треть:

Большие потоки трафика и управление прерываниями в Windows

50% одного процессора забито обработкой прерываний, еще 20% того же процессора — обработка DPC. Остальное — это стек tcpip и приложение, отправляющее трафик.



Большие потоки трафика и управление прерываниями в Windows

Включите RSS (скриншот выше).

ПРОЦЕССОР:

Большие потоки трафика и управление прерываниями в Windows

Сеть:

Большие потоки трафика и управление прерываниями в Windows

Треть одного процессора забита прерываниями, но ЦОДы прекрасно распараллелены.



Большие потоки трафика и управление прерываниями в Windows

В целом при такой конфигурации можно было бы передать около 3-х гигабит (с одной сетевой карты) и только тогда мы столкнулись бы с узким местом.

На всякий случай скажу, что у RSS есть менее известный родственник — Send Side Scaling. Если перед отправкой списка буферов разоблачать хэш-значение, то прерывание после завершения отправки будет доставлено в соответствии с установленными таблицами косвенности.

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



Механизм разгрузки TCP

Если что-то вроде RSS в Linux точно появится (о поддержке нормального аппаратного RSS в Linux упоминаний не нашел: кто знает, дайте ссылку и я обновлю пост).

Затем с ПАЛЕЦ НА НОГЕ в линуксе официально все сложно.

Патч от Челси (одного из производителей высококлассных сетевых карт) реализация поддержки TOE была отклонена, а вместо этого некоторые полностью идиотские оправдания (Когда вы читаете, стоит иметь в виду, что BSD и Windows уже много лет имеют нормальную поддержку TOE).

Так что же это такое? TOE — это полная реализация TCPIP на аппаратном уровне: с подтверждением доставки, повторной передачей в случае ошибок, оконным контролем и т. д.: сетевая карта берет данные напрямую из памяти через DMA, разрезает их на пакеты, прикрепляет заголовки и сообщает ( использование прерываний) только в самых крайних случаях.

По умолчанию TOE находится в автоматическом режиме.

Наблюдайте за состоянием разгрузки дымохода:

Большие потоки трафика и управление прерываниями в Windows

Скриншот сделан во время активного тестирования, но статистика показывает, что на сетевую карту не «загрузилось» ни одно соединение (о причинах чуть позже).

Включим принудительно (и через некоторое время запросим статистику):

Большие потоки трафика и управление прерываниями в Windows

И вот причина: на эту сетевую карту можно загрузить только 1024 соединения (а на самом деле система смогла загрузить 1022).

Довольно дорогой ресурс, чтобы можно было все выложить.

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

Но давайте посмотрим, что произошло.

Процессор выгружался трижды:

Большие потоки трафика и управление прерываниями в Windows

Количество (и время, проведенное) как ISR, так и DPC сильно сократилось:

Большие потоки трафика и управление прерываниями в Windows

Теги: #Системное администрирование #rss #масштабируемость #масштабируемость #TOE

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.