LINUX.ORG.RU

[pcap]О потере пакетов

 


0

1

Встала задача написания l7 сниффера для аналитики и QOS траффика.
Используемая библиотека будет pcap(альтернативу я покамесь не вижу)
Поток который будет анализироваться примерно 350 мбит/сек и 4000 флоу в сек.

1.Не могу лишь понять - насколько существенна проблема потеря pcap пакетов при нагрузке?
2.Если она есть - то в чем ее фундаментальная причина?

★★★★★

350 мбит/сек

Канала памяти не хватит, чтобы такой поток гнать с карты, обрабатывать его и ещё вся остальная система работала.

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

>Канала памяти не хватит, чтобы такой поток гнать с карты, обрабатывать его и ещё вся остальная система работала.

Вроде канал в серверных платформах должно с головой хватать?
Если не так то как тогда в cisco sce это все тянеться ?

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

Вроде канал в серверных платформах должно с головой хватать?

Серверные платформы от домашних ноутбуков в плане скорости работы с памятью не очень сильно отличаются. Я не знаю, что такое cisco sce, но если это спец.железка (а не x86), то на то она и спец.железка.

libpcap сокет просто в raw-режиме открывает, что позволяет миновать netfilter, но с копированиями карта->ядро->юзерспейс он ничем не поможет. Юзерспейс->ядро->юзерспейс - переключения контекста, которые хоть и подешевели, но ещё совсем не бесплатные. Копирования непоследовательные и короткие, значит, память будет работать на скорости далеко от пиковой. Куча копирований одних и тех же данных на разных уровнях, значит, дели пропускную способность памяти на N.

Кроме того, проц будет синхронизировать кэш с памятью, дели ещё на два.

А ещё с принимаемыми данными ведь надо что-то делать, обрабатывать, вести статистику, etc...

x86 для high throughput совсем не годится. Особенно, если в качестве сетевой железки используется обычный ширпотреб с обычными драйверами.

mv ★★★★★
()

Проблем в данном случае много. pcap сильно в кастомных случаях сможет справляться(у меня получалось pcap-ить 320Мбит, хотя можно было подоптимайзит и дотянуть думаю до 380-400), в общем случае нет.

Jetty ★★★★★
()

2.Если она есть - то в чем ее фундаментальная причина?

Фундаментальная причина в том, что raw-сокет (который используется в недрах libpcap) не может препятствовать прохождению пакетов через сетевой интерфейс. Так что как только скорость потока пакетов превзойдёт производительность механизма, снифающего трафик (сокет в ядре, интерфейс ядро -> юзерспейс и собственно сама программа + libpcap), часть пакетов просто перестанет попадать в буфер raw-сокета, так как он будет переполнен.

Deleted
()
Ответ на: комментарий от Jetty

libpcap воде уже научилась через libnfqueue работать и тянуть данные в юзер спейс без копирования керне-> юзер. На сколько x86 справился тоже сложно сказать. И сильно зависит от того как фильтр pcap настроен. Скорее всего весь трафик именно не нужен, а нужна какая-то часть. Например входящий http. Тогда это можно соптимизировать.

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

изначально это и делалось через патченый pcap.
Пару лет назад я гонял тесты на 500-700 Мбитах... С тех пор много что изменилось :)

Jetty ★★★★★
()

на мой взгляд в данном случае pcap излишен. Достаточно QUEUE (если надо пакеты возвращать обратно) или ULOG (если только считать/анализировать). Прелесть pcap в фильтрах, возможности сохранять и воспроизводить поток, а вам эти фичи ненужны. А без них - это просто обёртка со значительным лишним оверхедом.

Не могу лишь понять - насколько существенна проблема потеря pcap пакетов при нагрузке?

Она есть и этого достаточно

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

лучше написать модуль для NF который будет делать предобработку на месте, а в юзерспейс отсылать только агрегированные данные

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

>Проблем в данном случае много. pcap сильно в кастомных случаях сможет справляться(у меня получалось pcap-ить 320Мбит, хотя можно было подоптимайзит и дотянуть думаю до 380-400), в общем случае нет.

Что за кастомный случай был,можешь поподробней?

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

>Копирования непоследовательные и короткие, значит, память будет работать на скорости далеко от пиковой. Куча копирований одних и тех же данных на разных уровнях, значит, дели пропускную способность памяти на N.

Про это я как то подзабыл(да и там будет хуже чем делить на N)

Я не знаю, что такое cisco sce, но если это спец.железка (а не x86), то на то она и спец.железка.


Здесь мне могут достать только тысячную версия а там тока до 1 гига держит - http://www.cisco.com/en/US/products/ps6151/index.html

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

>на мой взгляд в данном случае pcap излишен. Достаточно QUEUE (если надо пакеты возвращать обратно) или ULOG (если только считать/анализировать). Прелесть pcap в фильтрах, возможности сохранять и воспроизводить поток, а вам эти фичи ненужны. А без них - это просто обёртка со значительным лишним оверхедом.

А разве в ulog будет падать сам raw пакет для его последущей обработке?

(Сейчас просто система работает на анализе NetFLow и там не хватает возможности заглянуть в сам пакет чтобы по более умному его анализировать и отправить в соответсвующию очередь обслуживания)

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

>изначально это и делалось через патченый pcap.
Пару лет назад я гонял тесты на 500-700 Мбитах... С тех пор много что изменилось :)

А на сколько это лучше архитектурно чем pcap(просто мне это некоторые джедаи советовали посмотреть) -
http://www.ntop.org/PF_RING.html ?

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

>часть пакетов просто перестанет попадать в буфер raw-сокета, так как он будет переполнен.

А как в линуксе это посмотреть что происходит переполнение(только врублением всего сетевого в режиме глубоко дебага?) или какая часть инфы будет и так экспортироваться?

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

>лучше написать модуль для NF который будет делать предобработку на месте, а в юзерспейс отсылать только агрегированные данные

Сложноватенько это все честно говоря будет и времени больше чем надо будет займет(я хочу на постобработке сосредоточиться а не на механизмах копирования и тд и тп)

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

Сейчас уже не расскажу во всех деталях, но это было кастрированное ядро+ заточка под конкретную аппаратную платформу. Если это так сильно нужно, могу поискать в архивах какие-то наработки... Но вообщем-то посля этого «костыльного» решения как раз и был найден пф-ринг, который решал те же задачи но быстрее и лучше :) :)

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

А разве в ulog будет падать сам raw пакет для его последущей обработке?

да. С некоторыми ограничениями. Не попадает канальный уровень

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

>да. С некоторыми ограничениями. Не попадает канальный уровень

Oк. Мне нужно подсчитать сколько флоу жило по времени и длина тср и bpp.
А есть ли аналог в ФриБСД?

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

>Но вообщем-то посля этого «костыльного» решения как раз и был найден пф-ринг, который решал те же задачи но быстрее и лучше :) :)

А он щас что у тебя делает(какие нагрузки и тд) ?

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

Процессор VIA C3, тактовая частота вроде 600Mz. Поток 40 - 60 мбит, захватывали только первые 40 байт пакета. Точно не помню, давно было.

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

>Процессор VIA C3, тактовая частота вроде 600Mz. Поток 40 - 60 мбит, захватывали только первые 40 байт пакета. Точно не помню, давно было.

Железка очень слабая для таких вещей + там сетувшка никакой из видов offloading не держит.

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

Для примитивных вещей pcap'а достаточно. Для больших нагрузок, и bpf не нужен :) Я так щитаю :) Но признаюсь сразу что с bpf дела не имел...

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