~AreEnn
~R4SAS
~acetone
~orignal
~villain
&N00B
+Xeha
+relaybot
DUHOVKIN
Guest7184
Leopold
Most2
Nausicaa
Ruskoye_911
Vort
anon2
b3t4f4c3
karamba_i2p
nemiga
not_bob_afk
plap
poriori
profetikla
soos
teeth
un
weko_
whothefuckami
Leopold
reg.i2p при регистрации домена хочет signature, где её взять?
Zel
Leopold: Ты можешь сгенирировать сигнатуру используя i2pd-tools или для доменов второго уровня в web интерфейсе i2pd, есть для этого поле. Зайди в туннели, выбери серверный туннель, кликни на Address registration line,
Zel
введи желаемый домен и нажми generate. Получившуюся строку вставь в reg.i2p или используй как address helper
Leopold
Получилось, спасибо C:
Zel
Рад что смог помочь!
uis
Есть slab аллокаторы
lolwut
hi
lolwut
при апдейте apt каждый раз спрашивает из-за измененного конфига. можно как-то изменить состав пакета, чтоб он обновлялся молча?
lolwut
переименовать дефолтный конфиг или еще как
orignal
Leopold на веб морде строка
Vort
uis: найти бы ещё кроссплатформенную реализацию slab`а. ну или хотя бы чисто для винды, чтобы я потестировать мог
orignal
а что?
Vort
если это был мне вопрос, то я его не понял
Vort
попробую я ещё один эксперимент - проверю предположение о том, что основной причиной разрастания кучи являются 62-килобайтные выделения
orignal
что такое slab?
Vort
перенесу их на виндовые функции VirtualAlloc / VirtualFree
Vort
orignal: метод выделения памяти
Vort
(я в рестарт, проверять VirtualAlloc)
Vort
orignal: даже для рувики кто-то перевёл статью: ru.wikipedia.org/wiki/Slab
Vort
поискал я реализации, даже нашёл одну (на Rust), но она не поддерживает винду. надо ещё искать
orignal
а я попробую сделать пул для identity
Vort
может, поможет. хотя у меня пока что слишком много неуверенности относительно всех этих "дефрагментирующих" методов
orignal
это надо делать в любом случае
Vort
хотя бы самый простой вопрос - как оценить эффективность изменения? вот при изменении ставится цель - допустим, уменьшить фрагментацию кучи. как проверить - удалось ли её изменением достичь?
Vort
я интуитивно понимаю, что пулы могут помогать
Vort
но всё же остаётся ощущение блуждания во тьме
orignal
ну я смотрел по потребляемой памяти
orignal
когда не было пулов жрало совсем неприлично
Vort
метод понятный, но малонадёжный. так как нагрузка на узел варьируется
orignal
на флудфиле примерно одинаковая
Vort
что думаешь про вынесение 62килобайтных блоков в VirtualAlloc / mmap ?
orignal
нууу мы на работе так и делаем
orignal
тут тоже бы надо
Vort
ок. если ничто не помешает моему тесту - посмотрим результат
orignal
но у нас там линукс
orignal
толкьо
Vort
единственное что мне не нравится - на некоторых системах может не быть этой фичи
Vort
я вот сейчас глянул в вики - так оказывается даже если есть mmap, то не факт, что он будет рабочим
Vort
то есть - минус в том, что надо будет ifdef`ами обвешиваться
Vort
может, есть и готовая обёртка какая-то
Vort
которая при недоступности перенаправляла бы в общую кучу
orignal
насколько мне известно malloc для блоков большого размера сам вызывает mmap
Vort
вроде даже настроить можно: stackoverflow.com/questions/33128587/why-does-malloc-rely-on-mmap-starting-from-a-certain-threshold
Vort
но это линукс. надо ещё под винду поискать
Vort
хотя для всех подряд больших блоков, может, mmap и лишний и стоит вызывать только для тех, которые точно в нём нуждаются
orignal
начиная с 4K разумеется
Vort
важно ещё то, что VirtualAlloc и mmap - относительно дорогие вызовы
orignal
конечно
orignal
они должны быть редко
Vort
вот 62к блоки гадят редко, но метко - думаю, их стоит перенаправлять в виртуальное пространство. а что-то более частое - скорее, не стоит. хотя думать надо
orignal
да их лучше 64K делать
Vort
ОС сама сделает
orignal
62K это предельный размер I2NP сообщения
orignal
понять бы откуда они вообще берутся
Vort
вот это тоже важно
orignal
кто передает пакеты такой длины
Vort
пока точно знаю, что они рождаются при некоторых пиках
orignal
или там длина реально может 5K
orignal
на пиках говоришь?
orignal
так это может NTCP2 быть
Vort
ну да. обычно их в памяти несколько штук болтается
Vort
а в пиках - 50-100
Vort
но, наверно, не во всех пиках. тщательно не проверял
weko
интересно откуда пики
weko
по 50 штук то
orignal
void NTCP2Session::CreateNextReceivedBuffer (size_t size)
orignal
на пике просто приходят полные фреймы
orignal
а они вполть до 64K
weko
ну понятно. просто это выходит сразу несколько туннелей такое делают
Vort
я видел ещё и SSU2 пакеты рядом
Vort
может, это передача SSU2->NTCP2
Vort
ну или наоборот
orignal
это как?
Vort
ну транзит из одного протокола в другой
orignal
в SSU2 всегда только пакеы размером не более 1500
orignal
а в NTCP2 там фреймы
orignal
объясни как это транзит из одного протокола в другой?
Vort
транзит же не обязан быть чётко SSU2-SSU2 или NTCP2-NTCP2
orignal
там же будет или на входе много 1K или на выходе
orignal
нет конечно
orignal
но там будет как правило 1K
Vort
тогда почему при этих пиках частенько блоки 1544
Vort
вот два момента времени:
orignal
для SSU2?
orignal
счас покажу
Vort
[2023-03-14 04:57:00] a:49394399 f:51177504
Vort
0: 5230560 (9615 * 544)
Vort
1: 4301584 (2786 * 1544)
Vort
2: 4233728 (33076 * 128)
Vort
3: 2951976 (47 * 62808)
Vort
4: 2713104 (56523 * 48)
Vort
[2023-03-14 04:57:30] a:42034068 f:58204880
Vort
0: 5227296 (9609 * 544)
Vort
1: 4162560 (32520 * 128)
Vort
2: 2648544 (55178 * 48)
Vort
3: 2618712 (36371 * 72)
Vort
4: 2273760 (28422 * 80)
orignal
смоти struct Fragment
orignal
{
Vort
за 30 сек из топа ушли как * 1544, так и * 62808
orignal
там буфер в 1500 и кае какие поля
Vort
в общем, в пиках часто и 1544 и 62808
Vort
одновременно
orignal
const size_t I2NP_MAX_MESSAGE_SIZE = 62708;
orignal
это длина максимального I2NP
orignal
вопрос откуда они
orignal
и почти нет 4k как я понимаю
Vort
в топе по потреблению их вообще не видел
orignal
LogPrint (eLogInfo, "SSU2: I2NP message size ", msg->maxLen, " is not enough");
orignal
auto newMsg = NewI2NPMessage ();
orignal
что в логах с такими сооющениями?
Vort
я info не включаю, у меня не так много места на диске )
Vort
а ловить надо пик. его может не быть много часов..
orignal
просто мне непонятно откуда они
polistern
orignal, вспомнила, я когда перед добавлением подписей в боте добилась полной очистки памяти на завершение процесса, а после добавления подписи мне valgrind начал сыпать, Verifier'ы остаются. Глубоко не копала. Может поможет чем.
Vort
ну надо чтобы кто-то врубил info и поставил логирование пиков :/
orignal
polistern с каким типом? EDDSA>?
orignal
Vort или в той строке поменяй на error
orignal
я полагал что это крайне редкое событие должно быть
Vort
хорошая идея, но я пока что не хочу прерывать тестирования VirtualAlloc`а
polistern
На тестовом узле все 3 включены, так что и он там есть.
orignal
polistern veirfier из IdentityEx?
polistern
Да
orignal
вот это возможно потому что там голый указатель
orignal
я смотрю код вообще не понимаю что за костыль у меня там сделан с мьютексом
polistern
orignal, вроде uniq_ptr был
orignal
mutable i2p::crypto::Verifier * m_Verifier = nullptr;
orignal
кроче дичь там явная
orignal
надо в любом случае чистить
polistern
Да, ты прав, перепутала с Signer
orignal
signer вещь редкая
polistern
У меня частая) На каждое письмо подпись. Надо кстати обновить наверное libi2pd у себя потом, когда KadDHT буду пробовать.
orignal
там у тебя signer всего один должен быть
orignal
понятно что он вызывается часто но он один
orignal
а veirfier-ов много
polistern
На каждую identity по одному того и того.
orignal
на каждый роутер грубо говоря
polistern
Ненене, у меня для своих.
polistern
Так, стоп
orignal
signer-ов столько сколько у тебя приватных ключей
polistern
А, не, всё правильно. У меня там также сделано, через указатель. Мои identity не сильно, но отличаются. Но ничего, ваши тоже будут использоваться, когда отправку/получение через relay буду делать, там шифровать надо будет луковичкой.
polistern
orignal, да я уже подзабыла немного какая у меня там логика. Помню, что заставила работать, а детали уже размылись)
orignal
ну вот счас время искать утечки памяти
orignal
хочу разобрться с этим мьютексом
polistern
Ок, буду бдить, потом сразу проверю.
orignal
пришло время наводить порядок и в этом
orignal
вообще у меня более инетресный вопрос нафига мы храним 384 байта
polistern
В плане?
polistern
Там же два массива в Identity. Хочешь иначе сделать?
orignal
потому что ключи для EDDSA 32 + 32
orignal
зачем хранить 384 или можно 64,
polistern
Ну да, знатный оверхед
orignal
это раньше было ElGamal + DSA
orignal
256 + 128
polistern
А сколько всего пар по типам получается?
orignal
для роутеров счас всгда ECIES + EDDSA
orignal
остальные можно просто дропать
orignal
то есть реально 64 байта всего
polistern
Ну только совсем древние отваляться, если ещё не отвалились
orignal
для адресов же всегда в Identity ElGamal но делов в том что он там не нужен
orignal
в смысле он есть но сам ключ не используется
orignal
только для вычисления хэша
orignal
его можно сразу же выкинуть
polistern
Ну не хранить дальше просто в памяти, понятно.
orignal
такая стрктура в меня была с самого начала когжа было именно так
orignal
сейчас все иначе а код остался
polistern
Так кто б туда лез ещё))
orignal
вот я и собраюсь разобраться особенно с этим непонятным мьютексом
orignal
непонятно зачем там