8 июля 2012 г.

ClusterGen: Кластерный генератор трафика.

Доброго времени суток,

я хочу рассказать о проекте, над которым сейчас работаю в компании Мера. Проект называется 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-мегабитными сетевыми картами, можно добиться в сумме очень высокой интенсивности трафика, сравнимой с той, которую могут выдавать аппаратные генераторы.

Продолжение следует.

Литература

  1. [Olsson] Proceedings of the Linux Symposium. Volume Two. Robert Olsson. "pktgen the linux packet generator". Canada. 2005.
  2. [Turull] Daniel Turull. Open Source Traffic Analyzer. Stockholm, Sweden. 2010.