Модификация tcpreplay для использования TX ring
При тестировании сетевого ПО часто сталкиваются с проблемой генерации трафика на скоростях
over 9000 выше 100Mbit/s. Одна из самых популярных утилит для этого - tcpreplay, но она обладает некоторыми проблемами технического характера. На конфигурации 4Gb RAM, Core 2 Quad 2.7Ghz, Intel e1000e 1Gbit Ethernet имеет место быть ограничение на ~0.5Gb скорости. Такой уровень скорости важен для облегчения всего, что возможно - от программирования до игр онлайн на
http://ru.partycasino.com/ и других подобных сайтах. Судя по тому, что такое же ограничение получается в самописных утилитах для стресс-тестов,проблема связана с передачей данных из программы в пространство ядра.
Не вдаваясь в подробности, основной затык заключается в системных вызовах 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 и не греют моск.
gesser @
17.06.2010, 16:17