~AreEnn
~R4SAS
~orignal
~villain
&N00B
+Xeha
+relaybot
DUHOVKIN
Guest18377
HackerMan
KabaOS
Most2
Nausicaa
Ruskoye_911
Trusishka
Vort
`
acetone_
anon3
b3t4f4c3
flumental
mittwerk
nemiga
not_bob_afk
plap
poriori_
profetikla
segfault
soos
teeth
tensor
un
weko_
whothefuckami
onon
Нас тут всякие спамеры отвлекли, нужно бы со стримами разобраться. Как будет время, пара вопросов есть.
orignal
if (m_Streams.empty ())
orignal
{
orignal
m_PacketsPool.CleanUp ();
orignal
m_I2NPMsgsPool.CleanUp ();
orignal
}
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
{
onon
lastReceivedSeqn = m_LastConfirmedReceivedSequenceNumber + numPackets;
onon
if (!m_IsAckSendScheduled)
onon
{
onon
auto ackTimeout = m_RTT/10;
onon
if (ackTimeout > m_AckDelay) ackTimeout = m_AckDelay;
onon
ScheduleAck (ackTimeout);
onon
}
onon
}
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
{
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
}
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
{
orignal
if (leases.size() == 1) bool = false;
orignal
esle
onon
Ага, кажется понял
onon
Чтобы лишних действий не делать
orignal
ну да