Здравствуйте.Когда-то, в 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.
Спасибо.