Перейти до

Traffcounter


Рекомендованные сообщения

#define FLUSH_TIME (10)

#define REMOVE_TIME (15)

 

FlushAndRemove() packets: 35053(rem 10738) ip2packets: 61106(rem 18476)

 

если массив ip2packets содержит более 70К (может и боелее, в выводе не видел значения выше 70К) элементов поток зависает.

какова причина ? на сколько помню размер массива в Cи не ограничен. как победит траблу?

Ссылка на сообщение
Поделиться на других сайтах

Во первых, размер массива в С ограничен доступной памятью.

Во вторых, тут не С а С++.

В третьих, тут не массив а std::map.

Но наблюдение, несомненно, интересное...

Ссылка на сообщение
Поделиться на других сайтах

что имеется в виду под совпадением ?

а проблема есть и остается. достаточо увеличить #define REMOVE_TIME (15) и тут же попадаем на зависание потока.

Ссылка на сообщение
Поделиться на других сайтах

Ураа !! наконец-то кто-то взялся за Traffcounter !!

;)

как показывали эксперементы у меня, именно в нем есть зацикливание и повышение нагрузки на проц.

Ссылка на сообщение
Поделиться на других сайтах

тебе скорей всего поможет

user.cpp
-lastWriteStat = stgTime + random() % settings->GetStatWritePeriod();
+lastWriteStat = stgTime + settings->GetStatWritePeriod();

если поток не слишком велик

Ссылка на сообщение
Поделиться на других сайтах
тебе скорей всего поможет

user.cpp
-lastWriteStat = stgTime + random() % settings->GetStatWritePeriod();
+lastWriteStat = stgTime + settings->GetStatWritePeriod();

....

 

Спасибо, это реализовано давно, чтоб поток не затыкался и все не вставало колом:

 

#define FLUSH_TIME (3)

#define REMOVE_TIME (5)

 

понимаю что мало и неправильно но .. как-то работает, пока ...

косяки где-то глубже, в идеологии сбора траффа + накопления детайл стат ...

Ссылка на сообщение
Поделиться на других сайтах

Проблема трафкаунтера сейчас в том, что при любых операциях с деревом пакетов все действия блокируются. Так, например, как уже было верно подмечено den68, при FlushAndRemove лочится прием трафика. И наоборот - при приеме лочится FlushAndRemove.

Решается эта проблема введением 2-х промежуточных буферов: на прием пакета и на его отдачу юзеру. При этом функции FlushAndRemove делегируются либо классу USER либо классу USERS.

Этот вариант решения мы с Борей обсуждали на прошлой неделе. Сейчас он в процессе проектирования. Изменений все-таки надо будет много сделать.

Кроме того я хочу полностью "отвязать" TRAFFCOUNTER от юзеров и от захватчика трафика - чтобы на него можно было написать нормальный юнит-тест. Кому интересно - могу дать текущие исходники того, что я хочу реализовать. Ели бы у нас не лежал основной канал в инет - можно было бы попробовать реализовать это вместе, используя CVS.

Ссылка на сообщение
Поделиться на других сайтах

Если нет - то я и сам справлюсь. Правда это будет несколько медленно - занимаюсь проблемой по вечерам...

Да и вобще, OpenSource-проекты всегда развивали энтузиасты, а не наемные работники :rolleyes:

Ссылка на сообщение
Поделиться на других сайтах
Кому интересно - могу дать текущие исходники того, что я хочу реализовать. Ели бы у нас не лежал основной канал в инет - можно было бы попробовать реализовать это вместе, используя CVS.

 

Давай, попробую с радостью поучаствовать, правда время не вагон ...

Ссылка на сообщение
Поделиться на других сайтах
  • 1 month later...
  • 1 month later...

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...