IRCaBot 2.1.0
GPLv3 © acetone, 2021-2022
#dev
/2023/02/02
~R4SAS
~orignal
~villain
&N00B
+relaybot
Guest557
Leopold
Most2
Nausicaa
Nikat
Opax
WayBest
`
acetone
anon2
anontor
b3t4f4c3
banona
fidoid
grimreaper
karamba_i2p
ncop
onon
onon1
polistern
poriori
profetikla
qend
r00tobo
scratch
soos
teeth
tensor_
typhoon
uis
un
weko
whothefuckami
колдоёбина
Leopold sudo -u <user<<<<<<<<<<<<<<<<<<<<<<<<<>
orignal он имеет ввиду как в systemd прописать
weko [23:18:59] <9d54b3orignal> у меня флудфил
weko [23:19:17] <9d54b3orignal> и там нагрузка небольщая
weko Я про атаку, если она есть
Leopold Что означает в конфиге туннеля keys = transient-... ?
Leopold вместо файла .dat
weko Leopold: это значит что ключ создаётся при запуске/обновлении и хранится в памяти
weko И не записывается на диск
Leopold хорошо
weko После тире чтобы разные ключи были для разных дестинейшенов
weko Если будет одинаковое имя после тире то будет один ключ для этих дестинейшенов
weko Точнее он будет один)
Vort продолжил попытки словить жирные SSU2 туннели. попался сейчас один где-то на 1 мегабайт/сек
Vort так вот результат получился совершенно отличный от тех тестов, которые я делал в прошлый раз
Vort в частности, нагрузка CPU не "прыгала", а была довольно ровной
Vort вижу две возможные причины:
Vort 1. после прошлого теста (30.12.2022) было много изменений в коде и прыгающая нагрузка с того времени была починена
Vort 2. SSU2 коннекты бывают разными (как минимум, различаются отправка и приём), вполне вероятно что от этого получается разный характер нагрузки
Vort с сегодняшним тестом с помощью Sleepy, на коде от вчерашнего дня получается 95.7% нагрузки на функции WSASendTo
Vort можно было бы предположить, что код i2pd менялся, но ведь и системный вызов GetQueuedCompletionStatus с последним тестом меньше жрёт: 0.5%
Vort так что надо думать и следить дальше
Vort ещё есть вариант, что Sleepy и VTune слишком по-разному работают, но это маловероятно
Vort всё, словил "горбатую" нагрузку. и подтвердил результат месячной давности
Vort в "горбатом" варианте WSASendTo уже 63%, GetQueuedCompletionStatus 11%, CreateAckBlock 22%
Vort теперь соберу i2pd со свежими коммитами
Vort что-то у меня подозрение, что ровная нагрузка SSU2 - это отправка, а горбатая - это чтение. смотря какой транзит попадётся
Vort собрал данные по ещё одному SSU2 коннекту средней горбатости. уже со свежими коммитами. на этот раз получилось такое распределение: WSASendTo 66%, GetQueuedCompletionStatus 9%, CreateAckBlock 8%
Vort так что по этим совершенно неточным данным получается ускорение CreateAckBlock в 2 раза
Vort нужен какой-то более точный метод измерения
Gate жара пошла 10 мб сек ))
Gate Sent: 30.39 GiB (11444.88 KiB/s) это как вообще? Sent это что типа мне? Я вроде не качаю ничего
Gate вернее не отдаю
Leopold )))))
Leopold Отдаёшь со скоростью 12 МиБ в сек ))
HidUserZ Gate: ну так транзит же
Gate HidUserZ: Transit: 29.21 GiB (1526.97 KiB/s) а это тогда что?)
HidUserZ А send какой сейчас
Gate HidUserZ: Sent: 32.82 GiB (1895.04 KiB/s)
HidUserZ Ну все сходится более менее
Gate транзи показывает что вошло, что вышло, или сумму? Запутался
Gate судя по всему что-то одно, иначе трафик транзита был бы суммой из сент и ресив
relaybot 13R4SAS: это скорость пропущенного через тебя трафика
relaybot 13R4SAS: т.е. trans-in === trans-out
Gate а received это транзит + то что ко мне?
relaybot 13R4SAS: да
relaybot 13R4SAS: так же и sent
Gate ну да
weko Gate: +всякие другие запросы типа netdb и прочее
orignal нашел еще одну неэффетвинсть в SSU2
orignal вычиащаю говно мамонта по одному сообдению а надо пачками
orignal переделаю
Vort эти изменения как-то профилированием проверяются или хватает теоретического заключения, что "так должно быть быстрее"?
weko Должно быть - да. Насколько - вопрос уже другой
orignal Vort я просто вижу что код сделан неправильно
orignal иными словами его следует переделать безоносительно измерений
weko Всё таки странные эти горбы процессорного времени SSU2. С 10-20 резко в сотню и обратно
orignal weko это ретрансмсии
weko Почему тогда так много в какой то момент
orignal вчера же Vort показал в чем дело
weko Минимум в 5 раз больше
orignal когда много пропущенных пакетов накаптливается
orignal тогда так функция и жрет проц как слон
orignal я как раз это и чиню постепенно
weko Оно же не на 1 секунду а на пару минут
orignal начал с того чтобы это говно мамонта вычищшать более интенсивно
orignal на переполчнение буфера значит
orignal такое бывает
weko Странно, софт медленнее сети это не типичная ситуация
orignal нет
orignal на твой машине есть UDP буфер
orignal в котором могут теряться пакеты а могут теряться и по дорого
weko Это понятно, ну так если он заполнен, значит программа не успевает забрать
orignal когда они теряются то полученные не по порядку сохраняются
orignal там до программы может и не доходить
orignal как раз i2pd забирает быстро
orignal там же много чего в ядре
weko Тогда почему нагрузку пишет i2pd
orignal читай выше
orignal я же объяснил
weko Ну не доходит до i2pd, значит нагрузка должна быть в ядре а не в i2pd?
orignal из-за пропущеннызх пакетов формирование подтверждения жрет много проца
orignal это надо переделывать
weko Хс
weko Хм
weko Понял
weko А там хэш таблица для них?
orignal просто пока вчера Vort не сказал
orignal до выяснения этой сиутации дело не доходидо
orignal там не хэш там set
orignal из решета номеров полученных пакетов
orignal короче я это переделаю
orignal но это пара дней
weko Окей проблему я примерно понял, я не понял почему именно волны, а не распределённая нагрузка?
weko Типо попадается коннект с большой потерей пакетов?
orignal волны сам бы хотел знать что их порождает
orignal ощущение что приходит одна мощгая сессия
orignal с большим потоком
weko Трафик в этот момент никак особо не выделяется
weko Ни в морде, ни в статистике железки
R4SAS while (ranges < 8 && !m_OutOfSequencePackets.empty () &&
orignal угу
orignal 8 попыток
orignal я стаивл 32 но слишком большую нагрузку на проц создает
orignal потом вынесу в константы
` может быть по дэфолту "срать" в stdout? логами
` а то вот эти вот "гигабайтные" ойауменясломалося
orignal если не демон то так и делается
orignal а где я тебе возбму stdout у демона?
` принято, за демонами не шарю
orignal так нету уже этой проблема начиная с 2.45
orignal я же починили
orignal у демона вообще нет stdout
orignal как врочем и stdin
R4SAS ` а нехер подминать уровень логов без надобности
` я просто вижу подэфолту в i2pd.conf логи в file и вот предложил
` код не чекал
R4SAS по дефолту файл только в демоне
orignal так в демоне можеть быть только или в файл или в никуда
R4SAS даже если в демоне сделать в stdout то будет засирать уже не i2pd.log а syslog
orignal перелача по сетке не сделана
` R4SAS, warn не излишне ли по-умолчанию..
R4SAS нет
orignal суть не важна куда
R4SAS излишне было бы info
orignal важно что все равно будет писать в какой то файл
orignal ибо у демона нет терминала
R4SAS я потому и добавлял уровень none
orignal короче по поводу последних изменений
orignal следующий шаг это вычислять диапазоны один раз и сохранять
orignal и пока не изменились их просто копировать в аки
R4SAS диапазоны чего
orignal Ack бллка
orignal диапазоны пропущенных пакетов
orignal ну эта проблема с CreateAckBlock
R4SAS понял
orignal там постоянно делает итарицию по списку полученных вне очереди пакетов
orignal технически это превращается в диапазоны в этом блоке
orignal а если приходит пакет по порядку
orignal то зачем диапазоны заново считать?
orignal они же не изменятся
R4SAS ну да
orignal чем я и знаимаюсь
orignal видишь какие проблемы лезут из-за нагрузки
weko orignal: кстати проблема с уходом RI в 1 штуку осталась
weko На флудфиле как минимум
orignal ну надо разбираться
weko Возможно они удалились все ещё до того как процент упал
orignal возможно другая причина
Vort weko: это когда такое происходит? при отключении интернета?
weko Когда отлуп от ОС по любой причине
weko Ну тоесть в том числе
Vort ну так для этого и было (в частности) сделано EWMA усреднение TCSR
weko Ну это понятно
Vort с тугим алгоритмом TCSR не успеет упасть
weko Я читать умею
weko Значит нужно делать ещё менее тугим
weko Чем сделали
Vort "проблема с уходом RI в 1 штуку осталась" при стандартном TCSR алгоритме?
weko Vort: всмысле стандартном?
weko Тот что хидюзео сделал
weko Логично
Vort а, кажется, понял. я туплю
weko Там и аптайм не был такой уж высокий
weko Что то типо 2-3 часов
weko Было бы странным менять на более "тугой" алгоритм для этой задачи
Vort ошибся, говорю. подумал, что у тебя стоит старый алгоритм, который заклинивает со временем
weko Нет я же сделал PR даже
weko Я понял да)
Vort видимо, нужно делать временный код с логированием количества RI + TCSR, отрубать вручную сеть и смотреть потом по графикам, с какой скоростью будут уползать значения
Vort может, там ещё какая-то проблема, а не недостаточная гибкость EWMA
weko Ну да понятное дело
weko Это просто предположение
weko Заметил странность - в вебконсоли NTCP2 сортируется по алфавиту, а SSU2 - (видимо) по времени создания
weko Не критично конечно но лучше сделать что-то одно)
Vort поначалу смотрел на IP адреса )
Vort потом догадался id глянуть
Vort интересно, что юзеру важнее
Vort отсортированный id или отсортированный ip
Vort или хоть что-то отсортированное )
weko Не то не другое
weko По времени создания)
weko Как в ssu2
Vort таблицу с javascript сортировкой :D
weko Ужас
weko Осуждаю)
Vort так локалхост же доверенный :D
weko Параноики не верят даже локалке! ;)
Vort гляну сейчас как сортировка делается
Vort std::map<i2p::data::IdentHash, std::shared_ptr<NTCP2Session> > m_NTCP2Sessions;
Vort std::unordered_map<uint64_t, std::shared_ptr<SSU2Session> > m_Sessions;
orignal ну жа
orignal для NTCP2 сортированный
orignal для SSU2 нет
Vort unordered - это скорее не по дате, а как попало
orignal ordered как полало да
Vort юзеру всё же лучше показывать унифицированно. но это не приоритетная проблема, конечно
weko Vort: я сразу написал что это я просто заметил)
orignal да я NTCP2 лучше переделаю на unorders
Vort думаю, хранение и отображение не обязаны работать по тем же правилам
weko Vort: +
Vort так что можно отдельно решить, как удобнее хранить и отдельно решить, как удобнее юзеру просматривать
weko Можно сортировать для вебконсоли
weko Хотя нужно ли?
weko Вроде ведь удобнее по времени создания, так как это самое информативное
Vort над сценариями использования надо думать
Vort тут всё важно :(
Vort и IP адреса, чтобы кластеры искать
Vort и количество байт, чтобы следить за жирными туннелями
weko Туннели тут не при чём
orignal еще для показа сортировать а не жирно ли? ))
weko Кластеры сортировкой не ищут
weko Это странно
Vort "еще для показа сортировать а не жирно ли? ))" - это редко вызываемый участок кода, тормозить будет только если юзер на F5 уснёт
weko orignal: так пару раз в день консоль отдать можно и сортировать)
weko Чо там на легке отсотирует даже 3 тыщи)
weko И то тормозить будет только тред с консолью
Vort "Кластеры сортировкой не ищут" почему? если подряд идут похожие IPшки - это хорошо видно на отсортированном списке
weko От которого ничо не зависит)
weko Vort: а если не подряд?
weko Короче варианты либо по времени создания либо по айпишкам
weko По времени создания это то что сейчас
Vort можно ещё время жизни коннекта добавить. сам не знаю зачем )
weko Шобы было!)
weko Чем больше информации, тем больше аномалий можно заметить
Vort id-шки я, кстати, поиском браузера вылавливаю
Vort сожалею, если у кого-то в браузере нету поиска
weko Это понятно))
Vort ну вот для них сортировка меньше всего имеет смысл
relaybot 13R4SAS: там сортирока вообще плевая
relaybot 13R4SAS: сортировка*
orignal естествено
relaybot 13R4SAS: по байтам тем более
orignal std::sort с предикатом
relaybot 13R4SAS: мы же один раз опрашиваем список, а потом уже крутить как угодно можно
orignal можно
orignal лень
relaybot 13R4SAS: Vort, ты знаешь что делать)))
Vort "там сортирока вообще плевая" "std::sort с предикатом" для начала надо из map сделать vector?
orignal естественоо
Vort через push_back ? ничего умнее в C++ не нашёл
orignal естественно
orignal но зачем в vector
orignal проще в list
orignal а еще лучше в set
orignal и ему контрукторе передать компаратор
Vort потестирую пока что получилось с vector`ом
orignal тогда при вставке будет сразу сортировать
orignal лучше с set-ом
orignal vector будет очень томрозить на сортировке
Vort ок, я понял. посмотрю, получилось ли вообще что-то вначале
Vort нормально ли будет если свежие транспорты будут наверху?
Vort то есть, сортировка по убыванию
orignal не знаю
orignal лучше по IP адресу сделай
orignal удобнее искать
Vort set кстати не подойдёт - ключи (CreationTime) могут быть неуникальны
Vort а для IP адресов нету функции сравнения сейчас
Vort сортировать же их как строки - будет выглядеть ужасно
Vort хотя попробую сделать нормально
Vort только вот и тут не уверен, что IP:порт будут уникальны
Vort для того, чтобы в set засунуть
Vort так как уникальность пар IP:порт (для set`а) под сомнением, решил сделать вот так: "<~orignal> проще в list"
Vort если надо как-то ещё оптимизировать - готов дорабатывать
Vort в качестве бонуса получилась группировка Ygg адресов :)
R4SAS orignal: опять боб сдох
Vort R4SAS: можешь мой коммит глянуть?
R4SAS Vort: а у тебя чего выплевывает?
Vort ну у меня работает нормально. но мало ли - вдруг надо что-то доделывать
Vort вот и спрашиваю - годится изменение или нет
R4SAS возрастающий как я понимаю?
Vort да, по IP адресам
Vort точнее IP:портам
R4SAS да вроде нормально
Vort ну ок. стоит наверно подождать чтобы ещё orignal глянул
R4SAS случайно сломал у мышки пластину которая нажимает ЛКМ
R4SAS сидел клеил
Vort это как так? вверх дёрнул что ли?
Vort у меня если вниз нажимать кнопку, то она почти вплотную прилегает
Vort уже второй микросвич (или как там его) скликал, а сам пластик пока что цел
Vort я скорее до дырки его протру )
R4SAS а хз. я её полностью разобрал, почистил внутренности, начал собирать. перед тем как закручивать болтики на днище решил протереть пазы под накладки резиновые (или какие они там), которые сколзят по столу.
R4SAS видать тканью зацепил. вообще не понял оно отломалось
relaybot 13R4SAS: теперь оно так выглядит
Vort тогда понятно. я внутрь оочень редко забираюсь
Vort relaybot должен был картинку прислать что ли?
relaybot 13R4SAS: да. выгружалась
Vort интересно, мог ли бы помочь с этой проблемой 3d принтер. вроде бы они для такого должны подходить
R4SAS долго печатать
R4SAS да и поверхность будет рефлёной
R4SAS так, чет я отвлекся
R4SAS надо проверить где в этот раз встало
R4SAS хм. не помню пересобирался ли я
Vort кстати, по поводу set`а. если в коде нету защиты от такого, то, скорее всего, юзер может быстро поменять ключи, перезапустить узел и наделать новых подключений с того же IP:порта
R4SAS orignal: фикс не помог
R4SAS опять там же
R4SAS #4 0x0000560bd93783ca in std::lock_guard<std::mutex>::lock_guard (this=0x7f64497f9058, __m=...) at /usr/include/c++/8/bits/std_mutex.h:162
R4SAS #5 0x0000560bd93fa2a3 in i2p::client::LeaseSetDestination::FindLeaseSet (this=0x7f641c16b670, ident=...) at libi2pd/Destination.cpp:229
R4SAS #6 0x0000560bd964b2c6 in i2p::client::BOBCommandSession::LookupCommandHandler (this=0x7f641c1753b0, operand=0x7f641c153890 "5uvonv22up5evgfm42v3tylaljzenqx5bem5ukouitxgs4qa6zra.b32.i2p", len=60) at libi2pd_client/BOB.cpp:667
R4SAS ну и что
R4SAS это не должно мешать сортировать
Vort у меня подозрение, что это будет UB
Vort ну или просто одна из записей не добавится
R4SAS они друг за дружкой будут
R4SAS > Example
Vort да с list понятно
R4SAS добавь там пару повторений и попробуй
Vort я говорил про вот это:
Vort "<~orignal> лучше с set-ом"