IRCaBot 2.1.0
GPLv3 © acetone, 2021-2022
#dev
/2025/01/16
~AreEnn
~AreEnn_
~R4SAS
~acetone
~orignal
~villain
&N00B
+Xeha
Guest58423
Guest7184
Leopold
Most2
Nausicaa
Nikat
Opax
Vasservate
Vort
`
anon3
b3t4f4c3
fidoid
i
karamba_i2p
lolwut
nemiga
not_bob_afk
poriori
profetikla
qend
segfault
soos
teeth
uis
un
user
whothefuckami
woodwose
orignal отвечаю по порядку
orignal разным пиздаболам: нигде речь не шла о сбросе на диск под мьютеркаов
orignal Vort как думаешь сколько миллисекнуд занимает полный проход по такому списку?
orignal запись на диск делается в отдельном треде с собственной копией роутеров
Vort orignal: какой такой проход? со сбросом на диск изменённых RI? так это смотря сколько поменялось. но, думаю, где-то секунду надо на это
orignal нет просто пройти во всем ротуреам и скопировать буфера
Vort это выходит скопировать 10 мегабайт данных. из памяти в память. провёл сейчас бенчмарк через AIDA, получил скорость памяти 10 GB/s
Vort выходит, несколько миллисекунд должно занять
orignal ну там еще и 10 тс раз надо мьютекс заблокировать азблокирвать
orignal чего однозначено нет так это записи на диск под мьютексом но копирование есть
orignal кстати надо будет посмотреть на предмет чтения
Vort так если этот процесс не будет ничего блокировать, то точное значение нагрузки не так уж важно
orignal вот проход под 10 тыс там постояно этот мьютекс блокирется
orignal а вот чтение просто возможно прямо из треда
orignal надо глянуть
orignal например на пир тесте
Vort по сравнению с самим сбросом, который может занимать до нескольких секунд, простое копирование - это мелочь
Vort тем более, это раз в минуту. тут хоть 1мс, хоть 10мс - пофигу. вот 100мс уже многовато, но тоже терпимо
orignal так а если чтение
orignal может ли оно подсивать налолго?
orignal даже еслти раз в минуту у тебя же как раз тогда и просиходит хрень с очередью
orignal вопрос второй
orignal сколько будет дполнительного оверхеда если доваить мьютекс в каждый RouterInfo
Vort тогда я плохо понимаю, что ты пытаешься сделать. чисто копирование SSU2 треду не помешает
orignal итак
orignal раз в минуту собираются буффера которые надо сборосить на диск
orignal копирование буфера происходит под мьютексом
Vort насчёт чтения - как повезёт. в винде обычно только первый раз если. в линуксе, насколько помню, чтения "реальные", то есть подвисать будет всегда. но я давно проверял
orignal SSU2 иногда вставляет роутеры под тем же самым мьютексом
taureg 😶‍🌫️️
taureg а чо ш2з не сразу кидает все на диск?
taureg разве
orignal в результате тред SSU2 будет ждать когда мьютекс совободится
orignal конечно нет
orignal это было бы глупостью
Vort "<~orignal> копирование буфера происходит под мьютексом" в смысле, сейчас так сделано или так хочешь сделать?
Vort секундные лаги просто быть от копирования буферов не могут. поэтому я не понимаю ситуации
orignal явчера смотрел где мьютексы
orignal и сейчас так сделано
Vort а прямого доступа к диску, в обход функций сброса, в SSU2 треде нету?
Vort а профили влиять не могут?
Vort похоже, что надо дальше лаги изучать. тут что-то не сходится
orignal если есть то только чтение
orignal вот оно может быть
orignal профили тоже в памяти и сброс на диск отдбено
Vort где там чтение? надо туда измерение времени вкорячить
orignal в пиртесте как минимум
Vort в обработке чужих запросов?
Vort функцию скажи, поставлю туда измерительный код
orignal auto r = i2p::data::netdb.FindRouter (GetRemoteIdentity ()->GetIdentHash ());
orignal if (r && (r->IsUnreachable () || !i2p::data::netdb.PopulateRouterInfoBuffer (r))) r = nullptr;
orignal нввскидку
orignal PopulateRouterInfoBuffer
orignal а там вот такое вот
orignal return r->LoadBuffer (m_Storage.Path (r->GetIdentHashBase64 ()));
taureg мудрый ш2з и вася
Vort а интродьюсеры?
orignal расчет был на то что как правило буфер есть в памяти
orignal ну надо смотреть на фукрция начинабщиеся с Relay
Vort в HandleRelayRequest тоже вижу PopulateRouterInfoBuffer
orignal вот она может порождать тормоза
Vort сейчас вставлю логирование
orignal прямо скажем неприятная штука
orignal тут надо думать что с этим делать
Vort ну для начала я постараюсь найти подтверждение
orignal так в любом случае дисковая операция посреди потока это гадость
Vort я вот две вещи думаю
orignal самое простое
Vort 1. насколько это могло вредить во время атак
orignal если с ротуром есть сессия то буфер не дропать
Vort 2. насколько это мешает узлам с ещё более медленным железом, чем у меня
orignal особенно телефоны с сдкартойц
Vort по поводу скорости дисковых операций в винде: если диск чем-то сильно занят, то операции могут ждать секунды. а если ещё приоритет вдруг у процесса низкий, так вообще минуты
Vort меня uTorrent так задолобал, что я ему минимальный приоритет поставил. и вот когда другие процессы требуют диск, то uTorrent ждёт. иногда по 10 минут
Vort хм. или я логирование неправильно сделал, или в коде несколько причин. словил на тестовом узле лаг в 40мс, а логирование внутри PopulateRouterInfoBuffer не сработало
Vort попробую ещё на основном узле, но, скорее всего, проблема где-то в другом месте
Vort на основном узле ловушки из PopulateRouterInfoBuffer сработали, но пока что все чтения там быстрые
Vort 100-200 микросекунд
Vort а вот лаги SSU2 потока до 50 миллисекунд вполне в наличии
Vort сейчас главный вопрос в том, лаги по 10-50 мс - это мелкие версии многосекундных лагов или это отдельные механизмы
Vort возникло у меня подозрение, что на винде медленных чтений RI может не быть вообще
Vort мелкие файлы ведь в MFT хранятся, а эта структура, по-моему постоянно в памяти. ну или почти постоянно
Vort хотя я думал, что там лимит в 4К, но нет, меньше. до 1К примерно. так что некоторые RI будут в MFT, а некоторые - нет
orignal в общем возможны тормоза
orignal в любом случае надо что то делать
orignal а 10-50 миллисекнд я думаю просто копирование буферов
Vort реальный лаг словить важнее, чем теоретический. попробую сейчас погонять
Vort мелкие лаги по 10-20мс происходят намного чаще, чем сброс RI на диск
Vort и, судя по распределению, это вполне может быть тот же самый процесс, который даёт секундные лаги
orignal виндовый тот? а как это влияет на i2pd?
Vort нее, тот скорее всего вообще не при чём. я вчера его перезапустил и через 2 минуты словил жирнющий лаг
Vort я имею в виду механизм возникновения проблемы
orignal если диск дерагет часто то вполне
Vort я же говорю - я сделал логирование PopulateRouterInfoBuffer. связи с лагами вообще никакой не нашлось
Vort может, где-то ещё диск используется. вот буду разбираться
DUHOVKIN ВОРТ КРУТОЙ
DUHOVKIN ОН МЕГАМОНСТР
DUHOVKIN ПОКЛОНЯЙТЕСЬ ВРОТУ
Vort orignal: в общем, механизма, похоже, таки два
Vort пока я писал новый логгер, старый логгер вот такое словил:
Vort NetDb::PopulateRouterInfoBuffer / LoadBuffer from SSU2 # 1 duration 2113800 us
Vort я уже удалил код прошлого логгера, но, думаю, #1 - это из HandleRelayRequest
Vort NetDb::PopulateRouterInfoBuffer / LoadBuffer from SSU2 # 3 duration 456792 us
Vort # 3 из HandlePeerTest лезет реже
Vort второй логгер тоже уже успел кое что наловить
Vort мелкие лаги, 10-50мс лезут как из ProcessNextPacket, так и из m_LastSession->FlushData
Vort так что с PopulateRouterInfoBuffer таки надо что-то делать. но это не всё, и жирные лаги (в том числе, секундные) есть где-то ещё
Vort а вот и мега-лаг словился. наверно компиляция в Visual Studio "помогла" (она у меня отжирает почти все ресурсы)
Vort SSU2: Received queue size 6086 exceeds max size2500
Vort NetDb::PopulateRouterInfoBuffer / LoadBuffer from SSU2 # 1 duration 11651646 us
Vort да уж. такое ощущение, что источники лагов в этом потоке везде. только что словил лаг на 434мс в SendQueue
Vort профили, наверно, постоянно ещё читаются. дофига лагов идёт из SSU2Session::ProcessSessionConfirmed
Vort подозрение на i2p::data::netdb.AddRouterInfo, в котором присутствует GetProfile
Vort в общем, заканчиваю пока что тесты с выводом, что надо ещё чтение профилей проверить
orignal отлично. значит таки чтение
orignal да кстати GetProfile тоже может быть если подгужается с дикска
orignal а вот SendQueue это инетреснее потому что там только шифрование и отпрвака
Vort работа с пулами ещё, дропы (в которых хрен знает что)
Vort на пулы подозрение слабое, правда. но кто знает
orignal так в пулах вообще ничего нет
Vort ну а в дропах я там видел мьютексы
orignal дропы должны перекидывать на другой тред
Vort насколько далеко они идут - не знаю
Vort не всегда
orignal вот давай дроп с мьютексом
Vort ща
orignal это чинить надо
Vort может, они и безобидные, не знаю
orignal да тут стоит тоже продумать
orignal по уму надо на треде Tunnles делать