IRCaBot 2.1.0
GPLv3 © acetone, 2021-2022
#dev
/2024/03/14
~R4SAS
~orignal
~villain
@onon
&N00B
+Xeha
+r00tobo
+relaybot
+whothefuckami
AreEnn
HackerMan
KabaOS
Leastr
Most2
Nausicaa
Vort
WayBest
`
acetone
anon2
b3t4f4c3
karamba_i2p
nemiga
not_bob
osoznayka
poriori
profetikla
segfault
soos
teeth
tolik
un
unwr
weko
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 ну или я что-то не учитываю, надо будет ещё разбираться
orignal нету его
orignal занят он
orignal он сказал посмотрит позже
Vort показался мне сомнительным код переотправки SSU2 пакетов. решил построить график нагрузки, по данным реального узла:
orignal и что предлагаешь?
Vort и таки увидел чётко выделяющиеся шипы. не знаю, может, это и не страшно, но мне не нравится
Vort попробовать сделать их чаще
Vort раза в 4 как минимум
Vort может в 10
orignal да можно
orignal и коэффициент может быть меньше
Vort я так понимаю, переотправка зависит от RTT, но таймер её иногда "округляет" до 400мс +- что-то там
Vort вот стоит попробовать вызывать его почаще, не меняя самих зависимостей
Vort но код я смотрел плохо, вполне возможно, что неверно всё понял
Vort но шипы, думаю, обнаружил всё же верно :)
orignal там у таймера свой интревал на переотправка
orignal раз в 150 миллисекуд вроде
Vort с небольшой рандомизацией, да?
orignal там variance есть
orignal чтобы усложнить анализ
Vort ну как видишь по графику...
orignal ну это логично
Vort короч я попробую чуть попозже покрутить там числа
orignal смысл в том чтобы не заводить на каждую сессию таймер
orignal потому то жрет дескрпторы
Vort я понимаю
orignal в SSU был на каждую сессию дескриптор и их постоянно не хватало
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 ты про поляков?
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 бага
Vort надо + 1 ?
orignal да конечно
Vort короч я опять узел вырубаю )
orignal давай
flumental круть какая, как же он так мощно дебажит
orignal ну еще бы
orignal он за месяц нашел багов больше чем я за пару лет
flumental надо узнавать что за методики
orignal наличие времени я бы сказал
orignal которого у меня нет
orignal и что мы имеем в итоге?
tetrimer Софт полный багов? :)
orignal ну по коретной проблеме
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 нагрузки на проц нет