Доброго времени суток,
я хочу рассказать о проекте, над которым сейчас
работаю в компании Мера. Проект называется ClusterGen. Репозиторий
ClusterGen'а находится на SourceForge, исходный код доступен под
свободной лицензией GNU GPLv3.
http://sourceforge.net/projects/clustergen/
Цель проекта - разработать свободный инструмент для тестирования
узлов компьютерной сети под нагрузкой. По сути, речь идёт об ещё
одном генераторе трафика, но с рядом интересных возможностей. Далее
я постараюсь объяснить, что это за возможности и как их можно
применить на практике.
Для начала - что же из себя представляет генератор трафика? Это
некий узел в сети, который может генерировать пакеты (например, TCP-
или UDP-пакеты) с заданной конфигурацией. Этим узлом может быть
специальная (и очень дорогая) железка, или же специальное
программное обеспечение, работающее на обычном
компьютере. Рассмотрим преимущества и недостатки каждого из
вариантов.
Первый (аппаратный) вариант генератора позволяет генерировать
пакеты очень быстро (т.е. добиться высокой интенсивности трафика),
благодаря реализации большей части функций "в железе". Недостатки
такого способа - высокая стоимость оборудования и недостаточная
гибкость (что является следствием аппаратной реализации).
Эффективность второго (программного) варианта ниже, чем аппаратной
реализации, и сильно зависит от того, где находится процесс,
генерирующий трафик - в пространстве пользователя или в пространстве
ядра операционной системы. [Turull] Очевидно, что чем ближе к
аппаратной части ПК находится генератор, тем меньше требуется
накладных расходов на генерацию каждого пакета, и тем выше
эффективность генератора. Поэтому генераторы, работающие в
пространстве пользователя (проще говоря, как обычные
пользовательские процессы) не могут генерировать пакеты с той же
скоростью, что генераторы, расположенные в пространстве ядра.
И тут внезапно оказывается, что в ядре Linux уже много лет как есть
эффективный генератор трафика, под названием pktgen. Этот генератор
может быть либо вкомпилирован в ядро при сборке, либо подключаться
"на лету" как модуль.
Управление pktgen'ом осуществляется через файловую систему procfs,
путём операций записи в файлы и чтения из файлов в
каталоге /proc/net/pktgen. Для упрощения процесса настройки
генератора и получения от него статистики, автор pktgen'а предлагает
использовать bash-скрипты. [Olsson]
Таким образом, pktgen превращает обычный компьютер под
управлением GNU/Linux в генератор трафика. Но чтобы использовать
этот генератор как полноценный инструмент для тестирования узлов
компьютерной сети, нужно немного больше, а именно: удобный интерфейс
управления, способ сбора и отображения статистики. Эти задачи решает
ClusterGen. Он позволяет контролировать pktgen, собирать статистику
и отображать её в виде графика.
Основная идея, которая стоит за разработкой ClusterGen'а -
скоординировав работу генераторов на нескольких дешёвых ПК под
управлением GNU/Linux со 100-мегабитными сетевыми картами, можно
добиться в сумме очень высокой интенсивности трафика, сравнимой с
той, которую могут выдавать аппаратные генераторы.
Продолжение следует.
Литература
- [Olsson] Proceedings of the Linux Symposium. Volume Two.
Robert Olsson. "pktgen the linux packet generator". Canada. 2005.
- [Turull] Daniel Turull. Open Source Traffic Analyzer. Stockholm, Sweden. 2010.