IRCaBot 2.1.0
GPLv3 © acetone, 2021-2022
#dev
/2023/08/10
~R4SAS
~acetone
~orignal
~villain
&N00B
+relaybot
Leopold
Most2
Nausicaa
Vort
Xeha
anon2
nemiga
not_bob_afk
poriori_
un
weko
whothefuckami_
weko_ [21:48:47] <orignal> то есть реально это вообще не ошибку
weko_ Я вроде говорил, что многое логируется как error, хотя не является ошибкой
orignal ну я от фонаря назначал уровни
R4SAS Vort: по возможности посмотри ветку cpu по поводу работы AES
pikachu Сколько нужно подключенных пользователей, чтобы скорость сети i2p была сравнима с обычным интернетом?
Vort orignal: ну так в таком случае надо же _сразу_ следующую попытку делать, а не ждать фиг знает чего? или так и сделано?
Vort R4SAS: провёл пока что базовые тесты. MSVC 2015 и собирается и не крешится. Clang собирается (но бинарник пока ещё не проверял)
Vort правда, я в MSVC собираю с AVX2 (у меня CMakeLists.txt с модификацией). надеюсь, что это не влияет на результат теста
Vort R4SAS: на старом процессоре clang сборка крешится. раньше работала. может, я где-то ошибся, не знаю.
Vort на недопустимую инструкцию попадает скорее всего
Vort сейчас пересоберу с дебагом и гляну, что за инструкция такая несовместимая в бинарь попала
Vort да тут весь бинарник собрался с такими инструкциями. хм
Vort в таком случае толку от детекта никакого
Vort ага, моя ошибка :( не правильно собрал. прошу прощения
Vort пересобрал clang`ом правильно - заработало нормально и на старом процессоре
segfault orignal: не могу найти функцию для перевода i2p::data::IdentHash в std::string. она вообще есть? как следует писать в лог о том, что подключение к какому-то b32 не производится, т.к. он в чёрном списке?
Vort это пишется в лог в хреновой туче мест. просто посмотри, как другие сообщения выводятся
orignal ToBase32() ToBase64()
orignal кэп
orignal и эти люлди собрались что там рефакторить
orignal пиздец
orignal Vort ну подождет секунд 10 чего изменится?
Vort если туннелей много - то мало чего. но если их недостаточно из-за каких-то других проблем, то это ожидание делает проблему ещё более заметной
Vort да и вообще - ждать, когда этого делать не нужно - сомнительное решение
orignal но тут может быть ситуация что и правда нету
orignal тогда будет жрать проц
orignal я подумаю
Vort ну так не надо вечный цикл делать
Vort 3-5 раз потыкаться и вот _тогда уже_ error вываливать
orignal насколько я помню там сразу делается вторая попытка
Vort тогда он будет иметь явную ценность
Vort ну если есть вторая попытка - тогда можно просто сообщение об ошибке подправить
Vort выводить допустим только если и вторая попытка неудачная
Vort а вообще надо посмотреть, что это за странные узлы такие, которым нельзя пару подобрать при наличии тысяч кандидатов
Vort я понимаю при запуске узла. но у меня такое хоть и редко, но уверенно вылазит на узле с апйтамом в 7 дней
Vort я смотрю по логу, что одни и те же узлы сталкиваются с проблемой
Vort и сразу два вопроса - 1. что с ними не то? 2. почему они постоянно выбираются, если должен быть рандом?
Vort вот, допустим: Tunnels: Can't select next hop for fSOow4H44UKmlyBBw57gRgZHfd6QaIk61PKHl4Nz~as=
Vort сейчас не вижу в его RI ничего подозрительного. но может раньше было...
orignal так про остальные просто в лог не пишется
orignal а почему выбирается
orignal я же рассказывал тут задачу по терверу
orignal чувак встречается с двумя бабами живущих на разных концах москвы
orignal он заходит в метро и садится в тот поезд который придет первым
orignal соотвественно едет к бабе в ту сторону
orignal интревал движения поездов всегда одинаковый
orignal вопрос почему он попадает в одной в несколько раз чаще чем к другой
Vort "так про остальные просто в лог не пишется" - но "необычный" ведь тот узел, который залогировался - ему именно пару не удалось подобрать?
orignal он самый
Vort про задачку, наверно, не догадаюсь. возможно, константный интервал между поездами одного направления не значит константного интервала между поездами двух направлений одновременно
Vort то есть, получается разное среднее время ожидания
orignal ну да в том и суть
orignal что если после первого сразу приходит второй
orignal то после ожидания будет попадать первый
orignal а вероятность попасть в интревал когда ушел первый а еще не пришел второй существенно ниже
orignal вот у нас примерно также получается
orignal мы идем по списку пока не наткнемся на подходящий
orignal начиная со случайного места
orignal естественно первый подходящий будет выбираться чаще
Vort ладно, со статистикой можно позже разобраться, может там всё в порядке. но вот что такого загадочного в тех узлах, которым не нашлось пары - это я попробую выяснить
orignal посмотри адреса и поймешь
Vort ничего там странного не видел
Vort но вот глянул код - и тут уже странное вижу вполне
orignal ну например ipv4 нет
segfault orignal: я пока "чёрный список" копирую в каждый NTCP2Session из NTCP2Server. с одной стороны
segfault это не эффективно
segfault с другой, а блокировки это лучше?
orignal какие блокировки? там один тред
segfault тогда просто сделать ссылку на член из NTCP2Server?
orignal нет написать методы в NTCP2Server и их вызывать
orignal ты вообще хоть минимальное представление об приницпах ООП имеешь
segfault тут вопрос другой: как это тестировать? запускать 2 i2pd в локальной сети и смотреть?
orignal запусти у себя локальный узел и пробуй
segfault можно заставить i2pd принудительно к какому-то ip / b32 подключаться?
orignal поправь код
orignal или сделай тоннель со списком пиров
orignal explictPeers
R4SAS orignal: а в чем разница между прямым ассемблером и интринсиками? (встроенными командами в )
R4SAS встроенными в компилятор*
orignal ты не сделаешь на них код который испольщуется для шифрования тоннеля
orignal когда двойной шифрование ключа и блок
R4SAS почему?
orignal чтобы ключ не покидал регистр
orignal а использовался напрямую
R4SAS т.е. после выполнения каждого интринсика регистры высвобождаются?
orignal ты не можешь в них назначать регистры явно
orignal или какие то регистровые переменные
orignal если кто знает как это сделать как говорится флаг в руки
R4SAS ну например
R4SAS "aeskeygenassist $0, %%xmm1, %%xmm4 \n" \
R4SAS __m128i _mm_aeskeygenassist_si128 (__m128i a, const int imm8)
R4SAS Instruction: aeskeygenassist xmm, xmm, imm8
R4SAS т.е. то что у тебя передается в разных регистра в первые 2 поля - это тебе как раз и не нравится?
R4SAS 2 разных*
R4SAS хотя я не знаю чего дает $0 тут
Vort посмотрел я по старым логах узла XR - нету там "Can't select next hop for". различие - не было флудфила и не было ygg. что-то из этого, вероятно, влияет. попробую сделать узел похожим на тот, где проблема вылазит
R4SAS Vort: меня больше удивило что я тогда же попытался собрать с включенным AES под MSVC
R4SAS и оно сожрало блоки __asm__
R4SAS под 2019
Vort туда добавили совместимость с GCC ассемблером что ли?
R4SAS т.е. конкретно был /D __AES__
Vort да и вообще - там вроде не было x64 асма никогда
Vort но я правда не смотрел что в последних версиях
R4SAS т.е. условие #if defined(__AES__) && (defined(__x86_64__) || defined(__i386__)) должно выполниться и использоваться при сборке
Vort а это точно была студия с MSVC, а не с clang ?
R4SAS точно
R4SAS Visual Studio 2019 Developer Command Prompt v16.11.24
Vort R4SAS: __x86_64__ - это линуксовая фишка похоже
R4SAS и да, я не через студию собираю
Vort в студии что-то другое
Vort _M_IX86 _M_X64
Vort что-то такое, точно не помню
R4SAS _M_AMD64
R4SAS _M_IX86
R4SAS можно кстати попробовать
Vort ну вот поэтому асм и пропущен был
R4SAS просто раньше оно там стопорилось
R4SAS даже с текущими дефайнами
R4SAS а сейчас подозрительно - но нет
R4SAS сейчас попробую добавить
Vort тут двойной облом будет скорее всего - нету поддержки 64 битного асма и нету поддержки GCC асма
R4SAS знаю
R4SAS потому и хочу добиться вылета чтобы попробовать дописать
orignal я у себя явно пихаю в регистры а потом обращаюсь дальше к этим же регистрам
Vort что дописать? асм в MSVC стиле?
Vort интринсики, может, заработают. хотя я с этими командами дела не имел, так что не уверен
orignal это AT&T ассмеблер
orignal в том же mingw нормально работат
R4SAS это то ясно
R4SAS а вот как оно в msvc должно выглядеть - это вот вопрос интересный
Vort если удастся сделать такие интринсики, которые будут выдавать код не хуже прямого асма, то это будет лучший вариант я думаю
orignal в msvc там интеловский ассебмлер
Vort через интринсики может выглядеть или так или похоже. а прямой асм - это только в отдельный файл пихать и отдельно собирать насколько я знаю
Vort но отдельный файл - это отдельный вызов функции, уже будет хуже, хоть и всего чуть-чуть
R4SAS но забавно что icc поддерживает гнушный асм
Vort ну и clang же вроде
R4SAS clang то ясно
Vort а в MS даже на свой асм (x64) забили
Vort решили, что это очень сложно
R4SAS о, кстати... я тут в том месяце пытался ядро ведроидное расковырять
R4SAS пришлось в опкоды лезть
R4SAS надо в ip_forward убрать проверку на TTL
R4SAS но опять из-за времени не доделал
R4SAS такс... примерно понял разницу в работе asm gcc и msvc
R4SAS надо на eax и edx переписывать...
R4SAS хммм
orignal а на rax и rdx не надо?
R4SAS а ну да, в них
segfault а для чего ассемблер нужен?
Vort R4SAS: для x86 одно, для x64 другое, да? то есть, будет не один асм (gcc), а три? :) ну и плюс отдельный файл
R4SAS а с чего три то?
Vort ну rax же не будет на 32 битной системе
Vort или я что-то не так понял
R4SAS а так, вообще, можно обращаться к CryptoAPI
R4SAS но это тоже хрень
R4SAS Vort: упустил
R4SAS но по идее, как я понимаю, не обязательно проверять так
R4SAS надо ради интереса попробовать напечатать содержимое
orignal rax только 64
Vort словил я пример, при котором вылазит "Can't select next hop for" / "Can't create inbound tunnel". RI узла по сути пустой, зато с ним есть входящий коннект транспорта
orignal ты так скажи какие адреса там есть
Vort такое у меня ощущение, что эту ситуацию можно было предугадать ещё до того, как начали выбирать следующий хоп
Vort да никаких
orignal скорее всего
Vort и интродьюсеров нету
orignal значит он с тобой соединен
Vort "зато с ним есть входящий коннект транспорта"
orignal как ты знаешь?
orignal я думаю входящий к тебе от него все такие
Vort не понял вопроса
Vort я его на вкладке транспортов вижу
Vort скорее всего, у него интродьюсеры были, да сплыли (из-за бага). но не в этом суть. главное, что первым хопом для входящего туннеля он не годится (если я правильно помню, как они работают)
orignal естественно
orignal первым хопом к нам или на конце тоннеля?
Vort к нам
Vort а наверно вообще никак
orignal в том то и дело что как бы годится
orignal потому что с нами то он может соединиться
Vort ну он уже с нами соединён
Vort а вот с ним уже никто не сможет соединиться
orignal ну даже если бы и не был
Vort то есть, ему нереально второй хоп подобрать
orignal я проверяю только совместимость пар
orignal а с нами он по транспортам совместим
orignal а дальше разумеется ничего найти нельзя
orignal вывод какой?
Vort я думаю, что если ему нельзя подобрать второй хоп, то не надо его выбирать первым хопом
orignal нельзя выбирать пиры у которых recachable transports по нулям
orignal ну ясное дело
Vort ну про исходящие я хз, может для исходящих и можно
orignal просто не сделано
Vort то есть, баг. или недоработка
orignal так исходящие и не выберутся
orignal потому что если у него нет входящих значит он и не выберется никогда как совместимый с предыдущим
orignal не то что баг просто не доделано
orignal опять же разные куски в разное время написаны
Vort ну ок. думаю, если эту причину убрать, можно смотреть, что там ещё у user останется
orignal счас гляну
orignal я вроде чинил
Vort давно? это я словил на узле с версией 2.48.0-26-g6e9a3422
orignal думаю с месяц назад
orignal а нет похоже только собирался ))
orignal а все понял я только для концов починил
orignal а не для середины
orignal вроде проверка есть
orignal router->GetCompatibleTransports (true)
orignal Netdb.cpp строка 1240
Vort orignal: есть ведь ещё transports.GetRandomPeer
Vort он через пиры выбрался, а не через GetRandomRouter
orignal а да это возможно
orignal тут тоже надо добавить проверку если еще нет
Vort а там интересно
Vort isReachable ставится в конструкторе
Vort только вот пир может потерять транспорт в процессе
orignal оно вычитывается из RI
orignal может да
orignal ну а что делать?
orignal не перезапрашивать же RI каждый раз
Vort он же подключен, я думал, что всегда в netdb должен RI лежать в таком случае
orignal не обязательно
orignal ладно тут смотреть надо
Vort ну или при обновлении RI в netdb искать пиров и обновлять им isReachable
Vort ага, оказалось не так просто, как хотелось бы
orignal дык