~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
но это тоже хрень
Vort
R4SAS: почему тут нету defined? опечатка? github.com/PurpleI2P/i2pd/pull/1959/commits/9d3d35c71cf33f1aba38105b738376e37ae958a4#diff-e50973d72af06df6214f78b71992c591d5fce3a8198d85ba58713742717d71eeR196
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
вроде проверка есть
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
дык