~AreEnn
~R4SAS
~orignal
~villain
&N00B
+Xeha
+relaybot
DUHOVKIN
Guest8889
HackerMan
Most2
Nausicaa
Ruskoye_911
Vort
`
acetone_
anon3
b3t4f4c3
fidoid_
nemiga
not_bob_afk
plap
poriori
profetikla
soos
teeth
tensor
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
{
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 счообщения надо
orignal
msg
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
рестартую
orignal
да
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
orignal: вот всплеск на 51 штуку 62k: paste.i2pd.xyz/?391697f7522d765b#G5hC8Bhsba89cm3Y3bqcJpor8fP87DcUM65ouxgFPLPM
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
{
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?
orignal
len
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
что есть - так вот это: paste.i2pd.xyz/?ee92bf4679a32f0e#FJV72tRPFpyWyPLhStz6GApMNsRyRVSgiajH9myv7HUG
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 ?