Назад | Перейти на главную страницу

Как повысить пропускную способность сетевой карты Intel X520-DA2 10 Гб без Jumbo-пакетов

Вот что я сделал до сих пор:

Использование большего количества буферов Rx / Tx увеличивает производительность по сравнению с настройками по умолчанию. Я установил для RSS Queues значение 4 для каждого адаптера и указал для запуска RSS CPU на втором порте значение, отличное от 0 (это 16 на используемом мной ПК, с 16 ядрами, 32 HT).

Наблюдая за ProcessExplorer, я ограничен способностью ЦП обрабатывать большое количество входящих прерываний даже при включенном RSS. Я использую слот PCIe x8 (электрический) в режиме 2.x. Каждый из двух адаптеров подключается к шине 5GT / sec x8.

Скорость реакции ОС не имеет значения, имеет значение пропускная способность ввода-вывода. Я ограничен неспособностью клиентов обрабатывать Jumbo-пакеты.

Какие настройки я должен попробовать дальше?

Подробности: Dual Xeon-E5 2665, 32 ГБ ОЗУ, восемь твердотельных накопителей в RAID0 (RAMDrive, используемый для проверки производительности сетевой карты), 1 ТБ данных для перемещения через IIS / FTP с 400 клиентов в кратчайшие сроки.

В ответ на комментарии:

Фактическая пропускная способность при чтении составляет 650 МБ / с по объединенной паре каналов 10 ГБ / с на RAM-диск.

Антивирус и брандмауэр выключены, AFAICT. (В этом случае у меня довольно хороший контроль над тем, что установлено на ПК. Как я могу быть уверен, что никакие фильтры не снижают производительность? Мне нужно будет следить, хороший момент.)

В Process Explorer я вижу периоды времени, когда ЦП продолжает работать (красный цвет, время ядра), но сетевой и дисковый ввод-вывод остановлены

Максимальное количество процессоров RSS по умолчанию - 16.

Взаимодействие с сообщением поддерживается на обоих экземплярах устройства X520-DA2, при этом MessageNumberLimit имеет значение 18. Вот что я вижу на своей скромной настольной карте.

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

ЦП должен выполнять много работы по обработке TCP-пакетов. Это влияет на пропускную способность. Что ограничивает в вашем случае, так это не сетевое оборудование, а способность сервера загружать сетевые ссылки.

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

Как вы уже упоминали, jumbo-кадры - на самом деле это несколько увеличивает пропускную способность. Но не так сильно, как RDMA.

Большая часть оборудования Ethernet 10 Гбит / с будет иметь очень полезную малоиспользуемую функцию под названием RDMA или удаленный прямой доступ к памяти. Это позволяет сетевой карте делать копии из памяти в память по сети без вмешательства ЦП. Итак, ЦП сообщает сетевой карте, что делать, а затем сетевая карта делает все остальное. Беда в том, что он пока мало используется. Но дело идет. Судя по всему, в самой последней версии Microsoft Windows Server 2012 есть что-то под названием SMB Direct. Он использует RDMA. Итак, если вы хотите увеличить пропускную способность, вы захотите это использовать.

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

Кстати, я не уверен, что вы так много увидите это на 10 Гбит, но быстрая ОЗУ помогает с RDMA, особенно с 56 Гбит Infiniband. В общем, лучше использовать самую быструю оперативную память, поддерживаемую вашим сервером.

Также обратите внимание на этот комментарий к ссылке SMB Direct, которую я поместил выше:

Не следует объединять сетевые адаптеры с поддержкой RDMA, если вы собираетесь использовать возможности RDMA сетевых адаптеров. В команде сетевые адаптеры не будут поддерживать RDMA.


Обновление: Похоже, что не ВСЕ 10GBit NIC по какой-то причине поддерживают RDMA. Так что сначала проверьте особенности вашей модели.

Еще я подумал, что тип протокола, используемого для тестирования, может влиять на результаты. то есть накладные расходы протокола поверх накладных расходов TCP. Я предлагаю вам изучить что-то, что можно протестировать, не касаясь жесткого диска, например iperf. Где-то есть порт для Windows.

Думаю такой вопрос: Почему моя гигабитная связь не обеспечивает пропускную способность не менее 150 МБ / с? связано с вашей проблемой. Я говорил там о Dell PowerEdge 6950. Ответ прост: «используйте кадры большого размера», чтобы уменьшить количество прерываний. Я могу представить, что настройка механизма разгрузки сетевой карты может помочь в вашем случае, но я не знаю, как это сделать на W2K8R2.

Идея: Увеличьте количество буферов в сетевой карте, увеличьте триггер прерывания для пакетов в буфере, чтобы каждое прерывание обрабатывало больше пакетов (то есть передавало их в стек OS-IP).

См. Эту ссылку: Настройка параметров коалесценции с помощью ethtool на 10 Гб это то, что я в основном имею в виду.

На снимке экрана с загрузкой процессора показаны 2 потенциальных узких места:

  1. 4 ядра максимально работают с ядром (то есть, вероятно, обработчики прерываний обрабатывают пакеты)
  2. Максимальный выход 1 ядра в основном в пользовательском режиме

Чтобы решить первую проблему:

  • Попробуйте изменить настройки модерации прерывания, в зависимости от ваших драйверов это больше, чем просто включение / выключение, вы можете установить стратегию модерации
  • Попробуйте отключить / включить все функции разгрузки (в вашем случае отключение может быть полезным, чтобы переместить потенциальное узкое место с вашего (одноядерного) сетевого адаптера, на который будут выгружены функции, на ваши (многоядерные) процессоры )
  • Попробуйте включить «Объединение приема» (при получении TCP) и различные функции «Большой прием ...», «Большая передача ...» и т. Д., Которые может предоставить ваш драйвер.
  • Разве вы не можете установить для очередей RSS значение выше 4? Кажется, что используется только один из ваших двух портов (как вы сказали, вы знаете об этом, я предполагаю, что вы установили свой второй порт как минимум на 4 (или 8, не уверен, нужно ли считать HT)
  • Если возможно, увеличьте количество различных используемых портов TCP / UDP или IP-адресов источника / назначения, потому что один кортеж из пяти адресов / портов / протоколов (или трех кортежей адресов / протоколов для трафика, отличного от TCP / UDP) всегда будет иметь переходить к одному и тому же ядру независимо от ваших настроек RSS

Что касается последнего (не зная, какое приложение вы на самом деле используете):

Если это 1 ядро ​​с максимальным выходом в пользовательском режиме указывает на ваше однопоточное (или однопоточное) приложение, оно должно быть

  • фиксированный, или
  • перенастроен (например, увеличьте # рабочих потоков, если возможно), или
  • переработанный

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

Кроме того, поскольку ваше приложение (если это действительно ваше приложение), очевидно, работает на узле NUMA №1, но обработка пакетов ядром выполняется на узле NUMA №0,

  • попробуйте привязать приложение к узлу NUMA # 0

Например. щелкнув правой кнопкой мыши процесс в диспетчере задач, что даст вам возможность изменить это, по крайней мере, в Win2012R2. Я попробовал, и мне это не помогло, но стоит попробовать, так как это может улучшить скорость попадания в кеш.

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