| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > Оптимизация времени выполнение маленького цикла |
| Автор: Step 2.1.2009, 01:47 | ||
| Имеем вот такой циклик, который умудряется обрабатывать порядка 2863311 пакетов в секунду единственное, что меня не устраивает что данный код практически полностью загружают процессор
принимаю любые идеи по оптимизации |
| Автор: vinick 2.1.2009, 12:11 | ||
По идее select может снизить нагрузку на процессор, но в этом случае я не уверен.
сам цикл имеет смысл заменить на memset, и в массиве counter_packet_size - всегда используется только один элемент, обнулять его потом целиком нет смысла,да и вместо самого массива дешевле отправлять только одно значение (rec>>6)&0x00ff, но это потребует изменения принимающей стороны. Еще, может быть объединить все три массива в один и отправлять одним вызовом sendto. |
| Автор: MAKCim 2.1.2009, 12:53 |
| Step, 1. концептуальная оптимизация - использование отображения пакетов на кольцевой буфер через mmap ну и мультиплексация через epoll это позволит уменьшить количество вызовов recvfrom подробнее в linux/Documentation/networking/packet_mmap.txt 2. фильтрация на уровне сниффера достаточо при создании пакетного сокета указать третьим параметром htons(ETH_P_IP) Добавлено @ 12:59 vinick,аз memset - это тоже цикл, хоть и оптимизированный что касается sendto, то он вызывается по таймауту, а таймаут отсчитывается по секундам (используется time(NULL)), поэтому sendto вызывается не чаще 1-го раза в секунду а т. к за одну секунду приходит больше 2-х миллионов пакетов, то оптимизировать это не имеет никакого смысла |
| Автор: Step 2.1.2009, 18:09 |
| MAKCim, спасибо, вы бы не могли пояснить в двух словах 1. "позволит уменьшить количество вызовов" я не совсем понял, за счет чего, мне нужно обрабатывать каждый пакет, приведенная схема обработки это только начало 2. htons(ETH_P_IP) в двух словах что это чего я себя лишаю, и что преобретаю |
| Автор: Step 2.1.2009, 19:39 | ||||
т.е. если я правильно понял, мы в этом случае работаем напрямую с буфером приема сетевой карты, избавляем себя от целого ряда ненужных операций Добавлено через 1 минуту и 15 секунд
|
| Автор: MAKCim 2.1.2009, 19:48 | ||||
а, ну если нужно, тогда нужно я просто по коду смотрел там только на IP проверка
напрямую с буфером мы не работаем но от целого ряда ненужных операций себя избавляем |