~AreEnn
~R4SAS
~acetone
~orignal
~villain
&N00B
+Xeha
+relaybot
DUHOVKIN
Guest7184
Leopold
Most2
Nausicaa
Ruskoye_911
Vort
anon2
b3t4f4c3
karamba_i2p
nemiga
not_bob_afk
plap
poriori
profetikla
soos
teeth
un
weko_
whothefuckami
orignal
сделал
orignal
но как у тебя заставить считать RTT не знаю
orignal
посылается в SendQuickAck если ничего долго не посылалось
onon1
Посмотрю
onon1
requestImmediateAck = m_LastSendTime && ts > m_LastSendTime + REQUEST_IMMEDIATE_ACK_INTERVAL && ts > m_LastSendTime + REQUEST_IMMEDIATE_ACK_INTERVAL + m_LocalDestination.GetRandom () % REQUEST_IMMEDIATE_ACK_INTERVAL_VARIANCE;
onon1
Две проверки это чтобы рандом лишний раз не дёргать?
orignal
да
orignal
потому что это будет случаться редко
onon1
Угу
orignal
как запустить вычисление RTT я не знаю
onon1
Сейчас подумаю, как это можно сделать
orignal
проверил. запросы отправляются и аки на них приходят
orignal
когда радио слушаю
onon1
А я что-то сразу подумал, что он попадёт сюда:
onon1
if (lastReceivedSeqn < 0)
onon1
{
onon1
LogPrint (eLogError, "Streaming: No packets have been received yet");
onon1
return;
orignal
нет смотри что
orignal
я слушаю радио
orignal
оттуда приходят пакеты
orignal
я раз в 10 секунд вместе с отправкой акка отправляю запрос
onon1
Тут про то, сколько ты туда отправил пакетов
orignal
мне в ответ прилетает акк
onon1
Значит SYN считается
orignal
то есть все это работает
orignal
осталось замерять RTT
onon1
Да, мы уже работаем над этим
orignal
htobuf32 (packet + size, 0); // this is plain Ack message
orignal
size += 4; // sequenceNum
orignal
вот тут надо номер пакета ставить
orignal
а не 0
orignal
когда запрашивае
onon1
Да мы просто в void Stream::ProcessAck можем проверять packet->GetAckThrough () == 0
onon1
Ещё bool добавить, что мы что-то отправили
onon1
и проверять если bool==true && packet->GetAckThrough () == 0
onon1
Пока думаю так
onon1
Но это будет работать только если ничего не отправляли
orignal
так смотри мы туда номер пакета ставим
orignal
запоминаем его
onon1
А можно подумать ещё и сделать если долго ничего не слали просто
orignal
как только на него пришел ack это и будет RTT
onon1
Надо ещё подумать, время ещё есть
onon
Что-то мне кажется что вот эта штука не работает:
onon
if (!packet->IsNoAck ()) // ack received
onon
ProcessAck (packet);
onon
Как будто он туда все пакеты пихает
orignal
почему?
orignal
это же просто флаг
orignal
который толдко в SYN былвает
orignal
еще вариает есть
orignal
мы запрашиваем ack
orignal
если приходит без номера пакета то считаем его ответа
orignal
*ответом
orignal
if (!receivedSeqn && !packet->GetFlags ())
orignal
{
orignal
// plain ack
orignal
LogPrint (eLogDebug, "Streaming: Plain ACK received");
orignal
вот здесь надо замерять
orignal
полный порядок приходит точно в ту же секунду
onon
Он на каждый полученный пакет вызывает ProcessAck (packet);
onon
Разве так должно быть?
orignal
да
orignal
потому что реально в каждом пакете идет акк
orignal
а вот акк без пакета это как я показал вышел
onon
Угу
orignal
когда мы его запрашиваем мы сразу такой и получим и точное RTT узнаем
onon
Сервер иногда сам делает SendQuickAck ()
onon
Без нашего запроса
orignal
ну может совпасть
orignal
но редко
onon
Ну как сказать, та ситуация, когда он начинает слать каждый пакет в новый туннель как оказалось совсем не редкая
onon
И там же он делает void Stream::SendUpdatedLeaseSet ()
onon
И SendQuickAck ();
orignal
ну и что случится?
onon
Будет маленький RTT, будет слать ответ на каждый пакет
orignal
ну через 10 секунд исправится
onon
Эта ситуация может длиться минуту и больше
onon
Он как будто в цикл попадает
onon
Но бывает и быстро выходит
onon
Разобраться бы с этим
orignal
не праивльно это когда шлется ack на кажлый пакет
onon
Ну там же время "накопления" акков рассчитывается как RTT/10
onon
Если это будут единичные "случайные SendQuickAck ()" то можно просто сглаживать значения, и не будет влиять, а пока они шлются потоком с сервера.
orignal
я как мыслю
orignal
когда у нас поток в одну сторону с той стороны они вообще не должны приходить
orignal
или приходить крайне редко
onon
Я тоже так считаю, но он зачем-то делает SendQuickAck ();
orignal
так надо понять зачем и починить
onon
Залогируй у себя SendQuickAck (); на сервере
orignal
сделаю
orignal
то то и оно что я не увидел лишних
orignal
приходили ровно те которые запрашивались
onon
У меня он шлёт SendQuickAck () сразу после void Stream::UpdateCurrentRemoteLease (bool expired)
onon
Иногда шлёт один SendQuickAck (), иногда два
onon
А иногда входит в цикл
onon
И начинает слать на каждый пакет
orignal
вот с циклом надо разобраться почему
onon
Я пока другим занимаюсь, тогда отложим этот вопрос.
orignal
ну не торопись пока
onon
А, я понял. if (receivedSeqn <= m_LastReceivedSequenceNumber)
onon
UpdateCurrentRemoteLease ();
orignal
и?
orignal
потому что мы думаем что от нас аки не доходят
onon
Это не про цикл, это про то что нужно добавить проверку на ноль
onon
А то сервер воспринимает твои аки как сигнал для смены туннеля
onon
Если я правильно понял
orignal
нихуя
orignal
у меня же нулевой приходит
orignal
у нас же проверкуа на ноль перед этим идет
orignal
мы дотуда просто не дойдем
onon
У меня лог Duplicate message 0 on sSID=xxxxxx
onon
На сервере
orignal
надо понять где пролазит
onon
if (!receivedSeqn && !packet->GetFlags ())
onon
Значит packet->GetFlags
orignal
ха
orignal
именно так
orignal
надо дальше проверку значит
orignal
ладно завтра уже
onon
Угу
orignal
да неправильно с нулем
onon
Давай завтра уже
orignal
да
orignal
поправил
onon
И похоже что этот "цикл" это просто реакция на DELAY_CHOKING
orignal
вполне может быть
onon
Клиент на каждый акк шлёт DELAY_CHOKING и мы обрабатываем это как дубль...
orignal
там окно становится 1
onon
Да, и поэтому так долго не выходит из "цикла"
orignal
клиент на акк вообще не должен отвечать
onon
Ладно, спать уже нужно идти
orignal
завтра проверишь
orignal
вроде я все починил
orignal
кдиент ставит DELAY_CHOKING когда наков слишком много
onon
Я в курсе
Vort
теперь пинги через стримы раз в ~10 сек идти должны что ли?
Vort
смотрю вот на коннект с этим IRC сервером и ничего подобного не наблюдаю. активность где-то раз в минуту
Vort
хотя, кажется, понял. пинги только при ассиметричной активности. если активности нет вообще, то и пингов нету
flumental
в ирке пинги по протоколу положены, это не по инициативе i2pd
orignal
на этом серервер еше нет кода для ответа
orignal
пинги не отправляются отдельно а вместе с акками
Vort
так и задумано? то есть, нет активности - пофиг, какой RTT ?
Vort
(по другой теме) странную активность на ygg узле заметил. 5 мегов/сек транзита прёт уже довольно долго
orignal
ну да если нет активности то какая разница?
Vort
ок
Vort
(про ygg) 17 гигов кто-то протащил. примерно за час
orignal
с ygg все потому что я снарк гоняю на узле через ygg ))
orignal
и видимо не олин я
Vort
мне это больше на атаку кажется похожим
Vort
но посмотрим
Vort
пока жду
onon
Что-то у меня ничего не работает
onon
Сервер не делает SendQuickAck ()
Vort
транзит ygg`а прёт кстати между узлом acetone и узлом wipedlife
Vort
ygg - это не i2p, тут при желании источник найти можно )
onon
Лось, дай мне банхаммер
orignal
onon почему не делает?
orignal
у меня все делает
onon
Странно
onon
Вроде последний код накатил
onon
Буду разбираться
orignal
ты про ответ на запрос или что?
onon
Клиент шлёт запросы, но сервер не отвечает
orignal
счас проверим
orignal
да ты прав
onon
Вчера это работало, но через другой механизм
onon
А через флаги что-то не так
orignal
починю
onon
Ок
orignal
Streaming: Invalid option size 512 Discarded
orignal
вот в чем проблема
orignal
похоже наткнулись на более крупную багу
onon
Так это deprecated или просто у нас неправильно обрабатывается?
orignal
мы там неправильно поле option size формируем
orignal
наоборот
Vort
выглядит похоже на баг с BE / LE несоответствием
orignal
Vort не похоже
orignal
ощущеие что сдвиг на 1 байт где то
Vort
а, ну или так
orignal
сейчас мы стали в quick ack использовать и вот
orignal
думаю
orignal
причем ошибка это при формировании пакета я проверил
orignal
разберусь
orignal
все нашел багу
Vort
orignal: можешь напомнить условия при которых "клоны" (MogB, DtQs) в бан попадают? у меня довольно много валится в лог сейчас сообщний "Host mismatch" с ними. вот и думаю - или я раньше не обращал внимания или что-то поменялось в коде. ты же что-то с NTCP2
Vort
переделывал
orignal
я в NTCP2 просто сделал то же что в SSU2
orignal
разумеется будет валиться больше
Vort
а, окей
orignal
клоны попадают в бан когда в нетдб свежее чем приходит в SessionConfirmed
orignal
onon все забирай
orignal
починил
onon
Сча посмотрим
orignal
у нас получается и choking не работал
onon
А ловить его в таком случае где,
onon
if (flags)
onon
// plain ack with options
onon
ProcessOptions (flags, packet);
onon
else
onon
// plain ack
onon
LogPrint (eLogDebug, "Streaming: Plain ACK received");
onon
В смысле ответ
orignal
в ветке plain ack
onon
ок
orignal
там надо проверить что запрашивали ли мы
orignal
если запрашивали взять текущее время измерить rtt и что то с ним потом сделать
onon
угу
orignal
вот что я не знаю
orignal
иначе бы сделал ))
onon
Сейчас что-нибудь придумаем
orignal
я не знаю твой алгоритм как ты RTT вычисляешь
Vort
какой смысл с забаненными (IsDuplicated) роутерами вообще какое-то дело иметь?
Vort
не пойму, почему сразу функция на выход не идёт как такое попадается
Vort
требуется каждый раз чтобы сдвиг времени был
Vort
в итоге когда изредка сдвига нету, то прорывается мусор
orignal
надо глянуть
orignal
но я думаю чтобы избежать ошибочного срабаьывания
orignal
profile = i2p::data::GetRouterProfile (ri1->GetIdentHash ()); // retrieve profile
orignal
if (profile && profile->IsDuplicated ())
orignal
return;
orignal
ты про это?
orignal
скорее всего просто для усокрения
orignal
чтобы в нормальной ситуации профиль не дергать
orignal
и да надо завершать сесииб там
orignal
ну и потом в общем то пусть говно пролазит главное чтобы тоннели через них не строить
orignal
а так они ничем не мешают
Vort
в лог срут. может спустить Host mismatch с eLogError на уровень пониже?
orignal
можно
orignal
поправлю
orignal
ну и сделаю там где надо Terminate
onon1
Нет, смена лиза на каждый пакет никуда не делась...
orignal
это другая пробелема
orignal
ответы нормально приходят?
onon1
Да
onon1
И RTT считается
orignal
давай код тогда
orignal
с RTT
orignal
потмоу что это реально проблема
onon1
Ок, сейчас
orignal
надеюсь с последним моим коммитом
onon1
Уговорил, скачаю последний.
orignal
чтобы твои изменения были от него
onon1
Там ещё можно чуть лучше сделать, но это потом
orignal
счас закоммичу
onon1
Явароутер тоже отвечает, пересчитывается RTT
orignal
что то плохо работает
orignal
как только RTT становится нормальным сразу лагает
onon1
Что значит лагает
onon1
На каком туннеле, какая скорость
onon1
Пинг какой
orignal
пинг в районе 900
orignal
а счас вроде нормально
orignal
короче суть была
orignal
когда пинг 3 тыс то идет
orignal
а как RTT падает до 900 начинает лагать
orignal
вот счас RTT 600 и все рабоатет
onon1
А на том сервере ты обновил?
onon1
Потому что он там может туннели меняет
orignal
может просто тоннель неудачный
onon1
На каждый твой запрс
orignal
утром сегодня
onon1
Ну у меня вначале секунд 10 запинался, теперь идёт норм
onon1
932
orignal
а без твоего измененяи вообще не запинался
orignal
как может влияет RTT на лаги?
onon1
Если сразу посчитался неправильно, то будет задерживать акки
onon1
На сервере будет срабатывать RTO и будет туннели менять
orignal
так смотри что получаетчя наоброт
orignal
когда сразу большой то все идет без запинки
orignal
пока он не пересчитается до нормального и тут же начинает запинаться
onon1
Так быть не должно
onon1
Там есть некоторые проблемы у этого алгоритма, что он медленно разгоняется
orignal
счас проверю снова
onon1
Если вначале дроп поймал
onon1
Вот сейчас сразу без запинок пошло
orignal
проверим
onon1
Скоро доделаю новый алгоритм, должно стать немного лучше.
orignal
все в порядке
orignal
это у меня похоже были тоннели глючный
orignal
счас закоммичу
orignal
закоммитил
orignal
Vort я поправил
Vort
так в SSU2 то же самое
Vort
или там надо?
orignal
там еще не делал
orignal
если ты про уровень
orignal
в NTCP2 неправильно завершалось
Vort
про уровень
orignal
изменб в SSU2 при следующем измнениии там
orignal
все равно собираюст там чинить пир тест
Vort
потестировал немного радио, на 3 хопах. поначалу пинг прыгал 1000-2000, сейчас где-то на 600-700 стабилизировался
Vort
небось поначалу медленные туннели "отсеивались"
orignal
вопрос насколько стабильно играет
Vort
ну и буфер "нажрался"
Vort
ты же понимаешь, как буферизация обычно работает? каждое "заикание" в начале увеличивает задержку буфера. если в среднем туннель трафик выдерживает, то "стабильно" будет всегда
orignal
естественно
Vort
нажравшийся буфер только полный обрыв может опустошить
orignal
но у вот у меня регулярно буфер съедался по мере пересчета RTT
Vort
может у тебя клиент имеет лимит на лаг
Vort
у меня скорее всего не имеет
orignal
почему? может приходить медленнее
orignal
у меня файрфокс
orignal
пойду пересоберусь
hypn
<+sha512sum> pastebin.com/1xyiDVus В обще вот
hypn
<hypn> orignal: лови bt выше
onon
Дайте мне банхаммер
sha512sum
~orignal, что за хрень? Почему вы даже не проверяете варнинги компиляторов? Там они кучу варнингов везде насовали при сборке
sha512sum
libi2pd/RouterInfo.h и у RounterInfo дефолтное всё копирующее удалено по умолчанию.
sha512sum
А там default стоит
orignal
onon да зачем?
orignal
перебесится и престанет
onon
Ну ты видел, что он устраивает?
orignal
да он все время устраивает
onon
Ну все разбегутся
orignal
да нет это годами тут
onon
Смотри сам