Оценка производительности графов Netgraph. На примере возможных схем анализа трафика, средствами ng_netflow.

Опубликовано admin в Чт, 21/10/2010 - 12:27
В данном документе приведена простейшая методика оценки производительности графов Netgraph на примерах "сбора" трафика, проходящего в обоих направлениях, через интерфейс.

Большая часть схем представляет лишь теоретические изыскания и не испытывалась на практике.
Для анализа схем используются примитивные представления о зависимости производительности системы от количества узлов в графе.
Для упрощения, при анализе не учитывается внутреннее устройство подсистемы Netgraph и отдельных узлов.

Условные обозначения:
  • Длина графа - количество узлов, через которые проходит каждый пакет, по пути через netgraph.
    Для нивелирования схем узел em0: учитываться не будет.
    Предполагается, что чем длиннее граф, тем больше ресурсов затрачивается на прохождение каждого пакета.

  • Количество операций копирования и перенаправления данных - показывает количество соответствующих операций затрачиваемых при прохождении через граф.
    Чем больше операций копирования и перенаправления, тем тем больше ресурсов затрачивается при прохождении через граф. Однако, перенаправление менее ресурсоемко в сравнении с копированием.
    Для упрощения, внутренне устройство узлов, рассматриваться не будет.
    Копирование лишь подразумевает, что после прохождения узла создается 2 и более копии данных.
    Перенаправление - обозначает, лишь то, что количество экземпляров данных остается прежним.
Узел ng_netflow имеет 3 типа хуков: ifaceX, outX, export
При прохождении пакета в направлении ifaceX - outX, анализируются заголовки пакета. Информация о пакете заносится функцией hash_insert() в hash-таблицу. При достижении определенных условий функция export_send() формирует пакет netflow и отравляет в хук export.

Однако, при нормальных условиях, количество пакетов отправляемых в хук export значительно меньше количества пакетов, проходящих через узел в направлении ifaceX - outX. Таким образом, вкладом export_send() можно пренебречь.
Можно считать, что производится лишь операция перенаправления.

При прохождении пакета в направлении outX - ifaceX, данные сразу перенаправляются в хук ifaceX.

Таким образом, при прохождении трафика через узел ng_netflow производится
0 операций копирования
1 операция перенаправления данных.
Узел ng_one2many может работать в 2-х режимах:
XMIT_ALL - пакет приходящий на хук one перенаправляется в один из хуков many, в остальные доставляется копия.

XMIT_ROUNDROBIN - выбор хука many производится последовательным перебором всех хуков manyX. Таким образом, в этом случае делается лишь одна операция перенаправления.XMIT_ROUNDROBIN является поведением по умолчанию.

Пакеты, приходящие на любой из хуков manyX, в обоих случаях перенаправляются в хук one.


Пакеты приходящие на любой из хуков узла ng_hub перенаправляются в один из хуков, в остальные доставляется копия.
  • Длина графа при движении от em0:lower к em0:upper составляет 3 узла: tee - one2many - netflow
  • При этом делается 1 операция копирования и 2 перенаправления данных.
  • При движении в обратном направлении длина графа и количество операций копирования и перенаправления не изменяется.
Код к схеме 1:

ngctl -f- <<-SEQ
    mkpeer em0: tee lower left
    name em0:lower tee
    connect tee: em0: right upper

    mkpeer tee: one2many left2right many0
    name tee:left2right one2many
    connect tee: one2many: right2left many1

    mkpeer one2many: netflow one iface0
    name one2many:one netflow

    mkpeer netflow: ksocket export inet/dgram/udp
    name netflow:export ksocket
    msg ksocket: connect inet/10.0.0.1:4444
SEQ

  • Длина графа при движении от em0:lower к em0:upper составляет 2 узла: tee - netflow
  • При этом делается 1 операция копирования и 1 перенаправления данных.
  • При движении в обратном направлении длина графа и количество операций копирования и перенаправления не изменяется.
Код к схеме 2:

ngctl -f- <<-SEQ
    mkpeer em0: tee lower left
    name em0:lower tee
    connect tee: em0: right upper

    mkpeer tee: netflow left2right iface0
    name tee:left2right netflow
    connect tee: netflow: right2left iface1

    mkpeer netflow: ksocket export inet/dgram/udp
    name netflow:export ksocket
    msg ksocket: connect inet/10.0.0.1:4444
SEQ

  • Длина графа при движении от em0:lower к em0:upper составляет 3 узла: split0 - netflow - split1
  • При этом делается 3 операции перенаправления данных.
  • При движении в обратном направлении длина графа и количество операций копирования и перенаправления не изменяется.
Код к схеме 3:

ngctl -f- <<-SEQ
    mkpeer em0: split lower mixed
    name em0:lower splitlow

    mkpeer split0: netflow  out iface0
    name split0:iface0 netflow
    connect netflow: split0: out1 in

    mkpeer netflow: split iface1 out
    name netflow:out split1
    connect split1: netflow: in out0

    connect split1: em0: mixed upper

    mkpeer netflow: ksocket export inet/dgram/udp
    name netflow:export ksocket
    msg ksocket: connect inet/10.0.0.1:4444
SEQ

  • Длина графа при движении от em0:lower к em0:upper составляет 2 узла: hub - netflow
  • При этом делается 1 операция копирования и 1 перенаправления данных.
  • При движении в обратном направлении длина графа и количество операций копирования и перенаправления не изменяется.
Код к схеме 4:

ngctl -f- <<-SEQ
    mkpeer em0: hub lower hook0
    name em0:lower hub
    connect hub: em0: hook1 upper

    mkpeer hub: netflow hook2 iface0
    name hub:hook2 netflow

    mkpeer netflow: ksocket export inet/dgram/udp
    name netflow:export ksocket
    msg ksocket: connect inet/10.0.0.1:4444
SEQ

  • Длина графа при движении от em0:lower к em0:upper составляет 2 узла: netflow0 - netflow1
  • При этом делается 2 операции перенаправления данных.
  • При движении в обратном направлении длина графа и количество операций копирования и перенаправления не изменяется.
Код к схеме 5:

ngctl -f- <<-SEQ
    mkpeer em0: netflow lower iface0
    name em0:lower netflow0

    mkpeer netflow0: netflow out0 out0
    name netflow0:out0 netflow1

    connect netflow1: em0: iface0 upper
    mkpeer netflow0: one2many export many1
    name netflow0:export one2many
    connect netflow1: one2many: export many0

    mkpeer one2many: ksocket one inet/dgram/udp
    name one2many:one ksocket
    msg ksocket: connect inet/10.0.0.1:4444
SEQ

  • Длина графа при движении от em0:lower к em0:upper составляет 3 узла: netflow - hub - netflow
  • При этом делается 3 операции перенаправления данных.
  • При движении в обратном направлении длина графа и количество операций копирования и перенаправления не изменяется.
Код к схеме 6:

ngctl -f- <<-SEQ
    mkpeer em0: netflow lower iface0
    name em0:lower netflow

    mkpeer netflow: hub out0 hook0
    name netflow:out0 hub

    connect hub: netflow: hook1 out1
    connect netflow: em0: iface1 upper

    mkpeer netflow: ksocket export inet/dgram/udp
    name netflow:export ksocket
    msg ksocket: connect inet/10.0.0.1:4444
SEQ

  • Длина графа при движении от em0:lower к em0:upper составляет 2 узла: netflow - netflow
  • При этом делается 2 операции перенаправления данных.
  • При движении в обратном направлении длина графа и количество операций копирования и перенаправления не изменяется.
Код к схеме 7:

ngctl -f- <<-SEQ
    mkpeer em0: netflow lower iface0
    name em0:lower netflow
    connect netflow: em0: iface1 upper

    connect netflow: netflow: out0 out1

    mkpeer netflow: ksocket export inet/dgram/udp
    name netflow:export ksocket
    msg ksocket: connect inet/10.0.0.1:4444
SEQ

Приведенный метод анализа позволяет простыми средствами оценить ресурсоемкость графа Netgraph.
Исходя из изложенных соображений

Схемы 2 и 4 равнозначны.
Схемы 3 и 6 равнозначны.
Схемы 5 и 7 равнозначны.

Схема 1 должна быть наименее производительной.
Схемы 5 и 7 должны быть наиболее производительными.

В документе использовались материалы с других сайтов:

Схема 1 составлена по материалам с сайтов:
www.mp.kiev.ua (_http://www.mp.kiev.ua/weblog/message/406/)
www.unix.lviv.ua (_http://www.unix.lviv.ua/content/view/33/27/)

Схема 2 составлена по материалам с сайтов:
www.bsdportal.ru (_http://www.bsdportal.ru/viewtopic.php?t=12163)
www.opennet.ru (_http://www.opennet.ru/openforum/vsluhforumID1/71045.html#1)


Copyright © 2008, Евгений Мычло
Разрешается копирование материалов статьи с обязательным указанием ссылки на оригинал.


В случае обнаружения неточностей, ошибок и опечаток в данной публикации, просьба сообшить мне по адресу myc A barev.net




Статья взята с http://tmp.barev.net (_http://tmp.barev.net/htmlart/unix/pres-ngnetflow.xml)