размер кучи в линуксе

Модератор: Модераторы разделов

rendom
Сообщения: 18
ОС: *nix

размер кучи в линуксе

Сообщение rendom »

Где у линукса в /proc/[pid]/* лежит размер аллокированной кучи? Чего-то я не пойму... :(

Существует другой способ получить текущий размер кучи? Функцией какой-нибудь сишной, например.

mmap() вроде бы с кучей не работает. А где она память аллоцирует?
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: размер кучи в линуксе

Сообщение serzh-z »

Никак. По крайней мере без танцев с бубном это не представляется возможным. С помощью sbrk(0) можно получить край хипа, и потом, теоретически, можно посчитать его размер...
Спасибо сказали:
Аватара пользователя
oav
Бывший модератор
Сообщения: 296

Re: размер кучи в линуксе

Сообщение oav »

rendom писал(а):
30.10.2006 18:07
Где у линукса в /proc/[pid]/* лежит размер аллокированной кучи? Чего-то я не пойму... :(

Существует другой способ получить текущий размер кучи? Функцией какой-нибудь сишной, например.

mmap() вроде бы с кучей не работает. А где она память аллоцирует?

зачем?
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: размер кучи в линуксе

Сообщение serzh-z »

Сишной функции, разумеется, не существует - так как стандарт не требует присутствия стека и/или хипа.

Любопытно - для какой цели это вам необходимо?
Спасибо сказали:
Аватара пользователя
Skladnoy
Сообщения: 90
ОС: Debian

Re: размер кучи в линуксе

Сообщение Skladnoy »

Полагаю, для того чтобы смотреть как она растет (или не растет) :) За фрагментацией следить, к примеру...

Кстати, действительно интересно
Спасибо сказали:
rendom
Сообщения: 18
ОС: *nix

Re: размер кучи в линуксе

Сообщение rendom »

Всяким алгоритмам умным, которые памяти много аллоцируют, нужно знать, сколько они этой памяти уже позабирали, чтобы иногда чего-нибудь в этой памяти заоптимизировать, например.
У солярки, между прочим, есть структурка pstatus_t в которую из файла /proc/[pid]/status можно считать данные и pstatus_t.pr_brksize будет размером кучи. А в Линуксе такого нет, да?
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: размер кучи в линуксе

Сообщение serzh-z »

Да. Портабельного и готового решения нет. Лишь костыли. Можно реализовать обертку вокруг распределителя (malloc, например) и в ней подсчитывать сколько чего выделено.
Спасибо сказали:
rendom
Сообщения: 18
ОС: *nix

Re: размер кучи в линуксе

Сообщение rendom »

А если из process image size чего-нибудь вычесть, например какой-нибудь code segment size, получим размер кучи?
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: размер кучи в линуксе

Сообщение serzh-z »

Нужно еще учесть размер стека.
Спасибо сказали:
rendom
Сообщения: 18
ОС: *nix

Re: размер кучи в линуксе

Сообщение rendom »

мониторю размер кучи на солярке и аиксе. Аллокирую память, смотрю размер кучи, освобождаю память. А она не освобождается. Не уменьшается. Только увеличивается если больший объем аллокировать. sbrk(0) точно также себя ведет. Какой механизм у этой кучи?
Спасибо сказали:
Аватара пользователя
vr13
Сообщения: 885
ОС: gentoo

Re: размер кучи в линуксе

Сообщение vr13 »

а чем плох /proc/<pid>/stat* и /proc/<pid>/maps?
по-моему, куда уж детальнее..
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: размер кучи в линуксе

Сообщение serzh-z »

vr13 писал(а):
05.11.2006 11:55
по-моему, куда уж детальнее..
А где здесь размер хипа?
Спасибо сказали:
sdk
Бывший модератор
Сообщения: 210

Re: размер кучи в линуксе

Сообщение sdk »

Блин, я не в силах удержаться :D.
Но когда я читаю название этой темы...
У меня постоянно проскакивает ассоциация, что ее написал кто-то, кто очень боится линукса :D.

Сорри за оффтопик.
Надо отправлять поскорее, пока не проснулась моя модераторская совесть и я не удалил собственное сообщение ;).
Серьезность - это способ сделать простые вещи сложными.
Если много знать - устанут глаза. Если много спать - то нет.
Нас никому не сбить с пути - нам пофигу куда идти.
:-)
Спасибо сказали:
Аватара пользователя
zov
Сообщения: 255

Re: размер кучи в линуксе

Сообщение zov »

rendom писал(а):
02.11.2006 18:01
Аллокирую память, смотрю размер кучи, освобождаю память. А она не освобождается. Не уменьшается.

Память освобождается с какого места кучи? При освобождении "с конца" sbrk(-size) в linux работает.
Спасибо сказали:
Аватара пользователя
zov
Сообщения: 255

Re: размер кучи в линуксе

Сообщение zov »

rendom писал(а):
30.10.2006 18:07
Существует другой способ получить текущий размер кучи? Функцией какой-нибудь сишной, например.


malloc_stats()
Спасибо сказали:
rendom
Сообщения: 18
ОС: *nix

Re: размер кучи в линуксе

Сообщение rendom »

sdk писал(а):
05.11.2006 14:47
Блин, я не в силах удержаться :D.
Но когда я читаю название этой темы...
У меня постоянно проскакивает ассоциация, что ее написал кто-то, кто очень боится линукса :D.
Да не, я всего боюсь :D Но уже привык. Приходится код проверять на пяти платформах. 3 юникса + linux + winnt. И еще у каждой операционки версии есть... иногда только тоска подкрадывается незаметно и начинает хотеться куда-нибудь от всего этого спрятаться. :) Последний раз такое было когда стал разбираться с организацией многопоточности и дампом стека потока. Хорошо что появились неотложные дела, и все эти стеки и потоки пришлось отложить в сторону на время :)
Спасибо сказали:
rendom
Сообщения: 18
ОС: *nix

Re: размер кучи в линуксе

Сообщение rendom »

zov писал(а):
05.11.2006 18:01
malloc_stats()

Оооо!!! супер!!! структура mallinfo в malloc.h - это как раз то что мне нужно. /ушел искать подобное для соляриса хп и аикса/
Спасибо сказали:
rendom
Сообщения: 18
ОС: *nix

Re: размер кучи в линуксе

Сообщение rendom »

Искать долго не пришлось. Все работает. Только солярис почему-то засунул mallinfo() в libmalloc, тогда как все остальные платформы совершенно правильно сделали это в libc. Ну вот зачем спрашивается сану понадобилось извращаться.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: размер кучи в линуксе

Сообщение serzh-z »

rendom писал(а):
10.11.2006 12:59
Ну вот зачем спрашивается сану понадобилось извращаться.
Вероятно - это отголоски "войны юниксов", хотя может потому, что mallinfo() - расширение GNU, и, соответственно, является частью GNU libc... :unsure:
Спасибо сказали:
rendom
Сообщения: 18
ОС: *nix

Re: размер кучи в линуксе

Сообщение rendom »

Поспешил я с быстрым ответом. Пьюрифайные билды показали, что в линуксе функция mallinfo() реализована криво. Purify ругается на нее FMR и ABR. А если вызывать раз 30 подряд, то в какой-то момент прога вываливается в кору вот с таким стеком:

_p2014static [rtlib.o]
mALLINFo [libc.so.6]
mallinfo [libc.so.6]
voMemoryUsed [mypsinfo.c:59]
memUsage [mypsinfo.c:133]
main [mypsinfo.c:33]

А какие еще есть варианты? Вместо mallinfo() :)
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: размер кучи в линуксе

Сообщение serzh-z »

Вернуться к началу и все же реализовать свою обертку вокруг malloc(), которая будет считать сколько она уже выделила.
Спасибо сказали: