The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Баянище но дико актуально. pcap и потеря пакетов"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (C/C++)
Изначальное сообщение [ Отслеживать ]

"Баянище но дико актуально. pcap и потеря пакетов"  +/
Сообщение от teebot on 13-Сен-12, 12:09 
Здравствуйте.

Когда-то, в 90-х, я увлекался программирование. Что бы не делать перегибов в какую либо сторону скажу что программером я был самым обычным. И вот спустя больше 10 лет. Пришлось вспоминать С.

Теперь к сути дела. Пишу программу которая анализирует SCCP траффик. Все как бы хорошо, но программа теряет пакеты. Сначала я думал что это проблема ИОС циски, что не все пакеты отсылает. Смена ИОСа ничего не дала. Потом я начал оптимизировать код, искать где бы я мог накосячить, плюс искал обходные пути как бы можно было очень интелектуально определять потерю пакета и восстанавливать нормальных ход событий. Результата не принесло. Потом я начал искать в гугуле и обнаружил что это частая проблема когда libpcap теряет пакеты при интенсивном трафике. Разработка ведется на FreeBSD под ней же программка и работает. Из того что мне удалось найти в интернете и попробовать реализовать у себя:
1) Включил в ядре DEVICE_POLLING. На интерфейсе он появился.
2) Реализовал в программе возможность повышения приоритета (realtime scheduling)
3) сделал многопоточность (pthread_create)
4) сделал так, что захваченый пакет просто ложится в память для дальнейшей обработки. Тоесть операция принятия пакета и его сохранения должна проходить моментально так как работа идет с памятью. А дальше потоки уже по мере возможностей записывают даныне в базу.
5) Обновил библиотеку libpcap до последней на момент написания этого поста. Перекомпилил программу. В инете встречал упоминание про какой-то афигенный патч к libpcap. Сам патч не нашел, а вот обновил библотеку в надежде что там уже все последние патчи учтены.
6) делал renice плюс к пункту 2.

Пока наблюдаю за последствиями 5 пунктка, но все остальные усилия результата не принесли. Программа теряет пакеты.

Из того что могу еще сделать остается попробовать поставить прогу на комп с процессором не ниже интела i5. Может быстродействие самого железа решит проблему. Но вот прямо сейчас такой возможности нет.

Посоветуйте что еще можно сделать?
Что-то мне не удалось найти в ядре FreeBSD упоминание о MMAP, хотя говорят что MMAP помогает. Все упоминания преимущественно касаются линукс+MMAP.


Спасибо.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Баянище но дико актуально. pcap и потеря пакетов"  +/
Сообщение от pavel_simple (ok) on 13-Сен-12, 12:33 
>[оверквотинг удален]
> 6) делал renice плюс к пункту 2.
> Пока наблюдаю за последствиями 5 пунктка, но все остальные усилия результата не
> принесли. Программа теряет пакеты.
> Из того что могу еще сделать остается попробовать поставить прогу на комп
> с процессором не ниже интела i5. Может быстродействие самого железа решит
> проблему. Но вот прямо сейчас такой возможности нет.
> Посоветуйте что еще можно сделать?
> Что-то мне не удалось найти в ядре FreeBSD упоминание о MMAP, хотя
> говорят что MMAP помогает. Все упоминания преимущественно касаются линукс+MMAP.
> Спасибо.

под FreeSBD есть замечательный framework -- называется netgraph, вот под него и надо писать -- не под libpcap. http://subnets.ru/blog/?p=1766 как вариант

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Баянище но дико актуально. pcap и потеря пакетов"  +/
Сообщение от teebot on 13-Сен-12, 13:25 
> под FreeSBD есть замечательный framework -- называется netgraph, вот под него и
> надо писать -- не под libpcap. http://subnets.ru/blog/?p=1766 как вариант

не совсем понял. Надо написать свой модуль netgraph или с помощью netgraph создать интерфейс который и слушать через pcap


Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Баянище но дико актуально. pcap и потеря пакетов"  +/
Сообщение от pavel_simple (ok) on 13-Сен-12, 14:04 
>> под FreeSBD есть замечательный framework -- называется netgraph, вот под него и
>> надо писать -- не под libpcap. http://subnets.ru/blog/?p=1766 как вариант
> не совсем понял. Надо написать свой модуль netgraph или с помощью netgraph
> создать интерфейс который и слушать через pcap

оба варианты вполне возможны

1. для ядра писать будет немного дольше и сложнее
2. netgraph может выплюнуть в socket, соответственно с определёнными фильтрами и/или копированием пакетов, а дальше уже дело техники.

google + netgraph + tee + socket

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Баянище но дико актуально. pcap и потеря пакетов"  +/
Сообщение от teebot on 13-Сен-12, 17:07 
>>> под FreeSBD есть замечательный framework -- называется netgraph, вот под него и
>>> надо писать -- не под libpcap. http://subnets.ru/blog/?p=1766 как вариант
>> не совсем понял. Надо написать свой модуль netgraph или с помощью netgraph
>> создать интерфейс который и слушать через pcap
> оба варианты вполне возможны
> 1. для ядра писать будет немного дольше и сложнее
> 2. netgraph может выплюнуть в socket, соответственно с определёнными фильтрами и/или копированием
> пакетов, а дальше уже дело техники.
> google + netgraph + tee + socket

ну что ж.... создал интерфейс ngeth0 он колн интерфейса где идет весь нужный траффик.
посмотрим что будет. :)

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Баянище но дико актуально. pcap и потеря пакетов"  +/
Сообщение от teebot on 13-Сен-12, 17:26 
> ну что ж.... создал интерфейс ngeth0 он колн интерфейса где идет весь
> нужный траффик.
> посмотрим что будет. :)

пока решил так попробовать. А вдруг.

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Баянище но дико актуально. pcap и потеря пакетов"  +/
Сообщение от pavel_simple (ok) on 14-Сен-12, 09:51 
>> ну что ж.... создал интерфейс ngeth0 он колн интерфейса где идет весь
>> нужный траффик.
>> посмотрим что будет. :)
> пока решил так попробовать. А вдруг.

т.е. склонировал интерфейс и по старому на нём pcap'ом слушать??? -- no way

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "Баянище но дико актуально. pcap и потеря пакетов"  +/
Сообщение от teebot on 14-Сен-12, 10:46 
>>> ну что ж.... создал интерфейс ngeth0 он колн интерфейса где идет весь
>>> нужный траффик.
>>> посмотрим что будет. :)
>> пока решил так попробовать. А вдруг.
> т.е. склонировал интерфейс и по старому на нём pcap'ом слушать??? -- no
> way

К сожалению это так. На этот клонированый интерфейс валит только бродкаст. Полезного трафка нет.
Насколько я понимаю суть потери этих пакетов, то потеря происходит после того как пакет пришел на сетевушку, поступил в ядро, ядро положило в буфер. Даже если я сделаю это через сокет всеравно в конечном итоге будет задействован сетевой функционал с этим же буфером. Тоесть проблема не решиться. А вот если написать свой нетграф модуль тогда..... Я буду уже в ядре даже до фаервола получать пакеты. Но как не печально мой уровень скорее всего не позволит написать нетграф модуль.

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "Баянище но дико актуально. pcap и потеря пакетов"  +/
Сообщение от pavel_simple (ok) on 14-Сен-12, 11:14 
>[оверквотинг удален]
>> way
> К сожалению это так. На этот клонированый интерфейс валит только бродкаст. Полезного
> трафка нет.
> Насколько я понимаю суть потери этих пакетов, то потеря происходит после того
> как пакет пришел на сетевушку, поступил в ядро, ядро положило в
> буфер. Даже если я сделаю это через сокет всеравно в конечном
> итоге будет задействован сетевой функционал с этим же буфером. Тоесть проблема
> не решиться. А вот если написать свой нетграф модуль тогда..... Я
> буду уже в ядре даже до фаервола получать пакеты. Но как
> не печально мой уровень скорее всего не позволит написать нетграф модуль.

а udp socket написать сможешь? если да -- то ещё раз в гугл до просветления... хотя может проснётся пресловутое FreeBSD комьюнити и распишет тебе всё что нужно... я к оным слава господи не отношусь

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

9. "Баянище но дико актуально. pcap и потеря пакетов"  +/
Сообщение от teebot on 14-Сен-12, 12:18 
>[оверквотинг удален]
>> Насколько я понимаю суть потери этих пакетов, то потеря происходит после того
>> как пакет пришел на сетевушку, поступил в ядро, ядро положило в
>> буфер. Даже если я сделаю это через сокет всеравно в конечном
>> итоге будет задействован сетевой функционал с этим же буфером. Тоесть проблема
>> не решиться. А вот если написать свой нетграф модуль тогда..... Я
>> буду уже в ядре даже до фаервола получать пакеты. Но как
>> не печально мой уровень скорее всего не позволит написать нетграф модуль.
> а udp socket написать сможешь? если да -- то ещё раз в
> гугл до просветления... хотя может проснётся пресловутое FreeBSD комьюнити и распишет
> тебе всё что нужно... я к оным слава господи не отношусь

UDP смогу. Это без проблем.
Ну ладно, а если это будет линукс. Что можно сделать на нем и без сокетов.
Линукс поставить как два байта переслать. Если с БСД глухой угол - поставлю линукс.

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

10. "Баянище но дико актуально. pcap и потеря пакетов"  +/
Сообщение от Аноним (??) on 15-Сен-12, 00:43 
>>[оверквотинг удален]
>>> Насколько я понимаю суть потери этих пакетов, то потеря происходит после того
>>> как пакет пришел на сетевушку, поступил в ядро, ядро положило в буфер.

Ну дык правильно! И что же тебе надо? Если пакет лежит в буфере - он потерян?

> Линукс поставить как два байта переслать. Если с БСД глухой угол - поставлю линукс.

А давай! Я думаю будет всё тоже :)

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

11. "Баянище но дико актуально. pcap и потеря пакетов"  +/
Сообщение от teebot on 15-Сен-12, 12:59 
> Ну дык правильно! И что же тебе надо? Если пакет лежит в
> буфере - он потерян?

буфер имеет свойство переполняться и тогда пакеты будут просто дропаться.
а еще я читал что ядро не гарантирует доставку пакеты к работающему приложению. Тоесть это свойство самой системы.

Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

12. "Баянище но дико актуально. pcap и потеря пакетов"  +/
Сообщение от Аноним (??) on 16-Сен-12, 01:03 
Чё то чем дальше в лес ...
А ты раз уж libpcap есть не пробовал тупо tcpdump'ом тот же траффик понюхать?
Если оно ловит, значит проблема в твоём костыле. Ясновидящие в отпуске а ты не уточнял что и как ты делаешь. Но надеюсь ты экзамплы внимательно читал и собирал - если нет вначале почитай собери. Потом и свой костыль поправишь. Как то так.

PS: Под Linux то заработало или всё то же?

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

13. "Баянище но дико актуально. pcap и потеря пакетов"  +/
Сообщение от teebot on 17-Сен-12, 15:21 
> Чё то чем дальше в лес ...
> А ты раз уж libpcap есть не пробовал тупо tcpdump'ом тот же
> траффик понюхать?

потеря пакетов случается раз 2-5 часов. поэтому tcpdump пока даже не пробовал включать

> Если оно ловит, значит проблема в твоём костыле. Ясновидящие в отпуске а
> ты не уточнял что и как ты делаешь.

а никто и не интересовался что и как я делаю. раз дают советы значит понимают о чем речь :)

> экзамплы внимательно читал и собирал - если нет вначале почитай собери.
> Потом и свой костыль поправишь. Как то так.

совет какой-то не жизнеспособный.

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру