IRCaBot 2.1.0
GPLv3 © acetone, 2021-2022
#dev
/2024/08/07
~AreEnn
~R4SAS
~acetone
~orignal
~villain
&N00B
+relaybot
Leopold
Most2
Nausicaa
Vort
Xeha
anon2
nemiga
not_bob_afk
poriori_
profetikla
soos
un
weko
whothefuckami_
orignal идея появилась
orignal а что если нам часть сообщений на ретрансмиссию отслыать вместе с потоком новых сообщений
orignal отправляем сообщеие или несколько смотрим
orignal нету ли чего по времени на ретрансмиссию если есть то отсылаем
orignal чтобы не выбрасывать пачками
orignal речь об SSU2 если что
orignal окзывается уже делаю только не так
orignal if (m_SendQueue.size () > 0) // windows is full
orignal Resend (i2p::util::GetMillisecondsSinceEpoch ());
orignal выкидываем кучу а потом еще кучу
orignal что неправильно
Vort "<~orignal> чтобы не выбрасывать пачками" видимые всплески от ретрансмиссий были убраны корректировкой частоты срабатывания таймера
Vort а чтобы оценить эффект от невидимых всплесков - это надо очень постараться
orignal проблема тут в том что они часто все враз выюрасываются
orignal по таймеру
orignal таймер же там для всех общий
Vort сразу, да, но раз в 40-50мс
Vort поэтому шип получается небольшой
orignal это я знаю
orignal и с лимитом 128 за раз типа того
Vort у меня когда я тестировал до лимита не доходило даже
orignal я же предлагаю проверять нету ли чего при каждом сообщении с интревалом 1 мс
orignal так а если тысчяи соединений?
Vort если прилепливать к отправкам, то это же при каждой отправке будет по всему окну итерации гоняться?
Vort не лучше ли таймер ещё чаще просто сделать?
orignal мне не нравится этот момент
orignal <orignal> if (m_SendQueue.size () > 0) // windows is full
orignal <orignal> Resend (i2p::util::GetMillisecondsSinceEpoch ());
orignal мы только что насрали так что окно забили да еше ретрасмисию делаем
Vort мне вообще привязка к отправкам кажется сомнительной
orignal я согласен что лучше к получению
orignal в метод Flush
orignal и проверять по времени когла последний раз делали
orignal при получаении кроме того что то почитится
Vort чем тебе не нравится делать перепосылки исключительно по таймеру (возможно, с бОльшей частотой)?
Vort да, там будут блоки слаться, но при высокой частоте они будут маленькие
Vort если мы предполагаем, что потери - это более-менее случайный процесс
orignal не нравится что может накапливаться много
orignal а если накопомится много мы выбросим пачку что не есть хорошо
Vort в любом случае, вопрос в том, с какой частотой будет делаться проверка на истечение таймаута
Vort и от этой частоты зависит средний размер пачки
Vort "<~orignal> и проверять по времени когла последний раз делали" - эффект будет такой же, как и у таймера. разве что, может, меньше ресурсов сожрётся. но, может, и больше
orignal разница будет
orignal 1. проверяться чаще
orignal 2. у разных сесиий в разное время
Vort частота зависит от выбора константы
Vort вот размазка по времени из-за разных сессий - это может быть полезно, да
Vort orignal: то есть, думаешь выкинуть Resend ( из PostI2NPMessages и перенести в FlushData ? и в придачу, сделать что-то по аналогии с if (ts >= it.second->GetLastResendTime () + SSU2_RESEND_CHECK_TIMEOUT)
Vort разве что таймаут для этого случая поменьше выбрать
Vort SSU2_RESEND_CHECK_TIMEOUT1 и SSU2_RESEND_CHECK_TIMEOUT2 допустим
Vort заметил кое что кстати
Vort как я понял, m_LastResendTime = ts; ставится только если был хотя бы один пакет переотправлен
orignal типа да
orignal нет я думаю в Post тоже оставить только провреять время
orignal не пытаться срать на каждом сообщении как мы счас делаем
Vort в итоге, есть риск получить долбёжку
orignal сделать время проверки не отправки
orignal проверяем не чаше чем раз в миллисекунду
Vort убрать LastResendTime вообще и сделать другую переменную?
Vort или она зачем-то ещё будет нужна?
orignal я не помню зачем у нас last resend time
Vort SSU2Server::HandleResendTimer
Vort глянь
Vort не совсем понимаю, зачем там эта проверка, правда
orignal вот я это и хочу переделать
orignal чтобы переотправка по таймеру было крайним вариантом
orignal когда активность низкая
Vort в общем, после этого обсуждения я думаю, что всё же стоит попробовать такое изменение
Vort но как тестировать - как всегда загадка
orignal как onon делал
orignal смотреть дропы на интерфейсе
Vort "<~orignal> когда активность низкая" плохо помню - ack`и тоже дадут активность? если в одном только направлении сессия работает
Vort просто подумал, не будут ли проблемы с привязкой к чтению, если только отправки будут
Vort хотя.. ты же хочешь в двух местах оставить, тогда нормально
orignal именно
Vort в таком случае остаётся вопрос производительности - не будут ли проверки тыщу раз в секунду сильно грузить проц
orignal ну активность низкая перепосылки делаем только по таймеру
Vort это я понял
orignal потому что например аки потерляись по дороге
Vort если будет высокая активность - и постоянно данные туда-сюда гоняться
orignal и выглядит так что данные не идут в обе стороны
orignal а если высокая вот и будем тут же делать перепосылки как время для них
Vort наверно только профилирование при высокой нагрузке покажет насколько такой метод ресурсоёмкий
Vort так не перепосылки же время жрать будут, а проверки "не сработал ли таймаут для этого пакета? а для вот этого?" тыщу раз в сек
orignal зачем? выкачу на флудфил и посмотрюб
orignal сколько тредж жрет
Vort но это решается просто подкруткой константы
Vort то есть, если константа 1мс будет слишком грузить, можно будет 2мс, 5мс поставить
orignal вот о том и речь
orignal я вооьще собираюсть начатьс 10
Vort окей
orignal ты последний коммит не пробовал?
orignal я там багу нашел
Vort на что смотреть? на ошибки в логе?
orignal на работу в целом
orignal на ту проблему с внезапными тормозами
Vort у меня только IRC активен и он как работал нормально, так и работает
orignal да я не про ирк а про высокогруженные
orignal я вчера ютуб на 480 гонял без лагов
Vort это вопрос к тем юзерам, которые попадали на проблему. у меня нету опыта взаимодействия с проблемой так сказать, поэтому и различия увидеть не могу
Vort но коммит поставил на свой узел
orignal вот у меня радио на 320 кбс
orignal я на нем обычно тестирую качество линка
Vort через браузер проверяешь что ли? мой браузер как-то неадекватно отреагировал на ссылку: сразу проигрываение не включил, а как включил, то секунду поиграл и завис
Vort AIMP же не поддерживает SOCKS прокси
orignal через http прокси
Vort VLC заработал с i2pd через SOCKS. через гугл найти это было почти нереально :(
Vort не сразу радио заработало, но сейчас уже нормально идёт. интересно, сколько секунд буфер плеер выбрал
orignal я с браузера пробовал
Vort сразу возник вопрос - ни на что лучше, чем mp3, народ так и не перешёл? хотя сейчас, наверно, юзеры и вобще не знают, какими кодеками они пользуются
Vort 10+ лет назад хорошо радио с AAC+ работало. но это проприетарщина и за столько времени явно что-то получше было придумано
orignal ну я не знаю это сделали много лет назад первое попавшееся для тестов
Vort за 15 минут тестов раза 4 затыкалось проигрывание. странность заметил, кстати: у стрима показывается RTT 1631
Vort так и стоит на этом значении
orignal интерсно почему у меня не затыкается
Vort туннели разные бывают, скорее всего
Vort ещё и подход к буферизации у плеера влияет
orignal у мпня на всех тоннелях получалось нормально
orignal моджет у тебя опять сеть перегружена?
Vort вообще, радио показывает две вещи - 1. может ли туннель вытянуть в среднем скорость 2. будет ли обрыв связи
Vort когда кто-то тащит торрент - тогда перегружена, но на отдачу, а не на скачку
orignal так на отдачу же ответы приходят
Vort могли торренты "выдавить" какой-то из туннелей, да
Vort но если буфер 30 сек, допустим, то радио много чего выдержать может )
orignal вот тут x3
Vort в каких-то плеерах, вроде, можно контроллировать буфер
orignal я вижу буфер примерно 8 секунд
Vort браузер показывает? как?
orignal там пишет сколько какое время счас играется и общее время ролика
orignal и они оба все время меняются
orignal и разницу примерно в 8 секунд
Vort браузер пишет?
orignal проигрыватель внутри него
Vort теперь у меня радио вообще заглохло, только изредка обрывки звуков пробиваются
Vort а лог засран сообщениями error - Streaming: Number of NACKs exceeds 256. seqn=45577 nextSeqn=45573
orignal вот с этим надо разб ираться
orignal где потери
Vort короч этот стрим уже не восстановится, похоже
Vort мне кажется, что потери были просто триггером
Vort который привёл к какому-то глюку в стримах
orignal ну вот надо понять причины
orignal это дропы в тоннеле или ошибки расшифровки
Vort [07/Aug/2024:17:16:44 +0300]@4/error - Streaming: Number of NACKs exceeds 256. seqn=46029 nextSeqn=46021
Vort [07/Aug/2024:17:19:45 +0300]@4/error - Streaming: Number of NACKs exceeds 256. seqn=46029 nextSeqn=46021
Vort 3 минуты прошло, а пишет одно и то же
orignal вот надо разбираться почему так
Vort только я собрался вырубать, как радио заработало нормально
Vort глюки минут 10 длились
Vort похоже на длительность жизни туннеля
orignal ну так надо смотреть почему в стриме так
Vort так если туннель не в состоянии передавать данные нормально, то что делать?
orignal стрим закрывать
orignal если такая хрень случилась
orignal либо переключать тоннели
Vort как я понимаю, сейчас переключение случается, если пакеты не идут вообще
Vort в случае с радио они шли, но с ужасной скоростью
Vort ну это мне так по внешним проявлениям кажется, может туннель и не виноват был, а это чисто глюк стримов
orignal вопрос почему на эту ошибку не среагировали должным образом
Vort хех. из-за 10 минут лагов, буфер на эти 10 минут и разжирел, похоже :)) сейчас данные через стрим вообще не идут, много туннелей сфейлилось, но музыка играет
Vort кончился буфер...
Vort короч багов дофига ещё
Vort небось, "та" сторона закрыла стрим. хотя это опять мои догадки
Vort можешь глянуть - жив ли стрим ещё с твоей стороны?
Vort Sent 496466 Received 100424216
orignal счас
orignal нет нету там стрима
orignal вот видишь как полезно смотреть
orignal новые баги сразу видны
Vort у меня стрим висит до сих пор. наверно onon таки воткнул в код конское количество перепосылок
orignal вот это надо срочно чинить
orignal такой хуйни быть не должно
Vort когда я настраивал, то целился где-то на 1-2 минуты попыток в худшем случае
Vort а в прошлых версиях его кода было ожидание около получаса по-моему
orignal так смотри если эта ошибка случилась сразу закрывать на хуй надо
` Есть здесь "убунтофилы"? Как долго мэйнтэйнер будет обновлять пакет?
orignal какой?
` i2pd
` 2.52.0 до сих пор
Most2 13.<douknowwatusee> > *`:* Есть здесь "убунтофилы"? Как долго мэйнтэйнер будет обновлять пакет?
Most2 13.<douknowwatusee> В дебиане до сих пор 2.43 лежит))
Vort стрим до сих пор висит :) и постоянно что-то отправляет. это уже даже для повышенного количества перепосылок как-то дохрена
Vort попробую warn уровень логов включить, может понятнее станет
orignal это явная лажа
Vort Streaming: LeaseSet was not confirmed in 4000 milliseconds. Trying to resubmit
Vort вот что он шлёт оказывается
Vort resend`ы уже делать и не пытается
Vort кстати, кое что ещё в логе увидел
orignal что?
Vort "I2PTunnel: Stream read error: Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного ко
Vort мпьютера"
Vort но я не знаю, есть ли связь этого сообщения с зависанием стрима
orignal это таймаут
Vort откуда? сокс коннект живой. вижу эти сообщения с интервалом в час. адресная книга может таймауты выдаёт?
Vort IRC тоже не отваливался
Vort ну короч с зависанием стрима, скорее всего, связи нету. хотя фиг знает
Vort проверю сейчас, не переглючило ли вообще прокси целиком - попробую открыть reg.i2p
Vort reg открылся. значит проблема локальна для конкретного стрима
Vort кстати, бесконечные попытки отправки лизсетов мы когда-то обсуждали
Vort конечно, можно туда какую-то защиту воткнуть, но всё равно надо понять, почему не сработали другие механизмы завершения стрима
orignal начинать надо с рекацию на ошибку с nack-ами
Vort так после неё же стрим восстановился, значит ошибка не критичная
Vort правда потом всё же завис
orignal причем очевидно что на той стороне он закрылся
orignal то есть туда FIN дошел
Vort закрылся он явно после этих ошибок
Vort потому что понемногу пакеты всё же просачивались и номера пакетов в ошибках двигались
orignal реально ситуация когда помежуточный узел не держит поток
Vort понятно, что что-то пошло не так, но не непосредственно во время этих сообщений, а позже
Vort точнее, "не держит поток" это проблема, но не критичная. а вот последующее зависание - уже похуже
Vort короч, мне кажется что эти ошибки с NACK`ами - это предусмотренный режим работы нынешнего алгоритма стримов
Vort если что-то не тянет, то должна сбавляться скорость, как я понимаю
orignal вот x3
Vort для юзера радио - это, может, глупо. но в целом - нормально
orignal говорю же в стримах море ошибок
Vort стоит разделять "стрим не смог правильно сделать то, что пытался" и "стрим не должен был делать то, что делал"
Vort первую категорию проблем я кое-как ловить умею
Vort а вот со второй - сложнее, так как ответ на вопрос "а как же надо было делать?" часто очень непрост
orignal ладно посмотрю попозже
orignal счас занят
orignal смотри тут в чем дело
orignal LogPrint (eLogError, "Streaming: Number of NACKs exceeds 256. seqn=", seqn, " nextSeqn=", nextSeqn);
orignal choking = true;
orignal htobuf16 (packet + size, choking ? PACKET_FLAG_DELAY_REQUESTED : 0);
orignal это команда притозмозить
orignal я когда то ее делал
orignal надо смотреть как она реализована
orignal а дальше начинается код
orignal if (flags & PACKET_FLAG_DELAY_REQUESTED)
orignal и мы там сбрасываем окно
Titlacahuan ещё что крутое можно сделать upower.freedesktop.org
Titlacahuan 'LidIsClosed' read 'b'
Titlacahuan 'LidIsPresent' read 'b'
Titlacahuan узнать если лаптоп закрыт
Vort orignal: я немного протупил с анализом проблемы стрима к радио. конечно, у меня не будет перепосылок - посылать то нечего. это радио только посылает
Vort и если пакет с закрытием стрима от радио просрался - вот и висит себе стрим
orignal так ясен пень что он просрался
orignal так а если ты закроешь проигратаель что будет?
Vort я закрыл VLC, через некоторое время (минуту?) стрим закрылся
Vort так что с этим проблемы нету (ну почти)
orignal а ну тогда нормально
orignal в теории стримы могут висеть годами ничего вообще не посялая
orignal у них нет требования
orignal но вот если лизсет не подтверждается то надо закрывать
Vort это получается единственный вариант?
Vort как-то через жопу. но ладно. тут много чего через жопу
orignal ну а как иначе?
orignal с TCP не видел такого никогда что ли?
orignal выдергиваешь кабель наружу из роутера а сокет у тебя висит открытй
orignal пока сам сокет не закроешь так и будет стоять хотя соединения давно нет
Vort я плохо понимаю эту часть, но нельзя ли вместо _не подтверждения_ лизсета какую-то ошибку присылать?
orignal кто ее пришлет?
orignal потому в прикладных протоколах и сделаны хартбиты
Vort я когда-то видел зависшие TCP коннекты, верно, но чтобы вот так скачка файла, допустим, зависла - ни разу. но наверно просто в качалках таймауты
Vort HTTP тупой, нет там хартбитов и всё же работает довольно нормально
orignal там есть таймауты насклоолько я знаю
orignal точнее в брауезрах
orignal потому что в времена диалапа они часто выпадали
orignal ну так ты попробуй у себя
orignal возьми начни скачивать а потом из роутера выдерни кабель который идет к провайдеру
Vort в общем, понятно, с обычным TCP в такое реже попадаем из-за меньшего количества потерь и из-за таймаутов в софте
orignal нет из-за того что почти у всез приложений или хартбиты или тайауты
orignal вот FIX например он стоит по многу часов без разрыва соединения
orignal и там по харбитам отвалы случаются
orignal так что тут с лизсетами самое то
orignal а еще я собираюсь на уровне чесночных сессий слать харбьиты
orignal а стримы должны проверять нету ли зависшегоэ
orignal если есть то или пыптаться переключаться или закрывать
Vort может так и пинги при односторонней передаче можно получить?
Vort а то с этим явно проблемы в стримах
Vort с HTTP только при запросе можно RTT посчитать
Vort но потом же кучу раз туннели меняются, а RTT так и стоит старый
Vort а если он ещё и определился криво, так ещё хуже получается
orignal как раз у стримов есть пинги
orignal но та сторона отвечать на них не обязана
orignal я могу RTT на уровне сессии считать
Vort и потом подмешивать эти данные к RTT, определённым традиционным методом?
orignal не знаю
orignal просто говорю что могу сделать чтобы с сессии брать
Vort ну я имею в виду - как замену или как дополнение?
Vort опять же - в этой части кода я плохо разбираюсь
orignal как дополнения для расчета RTO
orignal второй источник типа
Vort окей
orignal когда поток малый что выборка для RTT низкая
Vort мне кажется, что стоит для начала попробовать реализовать идею с привязкой перепосылок к чтению и отправке в SSU2
Vort так как со стримами это можно вляпаться надолго
orignal само собой
orignal ну идея с харбитами у меня уже давно
orignal как я занимаюсь I2CP в последнее время
orignal потому что в отличие от стримов там нет возможность определить что потом не идет
orignal только на уровне сесии
Vort пока копался в логах, заметил ещё одну проблему: волны сообщений вида "SSU2: Send exception: Требуемый адрес для своего контекста неверен to 0.0.0.0:27028". помню, подобную фигню мы уже чинили, но, видимо, не дочинили
Vort или это что-то похожее просто
Vort из-за волнообразного характера ловить отладчиком будет сложно, но, может, я и попробую
orignal давно пытаюсь поймать
orignal ты скажи лучше были ли ошибки расшифровки
Vort какой уровень? error ?
Vort "Garlic: Can't handle ECIES-X25519-AEAD-Ratchet message" сыпятся, я об этом говорил
Vort а про другие не знаю
orignal про них
orignal интересно почему они у меня не сыплются?
Vort связь надёжнее, может
orignal так понять бы еще что это такое
orignal дубликаты или реальные данные
Vort мы же когда-то разбирались с дублями и ничего с тех пор не менялось в этом отношении
Vort вот и ошибки остались на месте
orignal так я счас нашел неправленую отправку тагов
orignal начать надо с вопроса откуда они вообще бурется
Vort так эти дубли то _приходят_
orignal так как они возникают?
Vort уже не помню подробностей
Vort любой пакет же может продублироваться?
Vort может, перепосылки влияют. сейчас не соображу
orignal короче проблемы в SSU2 изначально
orignal получается
Vort думаю, что да, но доказательств нету
Vort у меня же эти ошибки тоже волнами идут
Vort вполне может быть, что волну пускают качальщики торрентов
Vort можешь попробовать себе сеть как-то подгрузить - может и у тебя сыпаться начнут
orignal у меня не прогрузишь 1.5 гигабита
Vort тогда есть ещё вариант виртуалки с wanem/netem и потерями. но это морочливо настривать правда
orignal я вот думаю может фильтр блума воткнуть?
Vort этого не знаю, не разбирался ещё с ним
orignal ну записывать те таги которые уже обработаны
orignal и дропать дубликаты сразу
orignal std::set<uint32_t> m_OutOfSequencePackets;
Vort вроде что-то похожее и было
orignal у меня в SSU2 такая хуйня есть
orignal нет в чесноках точно этого нет
Vort но ещё же и коллизии бывают - можно дропнуть правильный пакет
Vort хотя... я наверно фигню говорю
orignal это при реальном блум фильре
orignal в std::set
Vort я просто припоминаю ситуацию, когда происходили коллизии id-шек у сообщений
Vort и вот тогда детекты дубликатов создавали проблемы
Vort может, данного случая это и не касается
Vort id ведь рандомно генерятся? поэтому может прийти два разных пакета с одним и тем же id
Vort детектор дубликатов же один из них грохнет
orignal так таги генерятся я не помню
orignal счас скажу
Vort и сразу глянь сколько бит у id
Vort если 32 и рандом - то будут проблемы. если 64, то и рандом не страшен
orignal i2p::crypto::HKDF (m_SessionTagKeyData, m_SessTagConstant, 32, "SessionTagKeyGen", m_SessionTagKeyData); // [sessTag_ck, tag] = HKDF(sessTag_chainkey, SESSTAG_CONSTANT, "SessionTagKeyGen", 64)
orignal ну случайно
orignal там HKDF
Vort uint64_t RatchetTagSet::GetNextSessionTag ()
Vort но 64 бита. так что коллизии не страшны
orignal угу
orignal так и есть