IRCaBot 2.1.0
GPLv3 © acetone, 2021-2022
#dev
/2024/02/20
~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
orignal i2p::context.GetCongestionLevel (false) < 100
orignal что за магическое число?
orignal m_ShareRatio == 0 можно написать !m_ShareRatio
orignal смержил но для уровней сделай константы а не магические чила
orignal блять винда это пиздец
orignal короче если во время сихронизации часов она была выколючена то при следующем старте она не сихронизирует
orignal запускаю счас на виндовом ноуте и получаю clock skew
Vort 100 значит узел на 100% загружен. < 100 - значит не на 100%. иногда могут быть значения больше 100, но они обрабатываются так же, как и 100
Vort ну вот из-за подобных приколов я и поставил себе ntpd, отрубив стандартную синхронизацию
orignal ну вот бы хорошо сделать константы и написать комментарий что это проценты
Vort сделал PR про буквы трафика. если получится придумать вариант получше, этот PR можно будет закрыть
Vort по поводу констант - займусь завтра если ничего не помешает. сейчас поставил себе дефрагментацию дисков - она не даст нормально сборку делать
orignal auto router = i2p::data::netdb.FindRouter(identHash);
orignal это ж тормоза будут
Vort так это же в UI
Vort на него примерно пофигу
orignal ну все равно
orignal а если какой нибудь мегамозг начнет дергать curl-ом постоянно
Vort ну тут и преимущество есть - актуальные данные
Vort допустим, congestion посреди работы туннеля поменяется
orignal а если нету в базе?
Vort тогда не отобразится
Vort но это редко случается
orignal там же есть обратное преобразование с флажка в букву
Vort там данные теряются
Vort так что не выйдет
orignal void LocalRouterInfo::UpdateCapsProperty ()
Vort CAPS_FLAG_HIGH_BANDWIDTH1 CAPS_FLAG_HIGH_BANDWIDTH2 CAPS_FLAG_HIGH_BANDWIDTH3
orignal почему теряюются?
Vort так нам не Local надо
orignal там все эти M и N не нужны
orignal какая нам разница?
Vort P и X склеиваются. M и O. это большая разница
Vort особенно учитывая найденные кластеры
Vort помнишь кластер тормозных P узлов?
orignal P и X нет
Vort CAPS_FLAG_EXTRA_BANDWIDTH1 и CAPS_FLAG_EXTRA_BANDWIDTH2
orignal да возможно
orignal это неправильно в коде
orignal if (c & eExtraBandwidth)
orignal caps += (c & eHighBandwidth) ? CAPS_FLAG_EXTRA_BANDWIDTH2 /* 'X' */ : CAPS_FLAG_EXTRA_BANDWIDTH1; /*'P' */
orignal при публикации мы вот так делаем
orignal X только если оба флага
orignal надо и при чтении сделать
orignal насчет M считаю что надо поменять разбивку
orignal M считать L
orignal а N считать O
Vort там путаница просто
Vort для своего RI одна разбивка, для чужого - другая
Vort в void RouterContext::SetBandwidth (char L) соответствующий код
orignal ну я знаю почему так
orignal мы просто не учитываем M и N
orignal считаю что у нас вообще быть не должно их
Vort решил глянуть как в java. ещё большую странность нашёл
Vort CAPABILITY_BW512 = 'P'
orignal ну и еще P и X позже
orignal более того они раньше были всегда обязательно вместе с O
Vort насколько было бы проще всё, если бы скорость изначально была числом. ну или хотя бы степенью двойки (логарифмом)
Vort в принципе, в коде и можно сделать число. а когда нужно взаимодействие с "внешним миром" - конвертировать
orignal модно наверное но я изначально об этом не подумал
orignal 10 лет назад
orignal дожили. тор не может запуститься
relaybot 13mauzer: хихик
relaybot 13mauzer: наконец то цивилизация дошла до канады
orignal I learned some more directory information, but not enough to build a circuit:
orignal я тут прокси запилил через локальный сокет так не могу проверить
orignal все сделал поддержку апстрима для сокс через локальный сокет
orignal в outproxy пишем путь к файлу
orignal в outproxyport пишем 0
orignal под виндой разумееется облом
relaybot 13mittwerkz: это че ваще за инфа?
relaybot 13mittwerkz: > orignal: все сделал поддержку апстрима для сокс через локальный сокет
relaybot 13mittwerkz: а зачем?
Vort собрал данные по загрузке O узла за 12 часов: paste.i2pd.xyz/?e4775ef774841db5#Gr4LwYrnjjWKvYZLMZN946RmXBRTR7yg5HfBwx2gZHy1
Vort сейчас посчитаю, какая средняя скорость была
Vort 10.45 * 1024 * 1024 / 12 / 60 / 60 = 254 килобайта/сек
Vort удивляюсь, откуда такая точность получается. для L узла тоже точно было (если без ошибок посчитать)
weko [00:36:38] <orignal> auto router = i2p::data::netdb.FindRouter(identHash);
weko Всм тормоза? Там что, не unordered_map?
weko [00:41:55] <Vort> P и X склеиваются. M и O. это большая разница
weko Склеиваются? Чо?
weko [00:46:01] <orignal> насчет M считаю что надо поменять разбивку
weko Чтобы проверить просто в доки джавистов можно посмотреть.
weko [00:59:11] <orignal> считаю что у нас вообще быть не должно их
weko Пох, ничем не мешают особо, раз были то и пусть будут
weko [01:06:18] <Vort> насколько было бы проще всё, если бы скорость изначально была числом. ну или хотя бы степенью двойки (логарифмом)
weko [01:07:07] <Vort> в принципе, в коде и можно сделать число. а когда нужно взаимодействие с "внешним миром" - конвертировать
weko Так я об этом и говорил. Убрать из доков буквы, сделать числа. А буквы оставил для совместимости
weko Vort: ну, потому что среднее за 12 часов
weko Vort: и жирных туннелей, видимо, не было
Vort ну я говорю о том, что и в коде можно сделать основным методом хранения число
Vort если хранить килобайты/сек, то в 2 байта влезет лимит 64 мегабайта/сек. не скоро до таких чисел дойдём
Vort получается два положительных свойства: 1. можно сравнивать с человекочитаемым значением 2. полностью без потерь кодирует любую букву лимита
Vort "<weko> Vort: ну, потому что среднее за 12 часов" выходит, что "перелёты" и "недолёты" практически идеально компенсируются. я ожидал, что будет среднее значение куда-то перекашивать
weko Ну потому что перелётов и не было особо
onon1 Имхо, нужно 24 часа. В течение суток трафик неравномерный.
Vort onon1: ну мне было интересно проверить гипотезу о том, что O узлы упираются в лимит. допустим, они это половину суток только делают. тоже достаточно
Vort "<weko> Склеиваются? Чо?" - в объекте RouterInfo нету полной информации. то есть, букву трафика из объекта не восстановить
weko Плохо
weko Надо нормально сделать
Vort ну вот я предлагаю 2 байта со скоростью в килобайтах/сек
Vort кибибайтах точнее :)
Vort "<~orignal> смержил но для уровней сделай константы а не магические чила": сделал: github.com/PurpleI2P/i2pd/pull/2018
Vort с константами, кстати, уже пофиг, проценты там или что. можно и точнее посчитать если надо, поменяв константы
orignal смержил
orignal mittwerk чтобы запускать локальный тор не занимая пор естественно
Vort почему L узлы лезут в туннели прокси стало понятно довольно быстро после рассматривания кода
Vort про то, что это место (TunnelPool::SelectNextHop) проблемное, разговоры уже были давно
Vort переписал его по своему усмотрению - пока что ни одного L не на своём месте не заметил
Vort а вот улучшит ли это изменение рейт уже зависит от адекватности профилировщика
Vort моя реализация больше "прислушивается" к его "мнению"
orignal 0 или nullptr это одно и то же
Vort там в конце функции nullptr
orignal твой код нехорош тем
Vort это для унификации
orignal что если база небольшая
orignal то тоннели не будут строиться
Vort мой код кстати не так уж сильно от твоего отличается
orignal я так понимаю ты длину тоннеля уменььшаешь если следуюбщий не можешь
orignal но там будет проблема с концами тогда
Vort отличие есть, но оно мелкое. в одном редком сценарии
Vort ноль вернётся только если вообще нифига не нашлось - ни быстрых, ни медленных
Vort цикл там не по хопам. это попытки подобрать не-какашку (!hop->GetProfile ()->IsBad ())
orignal посмотрю позже
orignal счас собрание
Vort окей
orignal ты 3 попытки что ли делаешь?
orignal объясни свою логику
Vort 3 попытки - это максимум
orignal а почему 3 а не две?
orignal и в чем разница тогда в логике с моей?
Vort довольно часто вылазили L узлы, значит часто попадались IsBad. больше попыток нужно чтобы с большим шансом выбрать не Bad
orignal то есть ты делаешь рандом
Vort разница мелкая - мой вариант прекратит перебирать скоростные узлы только если вообще ноль вернётся
orignal тогда почему 3 попытки а не 5?
orignal ну то есть в чем смысла числа 3 например на 2
Vort можно и 5. чтобы в каких-то экзотических случаях не начал выбор отжирать много ресурсов
orignal я бы сделал вообще 2
Vort количество определяет, сколько не жалко ресурсов на выбор потратить в плохом случае
Vort я по сути шанс появления L узла в нынешней версии возвёл в третью степень
Vort мне показался такой шанс пригодным
orignal естественно
orignal на тогда сделай константой
orignal и давай PR
Vort ок. меня только беспокит вариант неадекватности профилировщика
Vort в таком случае рейт будет хуже
Vort если же профилировщик делает правильное дело - тогда рейт будет выше
orignal ну посмотри в чем его неадекватность
Vort ага. если это изменение ухудшит рейт, это будет означать баг в профилировщике по сути
orignal тогда поставим эту константу в 1
Vort const int TUNNEL_POOL_MAX_HOP_SELECT_ATTEMPTS = 3;
Vort пойдёт?
Vort название то есть нормальное ли
orignal HOP_SELECTION
Vort ок
relaybot 13mauzer: Floating point exception
relaybot 13mauzer: это что?
relaybot 13mauzer: последняя ревизия не запускается
orignal деление на ноль где то
relaybot 13mauzer: а как в гите откатить ревизию?
orignal а x3
Vort деление только с плавающей запятой?
Vort я деления добавлял, но челочисленные
Vort целочисленные*
orignal нет должно быть целочисленное
orignal ладно разберемся
Vort почему тогда пишет floating point? O_o
orignal а вот x3
orignal может это на веб морде
orignal там float
relaybot 13mauzer: git checkout HEAD~1
Vort я знаю одно место где я не сделал проверку. но чтобы там вылезло деление на ноль, таймер должен вообще полнейшую фигню творить
Vort плавающая запятая обычно кстати не искючения плюёт, а NaN вываливает
relaybot 13mauzer: у меня очень медленно собирает
relaybot 13mauzer: на какую ревизию попробовать откатиться?
Vort скажи, отключен ли транзит на этом узле
relaybot 13mauzer: включен
relaybot 13mauzer: и флудфил
relaybot 13mauzer: HEAD is now at 0e502c49 show correct tunnel status. restore tunnel if delivery status or data for inbound tunnel received
relaybot 13mauzer: вот сюда откачусь
Vort сделал PR с попытками выбора хопов: github.com/PurpleI2P/i2pd/pull/2020
Vort теперь вопрос в том, как ловить "Floating point exception"
Vort попробую на линуксе собрать, может это у него какие-то особенности
orignal там может это не у тебя
orignal у меня проблем нигде нет
Vort так а где ещё деление может быть, как не в моём коде?
Vort надо бы строчку узнать, на которой фейлится
orignal ну я тоже менял
orignal так что думаешь чтобы M приравнять к L?
Vort можно. если вдруг станет хуже, легко будет вернуть обратно
Vort но вообще над балансом надо серьёзно думать
Vort нужно выбор хопов переделывать с учётом шансов
Vort а шансы уже считать по флагам и результатам профилирования
Vort не bad или good, а процент
relaybot 13mauzer: заработало
Vort orignal: а вообще - хуже точно не будет. но и лучше тоже. M узлов ведь всего 0.2%
orignal переделаю
orignal у меня и на фре не падает
Vort K узлов примерно столько же. 0.1%
Vort скорее всего падает из-за какой-то необычной конфигурации
Vort "очень медленно собирает" - это признак Big Endian или чего-то подобного
orignal да нет
orignal впс у него дохлая
relaybot 13mauzer: да
Vort то деление на ноль, которое я намеренно пропустил, происходит если таймер, который должен сработать через 1000мс, срабатывает через 0мс
orignal ну чини
Vort так если таймер в системе нерабочий, то там много чего будет сломано
orignal а ну тогда пох
Vort надо разобраться, что происходит
orignal но деление на ноль всегда надл проверят
Vort ещё вариант помимо таймера - что глючат таймстампы миллисекундные
orignal возможно
Vort если они выдают секунды, то тоже может быть деление на ноль
Vort допустим, таймер выдал 999мс и оно округлилось до 0с
orignal потому и надо проверять на ноль всегда
Vort важно понять, насколько такая херня распространена
Vort представляю, что там в SSU2 происходит в таком случае
orignal мы там принудительно окргуляем насколько я помню
Vort проверил в линуксовой виртуалке - нет креша
orignal может у него сама впс глюканула
orignal иногда такое бывает
Vort не знаю, захочет ли он помогать искать проблему, но я могу сделать тестовую программу, которая просто выводит таймстампы раз в секунду
Vort так сразу можно увидеть, в этом месте креш или нет
Vort вляпался в довольно странную проблему с документацией i2pd
Vort желательно исправить
Vort оказывается, гугл выдаёт ссылки на какую-то старую версию
Vort хз, зачем она вообще нужна и как её убрать нахрен
` > mittwerkz: а зачем?
` шобы ты спрасил
Vort нормальная версия: i2pd.readthedocs.io/en/latest
Vort старая версия: i2pd.readthedocs.io/en/stable
onon Интересное наблюдение, на узле который более лоялен к "плохим" роутерам в нетдб, транзита примерно на 20% больше.
Vort а рейт какой?
orignal там счас не обновляется
orignal я R4SAS -у сказал
onon ткср?
Vort ага
onon Примерно на 20% выше
Vort они же из netdb выкидываются в частности чтобы рейт не портили
onon Но все равно хреновый
onon А вот, значит, парадокс
Vort так какое изменение ты сделал?
onon const int NETDB_NUM_ROUTERS_THRESHOLD = 10*NETDB_NUM_FLOODFILLS_THRESHOLD;
onon const int PEER_PROFILE_DECLINED_RECENTLY_INTERVAL = 60; // in seconds (2.5 minutes)
onon const int PEER_PROFILE_USEFUL_THRESHOLD = 7;
onon Я точно не знаю, за что они все отвечают, я просто рандомно меняю и тестирую
Vort знаешь же, что рейт стабилизируется где-то часов 6 ?
onon Полтора суток теста
Vort значит надо разбираться с профилировщиком
Vort я туда боялся лезть потому что вообще не понимаю, что он делает
` "как и все здесь"
orignal я тоже не понимаю потому что не помню ))
Vort три одновременно запущенных узла мой комп не потянул ) сеть вышибло
Vort так что мои возможности тестирования в виртуалках... кхм.. ограничены )
Vort заглючило почти всё. даже i2pd. целое ядро сейчас сжирает и массово срёт в лог
Vort но работает )
Vort [20/Feb/2024:20:24:19 +0200]@292/error - NTCP2: Accept error Невозможно выполнить операцию на сокете, т.к. буфер слишком мал или очередь переполнена
` оп деанон
Vort хотя нет, в лог срать перестало. а вот ядро так и жрёт
Vort NTCP2 восстановился, а SSU2 - нет
orignal жесть
Vort похоже, что зависание в boost::asio::detail::win_iocp_io_context::run
orignal это что то внури буста
weko Vort: лучше сразу с запасом 4 байта
weko [16:57:55] <Vort> я по сути шанс появления L узла в нынешней версии возвёл в третью степень
weko [16:58:04] <Vort> мне показался такой шанс пригодным
weko Можно и вообще лучше систему сделать. Чтобы всегда один раз пробовать. Нужно специальную структуру сделать для такого
weko [17:25:47] <Vort> нужно выбор хопов переделывать с учётом шансов
weko [17:26:02] <Vort> а шансы уже считать по флагам и результатам профилирования
weko [17:26:20] <Vort> не bad или good, а процент
weko Я уже это говорил. Надо
weko [18:34:09] <Vort> три одновременно запущенных узла мой комп не потянул ) сеть вышибло
weko [18:34:27] <Vort> так что мои возможности тестирования в виртуалках... кхм.. ограничены )
weko Одной виртуалки достаточно
weko И в ней запускаешь сколько хочешь роутеров
Vort "<weko> Можно и вообще лучше систему сделать. Чтобы всегда один раз пробовать." у меня подозрение, что запрос к профилировщику "дорогой". в общем, это надо замерять потребление ресурсов у разных вариантов
Vort weko: у меня просто RAM мало
weko Vort: купи больше)
weko RAMы нынче надо много
Vort weko: проверял последние коммиты? креш есть или нет?
weko Нет я не смотрел
Vort нужен кто-то, готовый помогать с отладкой
weko На котором я не крешится
weko Как видно
weko Vort: я думаю любые креши на 200 роутерах быстро всплывут
weko Так что и тут тестнет поможет
Vort точно неизвестно какой коммит крешит, подозреваю что мои изменения в congestion
weko Я ещё кстати хочу сделать чтобы они трафик гоняли постоянно
weko С помощью iperf3
weko Или чего угодно можно
Vort я подозреваю что крешит из-за какой-то особенности конфигурации. или ОС или железо
Vort ну и у меня не крешит, ни на винде ни на линуксе в виртуалке
weko [19:52:58] <weko> Я ещё кстати хочу сделать чтобы они трафик гоняли постоянно
weko Далее рандомные коды, уже сложнее но так же реально это эмуляция NAT
weko Точнее рандомный bandwidth
weko Учитывая наличиние задержек, потерь пакетов, дубликатов, и misorder получится очень хорошая симуляция реальной сети
weko Если запустить 500 штук например
weko А, ещё нужно замиксовать джава роутеры
Leopold Прочитал как заминировать лол
Vort добавил отладочную информацию к таймерам: github.com/Vort/i2pd/commit/3ad0825eab077d5d26bdc099e1ceeb928a57a3d3
Vort у кого крешит - ставьте loglevel = critical и скидывайте строчки с DeltaDebug: из лога
orignal у меня нигде не крэшит
Vort ну я понимаю, что проблема редкая
Vort но всё же лучше выловить при возможности
Vort есть у меня ещё одна гипотеза, кстати
Vort может быть расхождение часов в 1 секунду
Vort запускается i2pd, время 0 секунд, допустим
Vort проходит 1 секунда, получается время 1 секунда
Vort затем приходит коррекция -1 секунда
Vort и получаем опять время одна секунда
Vort ой, 0 секунд*
Vort 0-0=0, вот и деление на ноль
orignal так делай проверку и все
onon1 Хватит вам делить на ноль, черная дыра сгенерируется и поглотит всю землю.
Vort меня беспокоит вариант полностью сломанного таймера или таймстампа. в таком случае, i2pd будет глючить, но словить причину будет сложно
Vort проверку воткнуть не сложно. я её в тестовый код уже и воткнул
Vort if (!delta) return;
Vort знает ли кто-нибудь из-за чего виртуалка может мешать менять время?
Vort было просто проверить гипотезу со сдвинутыми часами в ней
Vort но я когда последний раз пробовал такое, что-то автоматически меняло время обратно
relaybot 13apophis: nntp
Vort так и не разобрался, что. но, скорее всего, это не операционка была
relaybot 13apophis: поставь и не думай о времени
Vort у меня как раз задача его испортить ) чтобы никто не мешал
AreEnn почему?
relaybot 13apophis: тогда скриптами сет тиме
Vort хотя может за несколько сек та неведома фигня не успеет среагировать. попробую ещё раз. могу опять вылететь из чата только :/
Vort AreEnn: чтобы проверить, возникает ли баг при сдвинутых часах
AreEnn Теперь я понимаю.
relaybot 13apophis: в виртуалках есть сеттингс на время, "брать из хоста" и.т.д так вот там сложно менять есл.и сеттингс такой стоит.
Vort интересно себя виртуалка ведёт. в общем, прыжки delta вверх я смог сделать. вниз виртуалка прыжки делать отказывается. но этого мне было достаточно, чтобы понять ненадёжность этой системы
Vort там надо не просто проверку на ноль добавить. но и на отрициальные значения. сейчас займусь
orignal или std::abs
Vort там и так "abs", потому что uint64_t
Vort надо приостанавливать обновление если время пошло взад
Vort orignal: вот так думаю сделать: github.com/Vort/i2pd/commit/a1608decfbe443efbde8002c2e838c853fa0c797
orignal и в лог ошибку там
Vort orignal: какой уровень поставить? Error ?
orignal да. error
orignal нет. надо (int64_t)sample1.Timestamp
Vort ну я такой вариант нагуглил просто: stackoverflow.com/a/8886156
Vort не вижу, чем он был бы плох
orignal у тебя два беззнаковых и вычитание
orignal результат может стать тоже беззнаковым
Vort станет, да. а потом преобразуется в знаковый
Vort погуглю ещё немного
orignal возможно
orignal но я всегда предпочитаю приводить явно
Vort тогда оба надо приводить (так и сделаю), иначе второй тип забьёт первого
Vort делать pull request ?
` О наболевшем.. Вы бы видели какие PR от меня принимали в говношаре.. //offtopic
R4SAS RTFM починил
Vort R4SAS: речь о readthedocs ?
Vort stable / как был, так и остался
Vort с устаревшими данными
R4SAS так в стейбл не сразу переведет
Vort и сколько там дохлая ссылка примерно висеть будет?
Vort "See build documentation for how to build i2pd from source on your OS."
R4SAS а в latest оно тоже так?
Vort там нормальная ссылка: "See developer section documentation for how to build i2pd from source on your OS."
Vort но это же надо знать, что есть две версии. я не знал поначалу
Vort обычный юзер тоже знать не будет
Vort в общем, если оно за несколько часов синхронизируется, то и ладно. если же нужны годы - то лучше как-то подтолкнуть
R4SAS > If your project has any tags or branches with a name following semantic versioning, we also create a stable version, tracking your most recent release. If you want a custom stable version, create either a tag or branch in your project with that name.
Vort 0 тегов же
R4SAS именно
Vort баг что ли? или где-то что-то не учтено
R4SAS я конечно stable могу вырубить просто
Vort может, так и проще
Vort не хватало ещё уйму версий доков поддерживать ) хоть бы одну версию полноценно сделать
R4SAS тут же еще на русском есть
R4SAS только ни кто ею не занимается
Vort если stable вырубить, редирект будет?
R4SAS не знаю
Vort хотя гугл, может, догадается
R4SAS попробуй просто
Vort это я через гугл stable нашёл
Vort 404 Page not found
Vort ну и хрен с ним
Vort пусть Гугл соображает, куда ссылка переехала
Vort по поводу таймстампов: сделаю PR, если что ещё надо будет менять, уже непосредственно в PR поменяю
Vort R4SAS: про проблему сборки в GitHub Actions знаешь?
R4SAS знаю, но пока что некогда бодаться с нею
Vort ок
R4SAS надо попробовать на голой виртуалке провернуть устновку как сделано в GHA
R4SAS и посмотреть куда девается boost и какого хрена его не находит
Vort а там уже zlib потерялся
R4SAS хз, он должен был нормально ставиться
R4SAS я же обновлял скрипт
Vort ну так 1.3 и нету
R4SAS а, уже 1.3.1
R4SAS пидорги чо
Vort жалко им места что ли?
Vort там же явно несколько мегов всего
R4SAS ща соберет его, но встрянет на бусте
R4SAS ясно, еще openssl твалился
Vort так буст получается поставился?
R4SAS поставиться то он поставится, только вот cmake начнет визжать
R4SAS окей...
R4SAS но в любом случае не сегодня всё полнстью проверю
orignal да делай
orignal R4SAS почини виндовый билд или убери его
orignal а то при кждом коммите ошибка
R4SAS я видал
orignal смержил
R4SAS а че вам не нравится то здесь?
R4SAS оно и назад, и вперед прыгнуть может
R4SAS мало ли у машины кварц разогнанный
R4SAS ну вот
R4SAS я типа нашел, но не нашел
orignal все равно фелится
R4SAS кэп