IRCaBot 2.1.0
GPLv3 © acetone, 2021-2022
#dev
/2023/03/14
~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 это кстати может быть
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 минут рестарт илиты