Jump to content

madf

Сitizens
  • Posts

    4,122
  • Joined

  • Last visited

  • Days Won

    22

Everything posted by madf

  1. Помозговали немного... Вот что пока придумалось (faust - я): По поводу протокола: если бы мы знали как его ускорить - думаешь, не ускорили бы? Точнее идеи по этому поводу есть, но в твоем случае это не поможет. У тебя для каждого юзера: - делается форк; - открывается TCP-сокет; - шифруется и отправляется XML; - принимается, дешифруется и разбирается XML; - закрывается сокет; - делается форк; - открывается TCP-сокет; - создается, шифруется и отправляется XML размером побольше; - принимается, дешифруется и разбирается XML; - закрывается сокет. Как думаеш, будет такая схема быстро работать? Конвертор в любом случае быстрее.
  2. И сам запутался и меня запутал. Вот смотри: (gdb) r Starting program: /data1/admin/Distr/stg-2.404.9.7/projects/convertor/convertor Тут ты запустил его без указания конфига. По этому он взял его из стандартного места: ./convertor.conf Код ниже показывает, что источником данных послужила пустая дэфолтная база. (gdb) r ./ Starting program: /data1/admin/Distr/stg-2.404.9.7/projects/convertor/convertor ./ Тут ты запускаеш его с явным указанием конфига. Да, это уже моя ошибка была, т.к. сам конфиг не указан - указан только путь к нему. Но в отличие от stargazer он не ищет файл с конфигом по указанному пути, а ищет указанный файл. Такой файл не может быть открыт и в нем, соответственно, отсутствует параметр ModulesPath. Далее, по поводу данных. Конвертор не изобретает ничего нового. Внутри него нет никаких стандартных данных. Он берет данные из Source и переносит их в Dest.
  3. Ну я скрипта не видел... Но вобщето протокол конфигуратора достаточно медленный Почему конвертор не заюзал?
  4. 2Silitra: Вот буфер: map<RAW_PACKET, PACKET_EXTRA_DATA> packets; // Дерево в котором собраны пакеты одного типа а вот - индекс к буферу: typedef map<RAW_PACKET, PACKET_EXTRA_DATA>::iterator pp_iter; multimap<uint32_t, pp_iter> ip2packets; // Индекс адресов, указывающих на соответствующие пакеты
  5. Уже кто-то об этом говорил. Грабли неизвестно где, т.к. падает на использовании API FreeRADIUS. К стати, в прошлый раз тоже было на 6-й фре, если не ошибаюсь.
  6. 1. Как я уже говорил - это проблемы загрузчика плагинов. Будут исправлены в след версии. Бага не влияет на результаты работы. 2. Нету смысла в буфере, т.к. внутри stg и так есть буфер. 3. Предполагаю - из-зи блокировок. FlushAndRemove останавливается на захвате мьютекса. 4. Может. Может быть мы так и сделаем. Если реализуешь, протестируешь и покажешь что это действительно дает выиграш в производительности - будем благодарны 5. А кто говорил про сложность организации? Почему многие считают, что для многопроцессорных систем надо выполнять какие-то телодвижения? Stargazer и так работает в несколько потоков. Нужно сделать профилирование, найти узкие места и придумать как их обойти.
  7. 1. Это не то, т.к. небыло сегфолта, а было корректное завершение работы. Но уже и не нужно, все что хотел - я увидел. 2 и 3. Знать неправильные настройки. Поподробнее - в документации.
  8. Если эти модули ядра есть - да.
  9. 1. А где же bt? 2. Судя по тому что упало при delete toStore - преобразование базы завершено. Падения на деструкторе есть, я это признаю, я знаю их неявную причину, я не могу предложить воркераунда и обещаю исправить это в будущих версиях. С другой стороны - этот сегфолт не портит данных и не влияет на результаты работы программы. 3. Да, с параметром ошибся. Но в любом случае - тебе виднее где у тебя конфиг лежит
  10. 1. Я же говорил 2. Буфер не обезопасен мьютексом. Что произойдет, если при флаше в буфер добавятся данные? 4. У неавторизованных пользователей может накапливаться статистика. 5. Потоки распределяются между процессорами ядром.
  11. Если ты не сделаешь modprobe iptable_filter (и это не сделает iptables за тебя автоматически) - у тебя не будет доступна таблица filter. Если ты не сделаешь modprobe ip_queue (и это не сделает iptables за тебя автоматически) - у тебя не будет доступна цель QUEUE. Я не понимаю, чем так плохо сделать два вызова modprobe. PS: если это чем-то не устраивает - никто не запрещает вкомпилить код этих модулей в ядро.
  12. Тогда запусти из-под gdb: # export LD_LIBRARY_PATH=../../lib # gdb ./convertor ... (gdb) r ./ ... и когда упадет - покажи вывод команды bt.
  13. 1. Я имел в виду что в 146 строке файла netflow_cap.h ничего нет 2. На время FlushAndRemove лочатся все операции с деревом пакетов. Соответственно - и вызовы от cap-модулей. А что за буфер? 3. Перестает? Интересно... 4. Стата есть у всех. 5. Это сложно.
  14. Уже обсуждалось и уже исправлялось. http://stg.dp.ua/download/sgconfig/1.90.9/....1.90.9.win.exe
  15. Вот! Вот этот дядя с большими ушами! Не туда смотрите. Ошибка тут: #1 0x283f30ba in ~FLOW_CAP (this=0x284152e0) at netflow_cap.h:146 Но, подозреваю, - там пусто. А это значит - неправильно срабатывает *_CREATOR. Я уже сталкивался с этим и мы с Борей обсуждали это. В будущем схема работы с плагинами несколько изменится. Воркераунда пока нет, но и данные это падение не портит, т.к. происходит в самом конце, когда жизненно-важные операции уже завершены.
  16. Не влияет. Влияет то, что ты используеш модули из /usr/lib/stg, а не из ../stargazer/modules
  17. Да, конечно. В 405-й была обновлена библиотека DOTCONFpp. В частности - очепятка в слове "CASEINSENSITIVE" - "CASEINSENSETIVE". Замените это слово в указанной строке и все соберется.
  18. Думаю, вопрошающий имеет в виду оплату услуг путем отсылки SMS.
  19. Берем исходники нового конвертора. Ложим его в дерево исходников stg версии 2.404.9.7. Собираем. После этого должен работать как часики.
  20. То что привели вывод gdb stargazer stargazer.core - это хорошо. Но было бы еще неплохо увидеть вывод команды bt (gdb)
  21. Патч №1: Index: projects/stargazer/plugins/authorization/inetaccess/inetaccess.cpp =================================================================== RCS file: /cvsroot/stargazer/stargazer/plugins/authorization/inetaccess/inetaccess.cpp,v retrieving revision 1.57 diff -u -B -u -8 -p -r1.57 inetaccess.cpp --- projects/stargazer/plugins/authorization/inetaccess/inetaccess.cpp 30 Mar 2008 13:51:31 -0000 1.57 +++ projects/stargazer/plugins/authorization/inetaccess/inetaccess.cpp 14 Aug 2008 13:43:20 -0000 @@ -195,17 +195,18 @@ FREEMB AUTH_IA_SETTINGS::GetFreeMbShowTy return freeMbShowType; } //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- IA_PHASE::IA_PHASE() { phase = 1; -phaseTime = 0; +//phaseTime = 0; +gettimeofday(&phaseTime, NULL); } //----------------------------------------------------------------------------- IA_PHASE::~IA_PHASE() { #ifdef IA_PHASE_DEBUG flog = fopen(log.c_str(), "at"); if (flog) { @@ -226,27 +227,29 @@ void IA_PHASE::SetUserLogin(const string IA_PHASE::login = login; } //----------------------------------------------------------------------------- void IA_PHASE::WritePhaseChange(int newPhase) { UTIME newPhaseTime; gettimeofday(&newPhaseTime, NULL); flog = fopen(log.c_str(), "at"); -int64_t tn = newPhaseTime.GetSec()*1000000 + newPhaseTime.GetUSec(); -int64_t to = phaseTime.GetSec()*1000000 + phaseTime.GetUSec(); +/*int64_t tn = newPhaseTime.GetSec()*1000000 + newPhaseTime.GetUSec(); +int64_t to = phaseTime.GetSec()*1000000 + phaseTime.GetUSec();*/ if (flog) { string action = newPhase == phase ? "U" : "C"; + double delta = newPhaseTime.GetSec() - phaseTime.GetSec(); + delta += (newPhaseTime.GetUSec() - phaseTime.GetUSec()) * 1.0e-6; fprintf(flog, "IA %s %s oldPhase = %d, newPhase = %d. dt = %.6f\n", login.c_str(), action.c_str(), phase, newPhase, - (tn - to)/1e6); + delta); fclose(flog); } } #endif //----------------------------------------------------------------------------- void IA_PHASE::SetPhase1() { #ifdef IA_PHASE_DEBUG Патч №2: Index: include/utime.h =================================================================== RCS file: /cvsroot/stgincludes/include/utime.h,v retrieving revision 1.4 diff -u -B -u -8 -p -r1.4 utime.h --- include/utime.h 28 Mar 2008 08:42:19 -0000 1.4 +++ include/utime.h 14 Aug 2008 13:43:56 -0000 @@ -108,28 +108,60 @@ struct UTIME: public timeval //cout << (tv_sec == rhs.tv_sec) << " " << (tv_usec == rhs.tv_usec) << endl; return (tv_sec == rhs.tv_sec) && (tv_usec == rhs.tv_usec); } UTIME operator+(const UTIME & rhs) { // TODO optimize long long a, b; - a = tv_sec * 1000000 + tv_usec; + /*a = tv_sec * 1000000 + tv_usec; b = rhs.tv_sec * 1000000 + rhs.tv_usec; - return UTIME((a + b) / 1000000, (a + b) % 1000000); + return UTIME((a + b) / 1000000, (a + b) % 1000000);*/ + a = tv_sec + rhs.tv_sec; + b = tv_usec + rhs.tv_usec; + if (b > 1000000) + { + ++a; + b -= 1000000; + } + return UTIME(a, b); } UTIME operator-(const UTIME & rhs) { // TODO optimize long long a, b; - a = tv_sec * 1000000 + tv_usec; + /*a = tv_sec * 1000000 + tv_usec; b = rhs.tv_sec * 1000000 + rhs.tv_usec; - return UTIME((a - b) / 1000000, (a - b) % 1000000); + return UTIME((a - b) / 1000000, (a - b) % 1000000);*/ + a = tv_sec - rhs.tv_sec; + b = tv_usec - rhs.tv_usec; + if (a >= 0) + { + if (b >= 0) + { + return UTIME(a, b); + } + else + { + return UTIME(--a, b + 1000000); + } + } + else + { + if (b >= 0) + { + return UTIME(++a, 1000000 - b); + } + else + { + return UTIME(a, b); + } + } } time_t GetSec() const { return tv_sec; } suseconds_t GetUSec() const Надеюсь, это оно. По крайней мере тут было арифметическое переполнение.
  22. Лог получен, решение найдено. Тестирую...
  23. Без bash сборка не работает.
  24. По скрину не видно что предупреждений компилятора нет. Кроме того, Access violation при recvfrom обычно говорит о недостаточно размере приемного буфера.
×
×
  • Create New...