~AreEnn
~R4SAS
~acetone
~orignal
~villain
&N00B
+Xeha
+relaybot
DUHOVKIN
Leopold
Most2
Nausicaa
Ruskoye_911
Vort
anon2
b3t4f4c3
karamba_i2p
nemiga
not_bob_afk
plap
poriori
profetikla
soos
teeth
un
weko_
whothefuckami
Vort
по-моему, размышлять о фрагментации без учёта алгоритмов, по которым работают кучи в разных ОС, смысла мало
Vort
то есть, в первую очередь, нужно понимание того, как работает куча
Vort
лично я пока что по своим визуализациям вижу только хаос
Vort
делать какие-то предположения о том, будут блоки рядом или нет, там очень сложно
Vort
и даже если и будут рядом - только они освободятся - на их место ОС напихает что попало
Vort
я уже несколько раз видел советы делать блоки или фиксированного размера (допустим, 4к) или кратного двойке. только вот, похоже, авторы свои предположения не тестировали
Vort
то что они сделают выделение 4к не значит, что оно выровняется по границе страницы памяти. да и советчики вряд ли учитывают заголовки блоков в куче (пурпурный цвет на моих графиках)
Vort
так что со следованием рандомным советам надо быть осторожными
Vort
вчерашнего наблюдения за двумя всплесками явно было недостаточно для явных выводов. поэтому дополнил данными ещё за сегодняшнюю ночь:
Vort
что видно: был ещё один всплеск, явно раздувший кучу, два всплеска, неявно раздувшие, и множество всплесков, практически никак на раздувание не повлиявшие
Vort
похоже, что чем больше пустых блоков в куче, тем проще ей обработать всплеск без дальнейшего раздувания
Vort
также видно, что с 0:00 до 2:00 потребление повышалось без всплеска, а влияние на кучу было таким же, как и от всплесков
Vort
с 4:00 до 6:00 тоже интересно - потребление идёт вниз, размер кучи - вверх
Vort
в общем, пока что единственный вывод - однажды раздутая куча уменьшает свои размеры очень неохотно
Vort
всплески могут ускорить раздувание, но и без всплесков этот процесс идёт тоже, просто медленнее
orignal
так не надо размышлять о куче
orignal
надо рызмышлять о том чтобы обращение к ней минимзировать
Vort
фрагментация кучи зависит не от обращений самих по себе, а от того, какие обращения производятся и в каком порядке
Vort
и вот для понимания "вредных" паттернов и нужно знать, как работает куча
Vort
другое дело, что контроля за этими паттернами не так уж много, когда куча тредов в практически хаотичном порядке делает выделения
orignal
давай подумаем иначе
orignal
создает ли openssl фрагментацию кучи
orignal
сам по себе
Vort
маловероятно
orignal
а если не создает то почему
orignal
как они решают эту проблему
Vort
точнее, её всё создаёт, но что-то больше, а что-то - меньше
orignal
там же дохуя разных структур создается
orignal
надо дти таким путем
Vort
или может, openssl тоже создаёт и достаточно, но масштабы невелики по сравнению с остальными структурами данных i2pd
Vort
блоки по 62 кило просто лучше видны, чем "пыль" по 16-80 байт
orignal
с чего вдруг?
orignal
мы же вызываем криптогрфиечские операции считай на каждый чих
Vort
мне, кстати, ещё кое что не понравилось на последнем графике - слишком много overhead для free блоков. а это значит, много мелочи
orignal
причем я точно знаю что там у них есть какой то свой менеджер памяти
Vort
криптооперации могут работать на тех буферах, которые предоставляет "клиент"
Vort
надо смотреть, что именно и как вызывается
orignal
не думаю
orignal
там же все время BN выделяются удаляются
Vort
по крайней мере, BN_new идёт прямиком в кучу
Vort
размер блока - 24 байта
orignal
я не понял мысль
Vort
"<~orignal> причем я точно знаю что там у них есть какой то свой менеджер памяти" - стал я вот это проверять и обнаружил, что по крайней мере для одной из структур используется просто куча
orignal
там может это из-за них течет?
Vort
может. надо будет посмотреть из чего состоит раздутая пустота в куче i2pd
Vort
sizeof(BN_CTX) = 64. ещё одно число, за которым стоит последить. помимо sizeof(BIGNUM) = 24
Vort
в свободных блоках кучи, конечно, не целые участки будут, а огрызки. но всё равно стоит глянуть
orignal
я думаю реальный BN поболее будет
Vort
там внутри какой-то указатель, да. но я пока не смотрел, где он заполняется
Vort
переделал формат. теперь каждые 30 сек два списка отображаются: выделенных и освобождённых блоков
Vort
допустим, вот последняя запись: [2023-03-14 07:03:30] a:43335614 f:53118320
Vort
43 мегабайта выделено, 53 освобождено
Vort
топ выделенных:
Vort
0: 5423136 (9969 * 544)
Vort
1: 4405632 (34419 * 128)
Vort
2: 2643792 (55079 * 48)
Vort
топ освобождённых:
Vort
0: 10001440 (18385 * 544)
Vort
1: 4889728 (38201 * 128)
Vort
2: 4017600 (125550 * 32)
Vort
544 явно указывает на происхождение из i2pd
Vort
но это топ. надо остальное тоже смотреть
Vort
* 32 что-то дофига. да и * 64 немало
Vort
хотя 32 - это может быть результат округления. подозреваю, что для освобождённых блоков информация не очень точная
Vort
так что в освобождённые 32 скорее всего состоят из 24 и 32
Vort
получается эта пыль вполне может идти от openssl
Vort
хотя в топе всё же данные именно от i2pd
orignal
так так само собой что от i2pd
Vort
вон 10 мегабайт дырок от IdentityEx
orignal
ха
orignal
это кстати может быть
Vort
непонятно мне, почему куча не берёт эти дырки
orignal
потому что он состоит из двух частей
Vort
то есть, или в пике было 9969 + 18385 IdentityEx или куча берёт что попало, пусть рядом и есть блок чётко нужного размера
Vort
хм хм хм. эти 18к появились, похоже, единомоментно. проверяю
Vort
сделаю, наверно, график. не единомоментно, но выбросами как бы
Vort
график интересным образом пропорционален предыдущему графику, на который его имеет смысл накладывать (то есть, сравнивать)
Vort
однако при сравнении находятся странные различия: иногда всплеск пустых 544 блоков совпадает со всплеском общего потребления, иногда - нет
Vort
но куча явно занимается чем-то странным - вместо использования старых блоков нужного размера, выделяет новые
Vort
может, в других ОС иначе
Vort
может, пытается найти блок некоторое время, а если быстро найти не выходит, то создаёт новый
orignal
запосто
orignal
менеджер кучи вообще штука сложная
orignal
кстати дегс говорит что зависшая память на десятки мегов это норма
orignal
нкакой менеджер памяти ею не будет заморачиваться
orignal
<degs> ну правильно, это примерно и есть порог возврата памяти в систему
orignal
<degs> habr.com/ru/post/253811 см. комментарии
Vort
похоже, что на винде то же самое - если удаётся последний блок в регионе кучи освободить, то происходит обрезание
Vort
оно по-другому просто не может работать
orignal
видишь дегс говорит что память до опредленного момента вообще не возвращается в систему
Vort
но вопрос почему куча пропускает пустые блоки нужного размера всё ещё остаётся открытым
orignal
правильно говорищь лень искать
meshman_
вообще не поверите как я решил проблему с доступом к почте. удалил /var/lib/i2pd/pop3-keys.dat и smtp-keys.dat и всё заработало
meshman_
может ли это быть багом и как я до этого додумался, вот в чем вопрос
orignal
не должно быть так
R4SAS
это проблема на стороне постмана
R4SAS
я уже говорил о подобном. помогает только смена ключей
orignal
застревает там видать
Vort
воткнул персональную кучу для IdentityEx (только для Windows): github.com/Vort/i2pd/commit/dfda0bfc2627e93a445657ee5887e30c5ce8f9e2
Vort
интересно, как это повлияет на фрагментацию
Vort
первый раз делал в C++ аллокаторы, поэтому там может быть чушь понаписана. но работает :) вроде
Vort
по крайней мере, тут в чате с этой версии сидеть получается
Vort
вот карта памяти куч на данный момент: paste.i2pd.xyz/?c4bb5e8997096a9c#G2fzLF8bzQxD8ruxCkBwtLe4ivbHaYHzR7RBxAz2x8Pr
Vort
скорее всего, 56 пикселей внизу - это новая куча. выглядит по крайней мере аккуратнее того писеца, что выше
orignal
и какие предложения?
orignal
пул для Identity?
orignal
через 10 минут рестарт илиты