~AreEnn
~R4SAS
~acetone
~orignal
~villain
@onon
&N00B
+relaybot
DUHOVKIN_
Guest7184
Komap-
Most2
Nausicaa
Nikat
Ruskoye_911
Vort
Xeha
anon3
b3t4f4c3
fidoid
karamba_i2p
nemiga
not_bob_afk
plap
poriori
profetikla
qend
segfault
soos
teeth
tetrimer_
uis
un
unlike
user
weko
whothefuckami
Vort
не пойму кое чего: в каких случаях SSU2 надёжен, а в каких - ненадёжен?
Vort
перепосылка пакетов по 5 раз и в то же время дропанье сообщений из очереди как-то плохо друг с другом сочетаются
orignal
почему? просто надо интревалы подобратьб
orignal
и ддопать не по константному времени а по RTT
Vort
потому, что перепосылка - признак надёжного протокола, а дропы - признак ненадёжного
Vort
поэтому и спрашиваю "в каких случаях SSU2 надёжен, а в каких - ненадёжен?"
Vort
не могу понять общей идеи
orignal
ну в i2p дропы по уму надо и в NTCP2
orignal
а так нет SSU2 считается ненадежным
Vort
тогда чуть другая вариация моего вопроса - зачем ненадёжному протоколу ACK-и ?
Vort
ну и перепосылки соответственно
orignal
ну он частично надежный как все в i2p
Vort
вот я и хотел бы понять, где эта грань проходит. возможно, позже
Vort
ещё один вопрос
Vort
(сейчас напишу)
orignal
еще на забывай что в SSU2 не гарантируется последовательность
Anonymous
orignal pedophile uses I2P to share cute lolis
Vort
какую ситуацию пытается словить вот этот кусок кода? полную потерю связи? высокий процент потерь пакетов? github.com/PurpleI2P/i2pd/blob/530a078535e304e5b6e759e72835aae5a5203ad9/libi2pd/SSU2Session.cpp#L542-L550
orignal
полня потеря связи
Vort
понятно. скорее всего, её можно словить быстрее
orignal
раз нет ответа на послыки то все
orignal
кстати для того и акки нужны
orignal
чтобы регулировать скорость и не засирасть сеть
Vort
потому что следующий уровень абстракции не может? )
orignal
это не его задача
Vort
для полной потери связи есть более жёсткое условие - ни один пакет не был ack`нут за какой-то промежуток времени
Vort
"<~orignal> это не его задача" ну в стримах же есть congestion control хоть какой-то
orignal
но а если не стримы?
orignal
если передача тоже идет датграммами?
Vort
ну юзерская программа тоже бездумно не должна валить пакеты. короч это защита от дурака, понятно. ладно
Vort
над потерей связи же стоит подумать - мне не кажется нормальным ждать секунд по 10 перепосылки
orignal
а там разве 10 секунд?
orignal
там же вроде экпоненциально
Vort
в некоторых случаях вся вот эта экспоненциальность в сумме получается = дофига
Vort
можно конечно разбираться, почему...
orignal
надо просто подобрать начальныее значиния и коэффициенты правильно
orignal
я же там от фонаря поставил
Vort
мне не нравится, что остальные пакеты могут ack`аться, а один какой-то невезучий застрять и это будет расценено как обрыв связи. ситуация глубоко теоретическая, понимаю, но всё же
Vort
ну или я что-то не учитываю, надо будет ещё разбираться
_WebGuest_
R4SAS
orignal
нету его
orignal
занят он
_WebGuest_
ok
orignal
он сказал посмотрит позже
Vort
показался мне сомнительным код переотправки SSU2 пакетов. решил построить график нагрузки, по данным реального узла:
orignal
и что предлагаешь?
Vort
и таки увидел чётко выделяющиеся шипы. не знаю, может, это и не страшно, но мне не нравится
Vort
попробовать сделать их чаще
Vort
раза в 4 как минимум
Vort
может в 10
orignal
да можно
orignal
и коэффициент может быть меньше
Vort
я так понимаю, переотправка зависит от RTT, но таймер её иногда "округляет" до 400мс +- что-то там
Vort
вот стоит попробовать вызывать его почаще, не меняя самих зависимостей
Vort
но код я смотрел плохо, вполне возможно, что неверно всё понял
Vort
но шипы, думаю, обнаружил всё же верно :)
orignal
там у таймера свой интревал на переотправка
orignal
раз в 150 миллисекуд вроде
Vort
с небольшой рандомизацией, да?
orignal
да
orignal
там variance есть
orignal
чтобы усложнить анализ
Vort
ну как видишь по графику...
orignal
ну это логично
Vort
короч я попробую чуть попозже покрутить там числа
orignal
смысл в том чтобы не заводить на каждую сессию таймер
orignal
потому то жрет дескрпторы
Vort
я понимаю
orignal
в SSU был на каждую сессию дескриптор и их постоянно не хватало
Vort
в 5 раз повысил частоту: github.com/Vort/i2pd/commit/125128260add73b1543aebcebc1722da778c89e3
Vort
предварительно график выглядит намного лучше. но узел пока ещё не прогрелся, так что подожду пока что
Vort
вот новый график. всё ещё шипастенько, но уже не так бьёт в глаза:
Vort
дохрена что-то перепосылок, кстати. особенно, учитывая, что это по таймеру
orignal
что поменял?
orignal
может входящий буфер переполняется?
Vort
сейчас ещё в 2 раза повышу частоту
orignal
а тред проц не жрет?
orignal
еще вот такая штука есть
orignal
const int SSU2_RESEND_CHECK_MORE_TIMEOUT = 10; // in milliseconds
Vort
я подозреваю, что 400..500мс это было просто неадекватное значение. пинги то в разы ниже
orignal
когда надо слишком много перепосылать мы через время
Vort
да, я видел эту "штуку"
orignal
const size_t SSU2_MAX_RESEND_PACKETS = 128; // packets to resend at the time
Vort
видел, видел
Vort
тред не жрёт
Vort
но у меня плохие условия для проверки
orignal
это по уму надо от размера буфера на отправку считать
orignal
давай того PR
Vort
с более высокой частотой так много наливаться просто не будет
onon1
Не торопитесь
orignal
а то я на след неделе на бора бора еду ))
onon1
Там в другом проблема
onon1
Там так же RTT криво считается.
Vort
эти шипы - проблема сама по себе
Vort
если ещё одна - значит, ещё одну чинить
Vort
но шипы - это хреново в любом случае
onon1
Там переполнения и тейлдропы на промежуточных маршрутизаторах из-за бёрстов
onon1
От этого и перепосылки
orignal
ну так одно другому не мешает
Vort
onon1: ну вот у меня на графике ~120 пакетов за раз ушло. это так тяжко для маршрутизаторов?
Vort
я тоже об этом думал, но решил, что должно быть редкостью
onon1
Да, ты там не один
Vort
ну значит сглаживаю дальше. 80.100 -> 40..50
onon1
Нужен пэйсинг, но как его реализовать...
onon1
Можно использовать встроенный в ядро, но это зависит от машины.
Vort
ну вот этот вот SSU2_MAX_RESEND_PACKETS - это и есть он. или нет?
onon1
Нужно бы его в юзер-спейсе реализовывать
onon1
Пока всё не очень обнадёживающе. Можно сделать лучне, но похоже не получится сделать хорошо.
orignal
да это сколько за раз
Vort
ну вначале надо явные косяки убрать, а потом уже полировать
Vort
полировать косяки - это выходит не супер )
Vort
тот же рандомизированный дроп. надо вначале понять, в каком месте SSU2 надёжный, а в каком - нет
onon1
Во-первых нужно сделать нормальный расчет rtt
onon1
Я как раз сейчас над этим работаю.
Vort
если ненадёжный, так в саму перепосылку пакетов эту ненадёжность и внедрять, а не в хвост очереди
Vort
(я в перезапуск с новым таймером)
Vort
"<onon1> Я как раз сейчас над этим работаю." - разобрался, где сигнал, а где шум у фильтра? (я ещё не добрался до этого)
onon1
Тут мы аски получаем с задержкой
onon1
Как считать RTT?
Vort
это которая 1/10 от RTT ?
Vort
не понял, о чём вопрос
onon1
In cases without ACK block loss, this algorithm allows for a minimum of 1 RTT of reordering.
onon1
Там ещё ожидание из-за перестановки
Vort
это откуда? из стандарта SSU2 ?
onon1
Чтобы сразу не запрашивать пропущенный
onon1
да
Vort
понять, где чистый результат, а где - нет - можно?
Vort
короч, видимо, пока (если) сам не покопаюсь, то нормально обсудить не смогу :(
onon1
Вот я над этим и думаю.
onon1
Похоже, ближайший к истине RTT это наименьший в аске
Vort
из тех обрывочных сведений, на которые я попадал, делаю вывод, что оценка RTT - это один из самых важных элементов алгоритма
Vort
если стандарт не позволяет это чётко сделать, то хреново
orignal
в SSU2 ничего про это нету
orignal
я про принципу сделал "хуяк хуяк и в продакшен"
orignal
часть кода тупо со стримов скопировал
Vort
важнее не то, что в i2pd, а то, что в стандарте (протоколе)
Vort
починить i2pd в разы проще, чем стандарт
flumental
А зачем на бесплатные хостинги ставить i2pd? Я только сейчас задумался, а что мне с этим делать. Сервисы разворачивать будет не особо удобно без веб-интерфейса с регистрацией адресов, разве что какой-нибудь ssh over i2pd да и тот смысла
flumental
не имеет т.к. я адрес свечу во время настройки
orignal
а стандарт этого не описывает
orignal
flumental ты про поляков?
flumental
да
orignal
ну это само по себе прикольно
orignal
что там привязка к портам не работает
orignal
во вторых там freebsd
orignal
короче тестовая конфигурация
orignal
у меня там ничего и нету только серверный тоннель с щифрованным лизсетом
orignal
помнишь я хотел на твой сайт направить по localhost так ты был против
flumental
ну у меня падаван тугой. Он до сих пор пишет софтину, а у поляков до сих пор заготовка для его сайта висит
orignal
ну ты спросил зачем i2pd
orignal
там
flumental
это у меня давным давно была мысль, что если у меня круглосуточный сервер появится - сделаю на нем некий прибыльный проект или сервис в даркнете, может общалку какую повешу. С тех пор я обзавелся парочкой круглосуточных серверов
flumental
и понял что одного их наличия недостаточно чтобы мне платили миллионы
orignal
ну сделай торговую площадку )))
Vort
orignal: то ли я вижу косяк, то ли что-то не учитываю. сейчас вопрос подготовлю )
orignal
ждем-с
Vort
SSU2SentPacket numResends ведь нулём инициализируется?
orignal
естественно
flumental
апасно! вдруг прищучат. Я хотел что-то хотя бы делающее вид что оно законное
Vort
то есть, отправили пакет, там ноль. окей
orignal
при каждом ресенде инкремент
Vort
дальше по таймеру вызываем Resend и первым делом попадаем на проверку
Vort
if (ts >= it->second->sendTime + it->second->numResends*m_RTO)
orignal
первый раз это не ресенд
orignal
ха
orignal
ты прав
orignal
бага
Vort
:)
Vort
надо + 1 ?
orignal
да конечно
Vort
короч я опять узел вырубаю )
orignal
давай
flumental
круть какая, как же он так мощно дебажит
orignal
ну еще бы
orignal
он за месяц нашел багов больше чем я за пару лет
flumental
надо узнавать что за методики
orignal
наличие времени я бы сказал
orignal
которого у меня нет
orignal
и что мы имеем в итоге?
tetrimer
Софт полный багов? :)
orignal
ну по коретной проблеме
Vort
вот такой график получается: paste.i2pd.xyz/?d0ee4cfbd673b016#2bVUqW66WDpMFfJWeNLxpU24X1vy8zE71DKUCYZqKjqC
Vort
с вот таким коммитом: github.com/Vort/i2pd/commit/0236769134be393cc2cd5a9dcebf79c02001384d
Vort
периодичности уже почти незаметно
Vort
только вот как-то тихо на графике стало. не доломал ли я код? надо чтобы ещё кто-то тестировал, в общем
orignal
давай PR сделай
orignal
хуже не будет
tetrimer
Сейчас попробую приложить...
orignal
но мне кажется 40 маловато
orignal
скажем от америки до австралии
tetrimer
Поставил 80 и 20 соответственно.
Vort
вот ещё один график сделал, то же самое, только на несколько минут позже: paste.i2pd.xyz/?9352b2e0d7e121bf#71KSzNaNmhrrbLW5thLs6Ta7zE4gBranhDhhhT7QJSm2
orignal
неплохо
Vort
"<~orignal> скажем от америки до австралии" ну так просто не сработает условие if (ts >= it->second->sendTime + (it->second->numResends + 1) * m_RTO)
Vort
я правильно понимаю, что можно хоть каждую миллисекунду проверять, просто ресурсов процессора жалко?
orignal
а ну да то просто для таймера
orignal
все понял
Vort
ну тогда сделаю PR. но потестируйте :)
orignal
вот на живйо системе и протестируем ))))
tetrimer
Пересобрал, даже запустилось.
orignal
счас у поляков попробуй на той доходяге
orignal
кстати я думаю я те константы взял не от фонаря а скопировал с SSU1
Vort
tetrimer: вижу там на графике период без транзита. так и надо?
tetrimer
Да, это я днем версию хотел поменять, а там мой клиент со стримом долго висел.
Vort
а, сейчас будет с транзитом. понял
tetrimer
Полчаса - полет нормальный.
Vort
у меня чуть ниже рейт и чуть ниже транзитный трафик. но повлияло изменение или это из-за рестартов / из-за другой нагрузки сети - не знаю
Vort
подозреваю, что узлы могли "привыкнуть" к лишним перепосылкам
Vort
ну или может ещё где-то баг вылез, который ранее был скрыт из-за редкого срабатывания таймера
Vort
и ещё один видимый эффект - теперь часто входящий трафик выше исходящего. то есть, перепосылок стало заметно меньше
tetrimer
Привыкнуть - вряд ли: не умеет пока программа сама адаптироваться, если в ней такого алгоритма не заложено.
tetrimer
Тут, скорее, надо подождать пока версия с измененными таймингами расползется по пользователям.
tetrimer
У остальны-то эти самые тайминги и перепосылы - пока старые.
orignal
счас я пересоберу и запуща на узле где чисто SSU2
orignal
вроде порядок
orignal
нагрузки на проц нет