LINUX.ORG.RU

TX ring для отправки данных. Патчим tcpreplay.


0

0

При тестировании сетевого ПО часто сталкиваются с проблемой генерации трафика на скоростях over 9000 выше 100Mbit/s. Одна из самых популярных утилит для этого - tcpreplay, но она обладает некоторыми проблемами технического характера. На конфигурации 4Gb RAM, Core 2 Quad 2.7Ghz, Intel e1000e 1Gbit Ethernet имеет место быть ограничение на ~0.5Gb скорости. Судя по тому, что такое же ограничение получается в самописных утилитах для стресс-тестов,проблема связана с передачей данных из программы в пространство ядра.

Не вдаваясь в подробности, основной затык заключается в системных вызовах send(). Уменьшить их количество позволяет настоящая тру-джедайская магия TX ring

Данный API был доступен в виде патча ядра достаточно давно, но лишь с 2.6.31 ядра его включили в основную ветку ядра Linux.

Я модифицировал tcpreplay, заставив его использовать TX ring для отправки данных. В итоге был преодолён барьер в 500Mbit и почти достигнут 1Gb. Патч брать тут

Важно! TX ring работает с ванильным ядром начиная с версии 2.6.31. Хотя в 2.6.34-1 попытка использовать TX ring оборачивается неадекватными записями в логах ядра и кернел паником (брал сборку из debian experimental), впрочем ядро ещё молоденькое, ему можно. Более младшие версии надо отдельно патчить и компилять самостоятельно. Фанаты Gentoo радуются, все остальные ставят 2.6.32 и не греют моск.

Оригинал статьи


это означает что не только в тестилках не достигалась возможность достижения максимальной скорости передачи данных по Ethernet а вообще при передаче данных в Linux?

tommy ★★★★★ ()
Ответ на: комментарий от tommy

Если речь идёт проприложение, которое шлёт данные из userspace'а тупо через вызов send() в одном потоке, то да. Возможно, при специфическом тюнинге системы или использование каких-нибудь других технологий отправки (например, несколько неблокирующих сокетов с принудительно увеличенным линейным буфером отправки - и всё это в нескольких потоках) проблема преодолима. Но имхо tx ring наиболее изящное решение из всех теоретически возможных.

neper ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.