![]() |
Модераторы: feodorv |
![]() ![]() ![]() |
|
boriska98 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 28.12.2012 Репутация: нет Всего: нет |
всем привет!
По ethernet сети приходят пакеты (raw), поток примерно 400 кБайт/с. Требуется осуществить их прием и обработку. Кто знает как добиться МИНИМУМА загрузки CPU и потерь пакетов. p.s. libpcap не подходит, т.к. сильно грузит процессор Это сообщение отредактировал(а) boriska98 - 21.1.2013, 08:24 |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 10 Всего: 45 |
Вам нужны пакеты прямо с ethernet-заголовком? Если просто IP, то можно попробовать перевести интерфейс в promiscuous mode с помощью опции SIO_RCVALL (например, например). Это сообщение отредактировал(а) feodorv - 21.1.2013, 09:50 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
boriska98 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 28.12.2012 Репутация: нет Всего: нет |
так и делается. я не точно выразился: не то, чтобы pcap грузит процессор, но много процессорного времени тратится вхолостую. вот пример реализации:
|
||||
|
|||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 10 Всего: 45 |
В каком смысле? Добавлено через 2 минуты и 39 секунд Я, честно говоря, плохо знаком с библиотекой libpcap, но, вроде, вызов не должен переводить интерфейс в promiscuous mode... -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
boriska98 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 28.12.2012 Репутация: нет Всего: нет |
||||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 10 Всего: 45 |
Насколько я знаю, в систему устанавливается специальный драйвер, и вся работа libpcap идёт через этот драйвер.
В принципе, должно уведомляться. А что, pcap_next периодически возвращает NULL? -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
fish9370 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 663 Регистрация: 15.4.2007 Где: Москва Репутация: нет Всего: 1 |
прежде всего нужно понимать, где работает эта библиотека (kernel mode/user mode).. так как она работатет в user mode, она физически не может опрашивать оборудование, это и не эффективно.. все происходит примерно так: - сетевой адаптер получает порцию данных записывает ее в один из доступных буферов.. - сигнализирует микропроцессору с помощью механизма прерываний, о том что произошло событие.. - микропроцессор замораживает выполнение текущего процесса (в случае если прерывания не были запрещены) и передает управление на соответствующий обработчик прерывания, установленный операционной системой.. - обработчик выполняет копирование данных в user mode и информирует другие подсистемы о том, что пришли данные - одной из таких заинтересованных подсистем оказывается libbpcap, вот тут он и вступает в игру если осуществлять фильтрацию пакетов (и возможно другие действия) на уровне ядра, до какого либо копирования, то можно выиграть в производительности подсистемы.. так работает iptables.. если задача стоит в выигрыше производительности, то такой механизм существует (но сейчас не помню как это все называется, если будут заинтересованные - найду и укажу источник) -------------------- undefined |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |