IRCaBot 2.1.0
GPLv3 © acetone, 2021-2022
#dev
/2024/09/16
~R4SAS
~orignal
~villain
@onon
&N00B
+Xeha
+r00tobo
+relaybot
+whothefuckami
AreEnn
HackerMan
Leastr
Most2
Nausicaa
Vort
WayBest
`
acetone
anon2
b3t4f4c3
flumental
karamba_i2p
nemiga
newbie8sep24
not_bob
osoznayka
poriori
profetikla
segfault
soos
teeth
tolik
un
unwr
weko
onon Нас тут всякие спамеры отвлекли, нужно бы со стримами разобраться. Как будет время, пара вопросов есть.
orignal if (m_Streams.empty ())
orignal m_PacketsPool.CleanUp ();
orignal m_I2NPMsgsPool.CleanUp ();
orignal вот ответ на вопрос куда девается память
orignal время есть
orignal память конретно с ирком
onon Надо сделать const double RTT_EWMA_ALPHA = 0.25;
orignal я не знаю что это
onon Это в Streaming.h
onon А то 0.5 срабатывает на пики
onon Ложное срабатывание часто случается
orignal так в чем заключается вопрос?
onon Сейчас
onon Хочу сделать вот так:
onon if (m_LastConfirmedReceivedSequenceNumber + numPackets < m_LastReceivedSequenceNumber)
onon lastReceivedSeqn = m_LastConfirmedReceivedSequenceNumber + numPackets;
onon if (!m_IsAckSendScheduled)
onon auto ackTimeout = m_RTT/10;
onon if (ackTimeout > m_AckDelay) ackTimeout = m_AckDelay;
onon ScheduleAck (ackTimeout);
onon В функции void Stream::SendQuickAck ()
onon Но боюсь, что при каких-то условиях это может попасть в бесконечный цикл
orignal а с чего?
orignal ScheduleAck ведь стваит m_IsAckSendScheduled
onon Ну да, я это протестировал у меня не попадает в цикл
onon Но вдруг
orignal я не вижу для этого причин
onon Может я какой-то сценарий не предусмотрел
orignal убедись что ScheduleAck ставит
orignal всегда
orignal так что с очиткой пула пакетов будем делать?
onon Это сложный вопрос
onon Убивать стримы зависшие нужно
orignal нет тут дело в другом
onon Или как -то прявязывать к конкретному
orignal смотри он засрал деситнешин кучей пакетов
orignal для них навыделялось куча памяти
orignal потом они вернулись в пул
orignal ну пул не полчитился потому что
orignal if (m_Streams.empty ())
onon Т.е. мы предполагаем, что эти пакеты предназначены какому-то из стримов?
onon И поэтому не чистим?
orignal ну я как преполагал
orignal есть у нас http сервер
orignal кто то подключился скачал кучу картинок ушел на них дрочить
orignal после этого все стримы позакрывались и мы пакеты использованные для его запросов почистили
orignal разумеется нынче так делать нельзя
onon Так а что за необработанные сообщения там остаются
orignal нет
orignal любой паукет который пришел и отправился после его использования попадает туда
onon А зачем
orignal для повторного использования рузмеется
orignal чтобы не выделять память
onon Пока не догоняю, что за пакет, который необходимо использовать дважды
orignal когда чего что испорльзуется много за короткое время есть смысл использовать пулы
orignal пакет не надо испольщовать дважды
orignal надо испольщовать память для него
onon А объём выделенной памяти от чего зависит?
orignal не от чего
orignal пакет выделили вернули в пул
orignal когда новый смотрим есть ли в пуле если есть то берем его если нет то выделяем новый
onon Это тебе наверное, лучше специалиста по C++ спросить. Как работать с памятью.
onon Я бы мог тебе подсказать как оптимизировать логику, но эту логику я не понял.
onon Тут с меня спрос невелик.
orignal тут логика такая что надо вызывать очистку по какому то другому критерию
orignal в другим места просто по времени
onon Так а если стримы есть живые и ты запустишь очистку, можно лишнее удалить
onon Или как-то разделять память на каждый стрим
orignal так смотри с ирком что получилось
orignal стримы то всегда есть живые потому отожранная память не чистится
orignal ладжно будут думать
onon А у жабы сборщик мусора, поэтому такой проблемы нет?
orignal та же самая поблема
orignal в приложениях на джаве тоже делают пулы
Vort "<@onon> Так а если стримы есть живые и ты запустишь очистку, можно лишнее удалить" я так понял, в пуле только мусор хранится
Vort "<~orignal> так что с очиткой пула пакетов будем делать?" можно следить за количеством выделенных объектов и количеством болтающихся в пуле
Vort сделать функцию частичной очистки и вызывать её при каком-то пороге отношения выделенных к мусору
orignal да нет я просто буду проверять по впемени
orignal если тупо прошло скажем 7 минут то чистить
orignal у меня в пуле количество не хвранится
Vort счётчики добавить не так уж сложно
orignal не вижу смысла
orignal пока сделаю так
Vort пилообразная работа пула - это как-то не супер. но лучше, чем залипание, конечно
orignal так у меня все пулы так работают по времени
coolaid Conversations-I2P is it no longer maintained?
orignal а x3
coolaid Version 2.13.0 is on froid purple repo, latest conversion version is 2.16.1
orignal will not work
orignal you need 2.53
orignal or at least 2.51
orignal сделал
onon Как думаешь, можно сделать так?:
onon if (!updated)
onon uint32_t i = m_LocalDestination.GetRandom () % leases.size ();
onon if (m_CurrentRemoteLease && leases[i]->tunnelID == m_CurrentRemoteLease->tunnelID)
onon // make sure we don't select previous
onon if (leases.size () == 1)
onon bool = false;
onon else
onon i = (i + 1) % leases.size (); // if so, pick next
onon m_CurrentRemoteLease = leases[i];
onon И менять туннель только если bool == true
onon Хотя бывают ситуации, когда он выбирает из двух заканчивающихся лизов, но всё же лучше, чем ничего.
orignal нельзя
orignal bool зарезевированное слово
onon Это условный bool
onon Я уже проверил - работает
onon Меняет только один раз
orignal ну а просто вместо него нельзя брать leases.size () == 1?
orignal там же мгновенная проверка
onon Это как
onon Ну так мне нужно дальше по коду
onon Если bool == true меняем туннель
orignal ну можно и так
orignal if (bool)
orignal не надо == true
onon Ну да
onon У меня так и сделано
orignal я в куче места так делаю
orignal но я бы проверял в начале
orignal if (!uodated)
orignal if (leases.size() == 1) bool = false;
onon Ага, кажется понял
onon Чтобы лишних действий не делать
orignal ну да