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

Действительно низкая производительность с 10 Гбит Ethernet в пользовательском приложении

Недавно я установил пару 10-гигабитных карт Ethernet на нескольких машинах, подключенных к локальной сети из примерно 80 стандартных узлов, работающих с распределенной файловой системой (Lustre). Карта 10 Гбит обеспечивает хорошую производительность при файловых операциях и работает должным образом.

Однако я написал собственное клиентское приложение на языке C, которое асинхронно отправляет большие блоки данных на несколько узлов в сети. Машина, на которой работает клиентское приложение, имеет карту Ethernet 10 ГБ, а все конечные узлы имеют карту Ethernet 1 ГБ, поэтому я должен иметь возможность получить теоретическую максимальную скорость передачи 10 ГБ.

Если я запускаю клиентское приложение на машине с 1 Гбит картой, оно легко загружает карту на длительное время. Но, как ни странно, если я запускаю то же приложение на машине с 10-гигабитной картой, производительность оказывается ужасной (около 20-30 Мбит / с).

Программа написана на C с использованием обычных сокетов TCP. Требуются ли какие-то специальные настройки для 10 Гбит? Потому что очень странно, что он обеспечивает максимальную производительность на карте 1 Гбит, но ужасную производительность на карте 10 Гбит. Опять же, проблема не в самой карте 10 Гбит, поскольку распределенная файловая система (Lustre) дает хорошую производительность с картой 10 Гбит.

Есть идеи / предложения?

Одна вещь, которую я заметил в качестве проблемы между сегментами LAN 10 ГБ и 1 ГБ, заключается в том, что MTU по умолчанию отличается. Ethernet 10 ГБ использует MTU по умолчанию 9000 в отличие от значения по умолчанию 1500 для Ethernet 1 ГБ. Вы можете либо изменить свой MTU на 10g на меньшее значение, либо настроить маршрутизатор на обработку разбивки больших пакетов за вас.

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

Очень вероятно, что написанное вами приложение не соответствует оптимизациям ввода-вывода стандартных приложений, таких как Lustre.

Узкие места производительности в вашем коде могут не проявляться на машине и ОС с картой 1 Гбит / с, но когда пропускная способность карты увеличивается до 10 Гбит / с при постоянных всех остальных параметрах (аппаратное обеспечение и ОС), ограничения вашего кода становятся заметными.


Это цитата из Википедии. Реализация блеска раздел.

В типичной установке Lustre на клиенте Linux модуль драйвера файловой системы Lustre загружается в ядро, и файловая система монтируется как любая другая локальная или сетевая файловая система. Клиентские приложения видят единую унифицированную файловую систему, даже если она может состоять из десятков и тысяч отдельных серверов и файловых систем MDT / OST.

На некоторых установках с массовым параллелизмом (MPP) вычислительные процессоры могут получить доступ к файловой системе Lustre, перенаправляя свои запросы ввода-вывода на выделенный узел ввода-вывода, настроенный как клиент Lustre. Этот подход был использован в установке LLNL Blue Gene.

Вы используете эту часть?

Другой подход использует библиотеку liblustre, чтобы предоставить приложениям пользовательского пространства прямой доступ к файловой системе.

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

MTU будет важен для согласования интерфейсов.

Убедитесь, что у вас включена аппаратная разгрузка TCP (если она работает). И что прошивки на всех ваших сетевых адаптерах обновлены, так как TOE на некоторых сетевых адаптерах сильно поврежден при поставке. Я бы протестировал с включением и выключением TOE, TSO и т. Д. И посмотрел, имеет ли это какое-либо значение.

Вы используете Broadcomm 10G Ethernet, поскольку мы обнаружили реальные проблемы с ними.

Вы проверяли свою сеть с помощью тестера lnet?

Сколько у вас OSS и какую пропускную способность вы получаете через файловую систему?