IRCaBot 2.1.0
GPLv3 © acetone, 2021-2022
#dev
/2023/03/17
~R4SAS
~orignal
~villain
&N00B
+relaybot
AreEnn
Leopold
Leopold_
Most2_
Nausicaa
Nikat
Opax
Vort
WayBest
`
acetone_
anon
anontor
b3t4f4c3
banona
fidoid
grimreaper
itsAMe
karamba_i2p
onon
polistern
poriori
profetikla
qend
r00tobo
scratch
soos
teeth
typhoon
uis
un_
weko
whothefuckami
колдобина
колдырь
WebClient7 снова атака на сеть? TCSR упал с 55 до 35%. Транзит упал почти в ноль по объему. По количеству тоннелей тоже упал.
orignal нет у меня все в порядке
orignal проверь дескрипторы
WebClient7 ничего не менялось на машине. Дескрипторов хватает. Но соотношение NTCP2:SSU2 очень сильно плавает последние несколько дней. Было даже 3:1 хотя обычно 2:3 примерно. Плавающее соотношение NTCP2:SSU2 пока
WebClient7 отношу на обнову, падение TCSR - очень подозрительно
orignal падение это нормально
orignal счас же вся сеть обновляется
orignal Transit: 341.31 GiB (3257.86 KiB/s)
orignal зато у меня транзит
orignal 32 мбс я бы сказал многовота
orignal у мня стоит ограничение в 50 там
weko У меня тоже всё норм
whothefuckami orignal: slab slob slub
weko SSU2: Too many fragments 10 in SessionConfirmed from x.x.x.x:nnnnn
Vort weko: эта хрень постоянно вылазит. многие месяцы так, а, может, и всегда было
Vort orignal: потестировал я VirtualAlloc. может, и помогло, но недостаточно. всё равно кучу раздувает. однако после уборки жирных блоков из кучи стала лучше видна основная проблема
Vort а суть в том, что для переваривания пика i2pd нужно мегабайт 10 пакетов по 1544 байт
Vort после того, как пик уходит, они возвращаются в кучу. но, видимо, не на самый край. и поэтому пустота остаётся там навсегда
Vort и, насколько я помню, пул для них есть. но он не решает этой проблемы. её вообще непонятно, как решать
Vort если эти 10 мегабайт не освободить, так это будет всё то же раздувание, что плохо
Vort если освободить - тоже раздувание, так как шанс попасть на край кучи минимален
weko [07:51:35] <Vort> weko: эта хрень постоянно вылазит. многие месяцы так, а, может, и всегда было
weko Это ж не значит, что это правильно. Не думаю что это специально кто-то сделал, значит где то баг есть
weko Ну или так и должно быть, но почему
orignal уполовинивать как я говорил
orignal weko это интересная бага надо глянуть что там
orignal бболее 2 не должно быть никогда
Vort "<~orignal> уполовинивать как я говорил" так пики они всего несколько раз в день происходят. если слишком интенсивно уполовинивать, то к моменту следующего пика ничего уже не будет в пуле
Vort если не слишком интенсивно, то будет висеть неипользуемая память
Vort я, кстати, уже словил немножно SSU2: I2NP message size 4096 is not enough
Vort но не уверен, что это был пик. буду ещё разбираться
orignal вопрос как часто ты это ловишь
Vort проверил только что - был пик. теперь по времени сопоставлять буду
Vort [2023-03-17 12:05:00] пик пришёл
orignal это какое время?
Vort UTC. 30 жирных блоков (62k) родилось
orignal итересно что же в них что 4K не хаватает
Vort только вот дело в том, что за это время нету SSU2: I2NP message size в логе вообще
Vort короче, пик не из-за этого. если я не ошибся нигде
Vort жирные блоки рождаются где-то в другом месте
orignal так так размер не изсетен
orignal у тбя пришел фрагмент к сообщения где уде больеш 4K
orignal сколько их всего будет ты не знаешь
Vort не понял
Vort во время пика должны быть эти сообщения или нет?
Vort я во время пика не вижу такого
Vort за несколько минут до этого - вижу
Vort первое - [17/Mar/2023:13:56:05 +0200]@469/error - SSU2: I2NP message size 4096 is not enough
Vort последнее - [17/Mar/2023:14:03:08 +0200]@469/error - SSU2: I2NP message size 4096 is not enough
orignal ты видишь только во время пика или рандомно?
Vort пика в 12:04 ещё и близко не было. он пошёл в 12:05
Vort сейчас график кину
orignal так а в чем проблема если их вснего 30 было
Vort "<~orignal> ты видишь только во время пика или рандомно?" - ни то, ни другое. за несколько минут до пика появлялись. во время пика и после - не было
Vort "<~orignal> так а в чем проблема если их вснего 30 было" если использовать VirtualAlloc, то проблемы нет. иначе кучу раздувает. ну и это сейчас 30, а я и 100 видел (то есть, 6 мегабайт). может, и больше было
orignal и они типа повторно не используются?
orignal я могу добавть промежуточные по 16K
Vort я с VirtualAlloc сделал так, что нет. не особо нужно (ну или я не вижу нужды). зачем их повторно использовать если они мимо кучи идут и при удалении исчезают без следа (без фрагментации)?
Vort orignal: так всё же - сообщение в логе связано с последующим пиком или нет?
Vort если нет, то там и не 4к может быть
Vort а поболее
orignal думаю что пик тут непричем
Vort ну значит всё же желательно понять, откуда он берётся
Vort если не там, значит, где-то ещё
orignal берется что?
Vort где создаются большие блоки
Vort и почему
orignal это может быть действительно такое сообщение
orignal датаграмма длинная
orignal торренты, боте
Vort то есть, это нормальный режим работы грубо говоря?
orignal я не думаю что там 62K
Vort а узнать можно, сколько там реально или нет?
orignal грубо говоря да просто оно бывает редко
Vort хотя если перейти на VirtualAlloc, то проблемы с 62к не будет. но там же не только 62к. там ещё ворох 1544
Vort то есть, похоже, вот эта гора 1544 приносит несколько жирных 62к
Vort (отойду)
orignal it->second->AttachNextFragment (buf + 5, len - 5);
orignal if (isLast)
orignal вот здесь проверить если длина больше 4096 и напечтать ее
orignal да именно так гора 1544 и должна ссоздать жирный ^2K
polistern orignal, а чем i2pcontrol так не угодил человеку? github.com/PurpleI2P/i2pd/pull/1905
Vort а браузер? на гитхаб написать смог, значит браузер есть. перенаправить вебконсоль куда надо не должно быть сложно
polistern Тоже верно
orignal не знаю зачем это
Vort orignal: я добавил if (len > 4096) LogPrint(eLogError, "SSU2: HandleFollowOnFragment len: ", len);
Vort не срабатывает
Vort наверно надо другую длину проверять
Vort вот так сделать что ли? if (it->second->msg->GetLength() > 4096) LogPrint(eLogError, "SSU2: HandleFollowOnFragment msg->GetLength(): ", it->second->msg->GetLength());
orignal длину I2NP счообщения надо
Vort переделал как написал выше. попробую ещё разок словить
orignal думаю этот PR закрыть как ненужный
Vort оно то логично, но правильнее было сказать сразу автору, что это делать не нужно
Vort до того как он сделал PR то есть
polistern Ну кстати да, он вроде приходил же сюда, не?
orignal ну так он внятно не объяснил
orignal зачем нам еще один HTTP сервер?
orignal закрыл
orignal мало того еще и голый системный код
Vort если эта фича не нужна, то не так важно, каким образом она написана. если он напишет её другим образом, она точно так же будет не нужна
Vort тут надо бы разобраться, почему он не смог или не захотел решать задачу более традиционными методами
Vort пробросив как-то порт вебконсоли к примеру
Vort ну или использовав i2pcontrol
orignal так эта фича есть в HTTPServer,cpp
orignal он просто не разобрался как она там устроена
orignal а начал свое городить
orignal если ему было надо можно было просто туда код навесить
Vort при чём тут HTTP? как я понял, он не использовал HTTP
Vort а сделал самодельный протокол, по типу телнета или чего-то такого
polistern Как вариант переиспользовать HTTP код, просто убрать HTTP обёртки, определить запросы/команды и сделать telnet-like его. Но тогда уже получается ближе к i2pcontrol.
Vort главное - понять, зачем это нужно. точнее, что мешает использовать http
Vort у меня подозрение, что проблема в безопасном пробросе порта
Vort но это ж должно быть где-то в документации описано, да?
polistern Пробросе куда?
Vort хотя глянул в стандартный конфиг, там есть возможность установки пароля. так что можно и "небезопасно"
Vort туда, где есть браузер
Vort допустим, на сервере нету браузера. ну так есть где-то ещё
polistern Ааа, хз, я на серверах lynx ставлю для этого. Но если бы был CLI было бы конечно прикольно
Vort вот и вопрос в том, как дать браузеру доступ к консоли, если они на разных компах
orignal в любом случае пусть переписывает на boost::asio
Vort I2P обязательно требует доступ в интернет, так что чище решение, как по мне, перенаправлять вебконсоль
polistern idk вот пишет на Go для i2pcontrol утилиту. А мне ещё для боте дописывать, но её можно преиспользовать, там тоже JSON-RPC.
orignal есть же все это уже
orignal в коде
Vort что именно есть?
polistern Понять бы какую проблему решить хотел)
Vort вот-вот
orignal код для "tcp сервера"
orignal я вот тоже не понял
polistern Если легковесный telnet - то переиспользовать из HTTP. Если просто CLI - то нужен клиент для i2pcontrol. Если другое - то не понятно тогда.
orignal знаете что еще нужно?
orignal мне not_bob сказал
orignal отправлять пинги
orignal на дестинейщин
orignal он говорит так делает на notbob.i2p
orignal там какая то консольная хрень типа телнета
polistern Именно пинги или ответы на пинги? Он вроде HTTP HEAD делает, видела в логе сайтов.
Vort и при чём тут i2pd ?
polistern У него в блоге вроде было как именно он запросы делает. Попробую найти.
orignal пинги
orignal Vort i2pd при том что есть такое сообщение внутри i2p
orignal polistern нет они именно пинги делает можешь у себя в логах посмотреть что пинги прилетают от него
polistern Значит кто-то ещё смотрит))
orignal нет все пинги идут от notbob
Vort то есть, чтобы можно было проверить не только живость веб сервера, но и живость самого адреса?
orignal именно сообщение ping
orignal Vort не всегда на адресе HTTP
orignal скажем ирк
Vort учитывая отсутствие ICMP, вполне логично
Vort короч, понял
orignal потому в стримах предусмотрено такое сообщение
orignal но i2pd его послыает только если в клиентском тоннелле стоит keepalive
orignal вручную послать нельзя
orignal а вот такую фичу бы надо
orignal <Vort> вот так сделать что ли? if (it->second->msg->GetLength() > 4096) LogPrint(eLogError, "SSU2: HandleFollowOnFragment msg->GetLength(): ", it->second->msg->GetLength());
orignal да так
polistern Не поняла, пинги - это часть протокола или фишка джавы?
orignal это часть протокола
orignal но сам интрефейс для запроса пинга это фишка джавы
orignal то есть мы умеем их обрабатывать мы умеет их посылать но у нас нет интерйеса
polistern Ну раз надо, значит надо. Погляжу сегодня, может там работы на полчаса.
orignal мне дед говорит что там тупо телнет
Vort по поводу пиков - всё же дело именно в "SSU2: I2NP message size 4096 is not enough". чуть позже напишу подробнее
orignal Vort ну это логично если длинное соодщение передается понятно что там будет много пакетов враз
weko [15:14:00] <orignal> но i2pd его послыает только если в клиентском тоннелле стоит keepalive
weko [15:14:07] <orignal> вручную послать нельзя
weko Симуляцию ICMP протокола может сразу?)
orignal да не надо
Vort orignal: странность в том, что эти сообщения несколько минут копятся, чтобы потом выстрелить пиком
Vort сейчас соберу логи
orignal ну возможно это правильно
orignal у тебя пришли сообщения 2-10 а только потом 1
orignal иными словами длинное может набираться несколько минут
polistern Нашла у них FLAG_ECHO. orignal, у нас также делать хотим?
orignal так у нас все уже есть
orignal и все реализовано
polistern Ну да, дальше посмотрела логику, всё также вроде.
polistern А чего он хочет тогда?))
orignal надо лишь клинсткий интефейс доя отслыки сделать
orignal ну как что? а как послать то извне.
orignal у нас этого нет
polistern Ааа, мы не посылаем. Хммм
orignal мы просто не имеем возможность
orignal мы послылаем автоматически если в клиентском тоннеле стоит keepalive
orignal а вручную не можем
orignal а у них там есть какой то интерфейс
polistern Всё, поняла, погляжу что у них там.
orignal скажи лучше у тебя в боте датаграммы примерно какого размера идут?
Vort orignal: вот объединил два лога - от i2pd и от дампа памяти: paste.i2pd.xyz/?18f27def56f16a36#9F8vW6x3Y3y9sfScWsStmMTK6hFMJf1Rh5igpiY7m2qB
Vort пик - это вот это - [2023-03-17 15:10:30] 21 * 62808
orignal так вопрос то какой они длины реально
Vort ну это маленький. они и за 100 сообщений бывают. подожду, может жирнее будут
orignal если там под 60K то может опять какая нибуь атака
Vort "какой они длины реально" - ещё что-то дописывать в i2pd надо? :)
orignal ну ты же добавил код
orignal когда последний фрагмент приходит смотреть длину всего сообщения
Vort а он при этом пике не срабатывал
Vort значит, 4096 ?
orignal значит все фрагменты так и не пришли и оно дропнулось
polistern orignal, MAX_DATAGRAM_LEN = 32768
Vort msg->GetLength() сработал всего 3 раза
orignal polistern а реально сколько уходит в среднем?
polistern Сейчас, логи грепну
Vort один msg->GetLength(): 7151 и два msg->GetLength(): 10311
orignal Vort isLast = outOfSequenceFragments->isLast;
orignal еще вот тут модет быть
orignal когда первый приходит после остальных
orignal так у меня вопрос
orignal делать ли промежуточные длиной 16K
orignal то есть если не хватает 4K сначала 16K проблуем
Vort мне кажется, что они забиваются на 100%
Vort только мы почему-то не можем этого увидеть )
Vort "<~orignal> еще вот тут модет быть" скажи что дописать для логирования - проверю
orignal ну вот нашел
orignal думаешь 62K на 100%? тогда это точно атака
Vort я как-то разделил количество 1544 на количество 62808 и получил подозрительное число - примерно 62.8
Vort сейчас поищу тот семпл
polistern orignal, самое большое за неделю: 26929
Vort [2023-03-14 22:18:30] a:70745274 f:20479168
Vort 0: 12620656 (8174 * 1544)
Vort 1: 8165040 (130 * 62808)
Vort 8174 / 130 = 62.87
Vort совпадение?
orignal да старнно
Vort сейчас по другим случаям проверю
orignal LogPrint (eLogError, "SSU2: I2NP buffer overflow ", msg->maxLen);
Vort [2023-03-15 05:36:30] a:73193526 f:43388960
Vort 0: 12433832 (8053 * 1544)
Vort 1: 6406416 (102 * 62808)
orignal а нету ли вот такой ошибки
Vort 8053 / 102 = 78.95
orignal может атака в том что гонят фрагменты без последненго?
Vort "I2NP buffer overflow" нету
orignal в надежде что буфера переполнятся
polistern *** афк ***
Vort иногда вылазит "I2NP: Tunnel gateway buffer overflow 4096". но это оочень редко и с пиками не коррелирует
orignal ну это может быть
Vort "<~orignal> может атака в том что гонят фрагменты без последненго?" ну давай ещё добавлю вывод когда не isLast
orignal точнее когда islast печатать когда больше 4096
Vort ну это уже есть. но ты ж говоришь что может ещё быть без последнего
Vort то есть, без isLast ?
Vort если там конские размеры, то надо бы печатать хоть last, хоть не last
Vort только я не уверен, что правильно понимаю, как это сделать
orignal так надо еще когла удаляется
Vort скажи что туда втыкать - воткну. не хочется час ждать, чтобы понять, что воткнул не то
orignal LogPrint (eLogWarning, "SSU2: message ", it->first, " was not completed in ", SSU2_INCOMPLETE_MESSAGES_CLEANUP_TIMEOUT, " seconds, deleted");
orignal вот такая ошибка
orignal в том месте
orignal печтать длину тоже
Vort "<~orignal> в том месте" если не isLast ?
Vort не понял, где это оно deleted
orignal в том месте где это сообщение
orignal вот тот лог где
orignal msg->msxLen
orignal msg->maxLen
orignal я думаю большинство просто дропаются
Vort LogPrint (eLogError, "SSU2: message ", it->first, " was not completed in ", SSU2_INCOMPLETE_MESSAGES_CLEANUP_TIMEOUT, " seconds, len:", it->second->msg->GetLength()," deleted");
Vort так что ли?
orignal нет
orignal там GetLength у тебя ноль даст скорее всего
orignal it->second->msg->maxLen
orignal так ты узнаешь какого размера дропнулось
Vort ок
Vort LogPrint (eLogError, "SSU2: message ", it->first, " was not completed in ", SSU2_INCOMPLETE_MESSAGES_CLEANUP_TIMEOUT, " seconds, len: ", it->second->msg->maxLen, ", deleted");
Vort рестартую
Vort__ orignal: что-то не то. крешнулось
Vort__ проверять msg на null может надо?
orignal да скорее всего
Vort__ попробую вот так: LogPrint (eLogError, "SSU2: message ", it->first, " was not completed in ", SSU2_INCOMPLETE_MESSAGES_CLEANUP_TIMEOUT, " seconds, len: ", (it->second->msg ? it->second->msg->maxLen : -1), ", deleted");
orignal угу
Vort это так мой -1 преобразился что ли? :D
Vort [17/Mar/2023:18:29:23 +0200]@946/error - SSU2: message 3976004215 was not completed in 30 seconds, len: 18446744073709551615, deleted
Vort хотя не похоже. в общем, хз что это
Vort хотя и нормальные len: 4096 были. пачкой
Vort но вроде без всплеска
Vort или с малым всплеском
Vort а да, это таки -1
orignal ну да
orignal инетерсуеют 62K
Vort похоже, что блоки len: 4096 - это нормально
Vort теперь надо ждать всплеска
orignal 4096 самые ходовые
orignal казалось бы зачем IdentityEx в TransportSession?
orignal а вот незачем оно там
orignal а надо там только IdentHash
weko [15:32:00] <orignal> да не надо
weko Идея по лучше: утилиту по типу ping, но для I2P - pingi2p или как так
Vort ни одного срабатывания "HandleFollowOnFragment msg->GetLength()" и "I2NP message size" не было
Vort зато были несколько срабатываний "was not completed" с нулевым it->second->msg
Vort что это должно значить?
orignal вот то и значит что не пришел первый
orignal но это конечно странно почему нулевой
orignal ладно думать надо
Vort если придумаешь что добавить в лог - говори
orignal скажи если надумаю
orignal счас другим занят
Vort странно это - уйма объектов есть, а наполнение их посмореть не можем
orignal непонятно почему msg нулевой
Vort и именно с такими случаями связаны всплески. похоже на баг где-то
orignal пакеты то явно с сети приходят
orignal я посмотрю
Vort ок. хотя бы подтверди, что такое происходит. я ведь добавлял VirtualAlloc, хоть бы не из-за этого нули были
Vort но всплески, конечно же, были и раньше
Vort иначе зачем бы я этот VirtualAlloc вообще туда тулил )
Vort обычно где-то через полчаса-час после рестарта первые всплески приходят
Vort хотя это не правило. может и по нескольку часов не быть
orignal да я у себя тоже погляжу что с этими сообщениями
orignal надо разобраться что вообще с этим приосиходит
orignal интересно сообщение в твоем логе про 12 фрагментов SesssionConfirmed
orignal if (found && m->ConcatOutOfSequenceFragments ())
orignal // we have all follow-on fragments already
orignal вот тут печать есть?
orignal и еще здесь
orignal fragment->fragmentNum = fragmentNum;
orignal fragment->isLast = isLast;
orignal if (isLast && fragmentNum > 4) печать(frgamentNum)
orignal header.h.flags[0] = 0x12; // frag 1, total fragments 2
orignal кто то явно решил что 0x там лишний
orignal и выдает в этом поле 12
Vort сколько изменений предлагаешь сделать для логирования? а то я уже запутался
orignal вот в той строчке где я напсал выше
Vort да в ошибках с фрагментами там рандом по сути
orignal вообще перед любыи HandleI2NPMsg (std::move (m->msg));
orignal проверяя msg на длину
Vort if (isLast && fragmentNum > 4) LogPrint(eLogError, "SSU2: HandleFollowOnFragment: isLast, fragmentNum: ", fragmentNum);
Vort "<~orignal> проверяя msg на длину" какую из ?
Vort nextMsg->len ?
Vort nextMsg->maxLen?
Vort а проверять надо после FromNTCP2 или до него?
Vort или всё равно?
Vort и печатать всегда или только если nextMsg->len > 4096 ?
orignal без разницы
orignal только если больше
Vort ок
orignal нас обычные не интерсуют толко длтиные
orignal вот думаю банить что ли таких умников кто в SessionConfirmed гонит 12
orignal явно кривая модификация
Vort говорю же - там не только 12, там бывает всё что попало
orignal все что больше 2-х это бага
Vort это просто не похоже на опечатку. скорее мусор какой-то шлётся
Vort может память где-то повреждается
orignal возможно
orignal надо будет проверить
orignal я смотрет роутер тот там явная модификация
weko Надо смотреть от кого
orignal что публикует только C
orignal WDW8FasHpPG1cgk5yWaBZvC61CBGf6m9xaaW3lxzCuA\=
weko Если от одних и тех же персонажей - то понятно
orignal толкьо C в обычном i2pd быть не может
weko А в жабе?
orignal но то явно не жаба там публикуется именно SSU2 а не SSU
Vort orignal: опять словилось message was not completed с нулевым it->second->msg
orignal это нормально
Vort других сообщений не вывалилось
orignal это значит первый фрашмент не пришел
Vort ну ок. жду значит пока что-то другое словится
Vort хотя тогда вроде небольшой пик как раз был
weko Опять синусоиды чтоли
orignal у тебя небось E выставляет
weko Нет
weko Лимитов то нет
weko Я вижу то 270 лиссетов то 200
weko И туннели тоже скачет
weko При чём синхронно с лиссетами
weko От 7 до 9
weko Да и 10к бывает
orignal значит опять пытаются срать
Vort одна ловушка сработала. да вот только пика не было
Vort [17/Mar/2023:21:01:38 +0200]@148/error - SSU2: I2NP message size 4096 is not enough
Vort [17/Mar/2023:21:01:38 +0200]@148/error - SSU2: HandleFollowOnFragment, isLast: it->second->msg->len: 5393
Vort жду пика :)
orignal непрлохо 5393
Vort а всё-таки пик был
Vort [2023-03-17 19:02:30] 41 * 62808
Vort [2023-03-17 19:03:00] 12 * 62808
orignal я просто пытаюсь понять диапазон длин
Vort через 1 минуту
Vort а я не могу понять, почему видно 41 объект сообщения, но при этом 1 сообщение в логе
Vort остальные 4096 что ли?
orignal потому что не все в SSU2 создались
Vort аа. ок
orignal очевидно же
orignal а на конце тоннеля например
Vort я ещё не так хорошо понимаю работу I2P чтобы мне это было очевидно :)
Vort вот ещё:
Vort [17/Mar/2023:21:05:33 +0200]@148/error - SSU2: I2NP message size 4096 is not enough
Vort [17/Mar/2023:21:05:33 +0200]@148/error - SSU2: HandleFollowOnFragment, isLast: it->second->msg->len: 7756
orignal тоже хорошо
Vort хмм. что-то интересное
Vort только уже кину ссылкой
orignal давай
Vort 4 штуки HandleFollowOnFragment, isLast: it->second->msg->len: 4634
Vort а потом сразу SSU2: Too many fragments 7
Vort пика не было
orignal это интересное число 4624
Vort все всплески, которые были за эту "сессию" довольно вялые. жду чего-то помощнее
orignal 4634 что может быть?
Vort это я вообще без понятия. пока что в этом направлении не копал
orignal очень странное сообщение
Vort пика всё ещё нет. зато есть вот такое:
Vort [17/Mar/2023:21:30:18 +0200]@148/error - SSU2: I2NP message size 4096 is not enough
Vort [17/Mar/2023:21:30:18 +0200]@148/error - SSU2: HandleFirstFragment: m->msg->len: 4242
Vort хоть я в этом ничег не понимаю, но мне кажется странным такой жирный первый фрагмент
Vort но, наверно, говорю глупости )
orignal почему? он мог просто прийти после остальных
orignal потому они все и собрались в этот момент
Vort первый пришедший, но не первый отправленный?
Vort хотя не важно
Vort о, пришла большая пачка. сейчас проверю, был ли пик потребления памяти
orignal давай
Vort тьфу. я неверно fragmentNum распечатал :(
Vort кракозяблу получил
Vort в общем, похоже, пика опять не вышло. но наловилось всякого
Vort много вот этого насыпалось: isLast: it->second->msg->len: 6923
Vort потом один HandleFirstFragment: m->msg->len: 4366
Vort SSU2: HandleFollowOnFragment: isLast, fragmentNum:  (кракозябла)
Vort и SSU2: HandleFirstFragment: m->msg->len: 9802
Vort что же будет когда пик придёт )
orignal так кяркозябру посмотри ее код
orignal интересно какая максимальная длина датаграммы в торрентах?
Vort 7 кракозябла вроде
orignal ну разумено
orignal порядка 8-9K
Vort ну это же i2p, я не знаю как тут торренты себя ведут. в клирнете там же лимит на размер udp пакета просто. который около 1.5к
Vort в общем, 4-5к msg->len встречается не так уж редко. и не приводит сам по себе к пикам RAM
Vort видимо, есть ещё какие-то условия для рождения пика
R4SAS orignal: а почему GZip Deflator у нас level = 8?
Vort вот всегда так - когда надо воспроизвести проблему - она прячется :)
R4SAS > The memLevel parameter specifies how much memory should be allocated for the internal compression state. memLevel=1 uses minimum memory but is slow and reduces compression ratio; memLevel=9 uses maximum memory for optimal speed. The default value is 8. See zconf.h for total memory usage as a function of windowBits and memLevel.
R4SAS каждый GzipDeflator::GzipDeflator у нас жрет allocator.h, line 78 (D:\msys64\clang64\include\c++\v1\__memory\allocator.h)0x0000023b66fbd03025Heap memoryi2pd-tst.exeD:\devel\project\PurpleI2P\i2pd\i2pd-tst.exe16384001658417.03.2023 20:28:43.453000033189117540
R4SAS эм
orignal а сколько надо?
orignal там же метод есть
R4SAS крч ~1.6 мб
R4SAS 1638400
R4SAS а не знаю
R4SAS deflateInit2 (&m_Deflator, Z_DEFAULT_COMPRESSION, Z_DEFLATED, 15 + 16, 8, Z_DEFAULT_STRATEGY)
orignal ну я жму по умолчанию
R4SAS как обычно показывает практика, выше 5 смысла нет
orignal ну поменяй
R4SAS но тут двуяко
orignal я просто не задумывался
R4SAS у меня сейчас 4 таких выделения памяти висит, на туннелях
orignal ну поиграйся
orignal я просто не задумывался
orignal короче я думаю 16K I2NP сообщения приедтся вводить
Vort найти бы для начала какой размер сообщений получается во время пика
Vort пока пика нету и этих объектов 0-10 штук - то это не так страшно
Vort вот когда сотня приходит - тогда уже плохо
Vort ну как.. относительно плохо, конечно
R4SAS каждая запись в DHT занимает 84 байта
R4SAS каждая опция в Config.cpp занимает 100 байт
R4SAS g_Profiles.emplace (identHash, profile); - 116 байт
R4SAS GarlicDestination::GarlicDestination - 116
Vort важно ведь в первую очередь сколько в сумме весит
R4SAS надо бы сделать так, чтобы перевод не грузился в память без необходимости
R4SAS хотя насчет опций в Config - они разных рамеров
R4SAS да... многовато блоков с переводом висит в памяти
Vort вряд ли сильно больше, чем объём файлов в папке i18n. а их там 152 Кб
R4SAS больше
orignal запистьв DHT это узел дерева?
R4SAS да
orignal Transit Tunnels: 20481
orignal так-с
orignal а чему там быть 84 там же 3 указателя всего
orignal похоже опять транзитами засирают
orignal у меня везде
R4SAS 19.6
R4SAS 14.6
R4SAS 13.9
R4SAS 13.8
R4SAS так что тоже
orignal атака
Leopold Лол)
Leopold Кому-то снова скучно :D
orignal так эта атака уже не имеет смысла
orignal все исправлено как надо
Vort orignal: словились несколько пиков RAM
Vort сейчас буду ссылки готовить
Vort я поменял -1 на 999999
orignal давай
Vort опять та же странность
Vort пик [2023-03-17 21:34:30], а жирные сообщения раньше - [17/Mar/2023:23:33:25 +0200]
orignal да это не странность
orignal первые потерлялсь
Vort такс. это был первый пик. сейчас рассмотрю второй
Vort глянул ещё два - ничего интересного не было. но они слабые были. ещё один есть - пожирнее. его сейчас гляну
Vort хм. очень жирный, но почти нет больших len. разве что вот это: SSU2: HandleFollowOnFragment, !isLast: it->second->msg->len: 4174
Vort ну и эксперимент не очень чистый - я в этот момент тестировал новый билд qBittorrent :)
Vort разработчик наконец взялся за внедрение поддержки i2p
orignal я вот думаю может там где 4K поставить 5K?
Vort хз. я бы собирал распределение и смотрел, какие бывают размеры
Vort в общем, пока что для меня по-прежнему загадка что с этими пиками происходит. ну да, бывают большие сообщения. но не сотни. и не всегда после них пик
Vort хоть собирать трассировки стека и смотреть, откуда объекты берутся
Vort 62к которые
Vort [2023-03-17 22:28:00] 0 * 62808
Vort [2023-03-17 22:28:30] 1 * 62808
Vort [2023-03-17 22:29:00] 3 * 62808
Vort [2023-03-17 22:29:30] 0 * 62808
Vort [2023-03-17 22:30:00] 0 * 62808
Vort [18/Mar/2023:00:28:54 +0200]@148/error - SSU2: I2NP message size 4096 is not enough
Vort [18/Mar/2023:00:28:54 +0200]@148/error - SSU2: HandleFollowOnFragment, isLast: it->second->msg->len: 12444
Vort [18/Mar/2023:00:28:54 +0200]@148/error - SSU2: I2NP message size 4096 is not enough
Vort [18/Mar/2023:00:28:54 +0200]@148/error - SSU2: HandleFollowOnFragment, isLast: it->second->msg->len: 12444
Vort в общем, явной связи нету. неявная, скорее всего, есть
orignal 12444 ага
orignal все таки надо 16K
Vort так где ещё можно размеры посмотреть? вот эти логи от SSU2 - это крохи. объекты создаются по 10-100 штук, а в лог попадает, может несколько
Vort остальные в NTCP2 ?