Massif сообщает об использовании 50 МБ без `--pages-as-heap=yes`, 1,7 ГБ с и htop сообщает о 122 МБ резидентного размера

Я пытался профилировать свою программу, чтобы определить минимальный объем оперативной памяти, необходимый ей, но, похоже, это не так просто.

При работе с --pages-as-heap=no Massif сообщает о пиковом использовании ~ 50 МБ. Это имело бы смысл, так как программа не такая интенсивная. При работе с --pages-as-heap=yes он сообщает о 1,7 ГБ, большая часть которых, похоже, связана с вещами, которые я не могу контролировать. Вот только фрагмент:

100.00% (1,330,499,584B) (page allocation syscalls) mmap/mremap/brk, --alloc-fns, etc.
->75.43% (1,003,565,056B) 0x4D0CF06: mmap (in /usr/lib/libc-2.32.so)
| ->30.26% (402,653,184B) 0x120380E5: ??? (in /usr/lib/pulseaudio/libpulsecommon-14.0.so)
| | ->30.26% (402,653,184B) 0x120255FA: ??? (in /usr/lib/pulseaudio/libpulsecommon-14.0.so)
| |   ->30.26% (402,653,184B) 0x120256E2: pa_memimport_attach_memfd (in /usr/lib/pulseaudio/libpulsecommon-14.0.so)
| |     ->30.26% (402,653,184B) 0x12030B18: pa_pstream_attach_memfd_shmid (in /usr/lib/pulseaudio/libpulsecommon-14.0.so)
| |       ->20.18% (268,435,456B) 0x12030D12: pa_common_command_register_memfd_shmid (in /usr/lib/pulseaudio/libpulsecommon-14.0.so)
| |       | ->20.18% (268,435,456B) 0x11FA88FA: ??? (in /usr/lib/libpulse.so.0.23.0)
| |       |   ->20.18% (268,435,456B) 0x1202DC50: pa_pdispatch_run (in /usr/lib/pulseaudio/libpulsecommon-14.0.so)
| |       |     ->20.18% (268,435,456B) 0x11FA9AD0: ??? (in /usr/lib/libpulse.so.0.23.0)
| |       |       ->20.18% (268,435,456B) 0x1203110E: ??? (in /usr/lib/pulseaudio/libpulsecommon-14.0.so)
| |       |         ->20.18% (268,435,456B) 0x12032BEE: ??? (in /usr/lib/pulseaudio/libpulsecommon-14.0.so)
| |       |           ->20.18% (268,435,456B) 0x11FBDC22: pa_mainloop_dispatch (in /usr/lib/libpulse.so.0.23.0)
| |       |             ->20.18% (268,435,456B) 0x11FBE290: pa_mainloop_iterate (in /usr/lib/libpulse.so.0.23.0)
| |       |               ->20.18% (268,435,456B) 0x4970F65: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| |       |                 ->10.09% (134,217,728B) 0x49713D4: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| |       |                 | ->10.09% (134,217,728B) 0x48B5A6D: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| |       |                 |   ->10.09% (134,217,728B) 0x25926B: SoLoud::sdl2static_init(SoLoud::Soloud*, unsigned int, unsigned int, unsigned int, unsigned int) (soloud_sdl2_static.cpp:87)
| |       |                 |     ->10.09% (134,217,728B) 0x1FE6E5: SoLoud::Soloud::init(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) (soloud.cpp:247)
| |       |                 |       ->10.09% (134,217,728B) 0x12BD29: game::start(int, char**) (base.cpp:91)
| |       |                 |         ->10.09% (134,217,728B) 0x193E3A: main (main.cpp:8)
| |       |                 |           
| |       |                 ->10.09% (134,217,728B) 0x49716C4: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| |       |                   ->10.09% (134,217,728B) 0x48B698E: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| |       |                     ->10.09% (134,217,728B) 0x48B2327: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| |       |                       ->10.09% (134,217,728B) 0x12BCE9: game::start(int, char**) (base.cpp:88)
| |       |                         ->10.09% (134,217,728B) 0x193E3A: main (main.cpp:8)
| |       |                           
| |       ->10.09% (134,217,728B) 0x12032947: pa_pstream_register_memfd_mempool (in /usr/lib/pulseaudio/libpulsecommon-14.0.so)
| |         ->10.09% (134,217,728B) 0x11FAB4D6: ??? (in /usr/lib/libpulse.so.0.23.0)
| |           ->10.09% (134,217,728B) 0x1202C033: ??? (in /usr/lib/pulseaudio/libpulsecommon-14.0.so)
| |             ->10.09% (134,217,728B) 0x1202DCCE: pa_pdispatch_run (in /usr/lib/pulseaudio/libpulsecommon-14.0.so)
| |               ->10.09% (134,217,728B) 0x11FA9AD0: ??? (in /usr/lib/libpulse.so.0.23.0)
| |                 ->10.09% (134,217,728B) 0x1203110E: ??? (in /usr/lib/pulseaudio/libpulsecommon-14.0.so)
| |                   ->10.09% (134,217,728B) 0x12032BEE: ??? (in /usr/lib/pulseaudio/libpulsecommon-14.0.so)
| |                     ->10.09% (134,217,728B) 0x11FBDC22: pa_mainloop_dispatch (in /usr/lib/libpulse.so.0.23.0)
| |                       ->10.09% (134,217,728B) 0x11FBE290: pa_mainloop_iterate (in /usr/lib/libpulse.so.0.23.0)
| |                         ->10.09% (134,217,728B) 0x4970F65: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| |                           ->05.04% (67,108,864B) 0x49713D4: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| |                           | ->05.04% (67,108,864B) 0x48B5A6D: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| |                           |   ->05.04% (67,108,864B) 0x25926B: SoLoud::sdl2static_init(SoLoud::Soloud*, unsigned int, unsigned int, unsigned int, unsigned int) (soloud_sdl2_static.cpp:87)
| |                           |     ->05.04% (67,108,864B) 0x1FE6E5: SoLoud::Soloud::init(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) (soloud.cpp:247)
| |                           |       ->05.04% (67,108,864B) 0x12BD29: game::start(int, char**) (base.cpp:91)
| |                           |         ->05.04% (67,108,864B) 0x193E3A: main (main.cpp:8)
| |                           |           
| |                           ->05.04% (67,108,864B) 0x49716C4: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| |                             ->05.04% (67,108,864B) 0x48B698E: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| |                               ->05.04% (67,108,864B) 0x48B2327: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| |                                 ->05.04% (67,108,864B) 0x12BCE9: game::start(int, char**) (base.cpp:88)
| |                                   ->05.04% (67,108,864B) 0x193E3A: main (main.cpp:8)
| |                                     
| ->20.18% (268,435,456B) 0x4C99506: new_heap (in /usr/lib/libc-2.32.so)
| | ->20.18% (268,435,456B) 0x4C9BA33: arena_get2.part.0 (in /usr/lib/libc-2.32.so)
| |   ->20.18% (268,435,456B) 0x4C9D978: tcache_init.part.0 (in /usr/lib/libc-2.32.so)
| |     ->15.13% (201,326,592B) 0x4C9E3E6: free (in /usr/lib/libc-2.32.so)
| |     | ->15.13% (201,326,592B) 0x6E593A2: ??? (in /usr/lib/dri/iris_dri.so)
| |     |   ->15.13% (201,326,592B) 0x4BF93E8: start_thread (in /usr/lib/libpthread-2.32.so)
| |     |     ->15.13% (201,326,592B) 0x4D12292: clone (in /usr/lib/libc-2.32.so)
| |     |       
| |     ->05.04% (67,108,864B) 0x4C9DD6D: malloc (in /usr/lib/libc-2.32.so)
| |       ->05.04% (67,108,864B) 0x63DE4D5: ??? (in /usr/lib/libdbus-1.so.3.19.13)
| |         ->05.04% (67,108,864B) 0x63E0657: dbus_message_iter_append_basic (in /usr/lib/libdbus-1.so.3.19.13)
| |           ->05.04% (67,108,864B) 0x63E122E: dbus_message_append_args_valist (in /usr/lib/libdbus-1.so.3.19.13)
| |             ->05.04% (67,108,864B) 0x63E14E9: dbus_message_append_args (in /usr/lib/libdbus-1.so.3.19.13)
| |               ->05.04% (67,108,864B) 0x49910B5: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| |                 ->05.04% (67,108,864B) 0x4994FC2: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| |                   ->05.04% (67,108,864B) 0x4C0118E: __pthread_once_slow (in /usr/lib/libpthread-2.32.so)
| |                     ->05.04% (67,108,864B) 0x4995058: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| |                       ->05.04% (67,108,864B) 0x48B5000: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| |                         ->05.04% (67,108,864B) 0x490ECFE: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| |                           ->05.04% (67,108,864B) 0x49A26A9: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| |                             ->05.04% (67,108,864B) 0x4BF93E8: start_thread (in /usr/lib/libpthread-2.32.so)
| |                               ->05.04% (67,108,864B) 0x4D12292: clone (in /usr/lib/libc-2.32.so)
| |                                 
| ->10.09% (134,217,728B) 0x4C994C2: new_heap (in /usr/lib/libc-2.32.so)
| | ->10.09% (134,217,728B) 0x4C9BA33: arena_get2.part.0 (in /usr/lib/libc-2.32.so)
| |   ->10.09% (134,217,728B) 0x4C9D978: tcache_init.part.0 (in /usr/lib/libc-2.32.so)
| |     ->05.04% (67,108,864B) 0x4C9E3E6: free (in /usr/lib/libc-2.32.so)
| |     | ->05.04% (67,108,864B) 0x6E593A2: ??? (in /usr/lib/dri/iris_dri.so)
| |     |   ->05.04% (67,108,864B) 0x4BF93E8: start_thread (in /usr/lib/libpthread-2.32.so)
| |     |     ->05.04% (67,108,864B) 0x4D12292: clone (in /usr/lib/libc-2.32.so)
| |     |       
| |     ->05.04% (67,108,864B) 0x4C9ED4D: calloc (in /usr/lib/libc-2.32.so)
| |       ->05.04% (67,108,864B) 0x11FCD13F: pa_xmalloc0 (in /usr/lib/libpulse.so.0.23.0)
| |         ->05.04% (67,108,864B) 0x11FBD500: ??? (in /usr/lib/libpulse.so.0.23.0)
| |           ->05.04% (67,108,864B) 0x1202DED4: pa_pdispatch_register_reply (in /usr/lib/pulseaudio/libpulsecommon-14.0.so)
| |             ->05.04% (67,108,864B) 0x11FCE0C7: pa_context_subscribe (in /usr/lib/libpulse.so.0.23.0)
| |               ->05.04% (67,108,864B) 0x4970DB7: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| |                 ->05.04% (67,108,864B) 0x490ECFE: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| |                   ->05.04% (67,108,864B) 0x49A26A9: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| |                     ->05.04% (67,108,864B) 0x4BF93E8: start_thread (in /usr/lib/libpthread-2.32.so)
| |                       ->05.04% (67,108,864B) 0x4D12292: clone (in /usr/lib/libc-2.32.so)
| |                         
| ->10.09% (134,217,728B) 0x12038923: pa_shm_create_rw (in /usr/lib/pulseaudio/libpulsecommon-14.0.so)
| | ->10.09% (134,217,728B) 0x1202517A: pa_mempool_new (in /usr/lib/pulseaudio/libpulsecommon-14.0.so)
| |   ->10.09% (134,217,728B) 0x11FA80CA: pa_context_new_with_proplist (in /usr/lib/libpulse.so.0.23.0)
| |     ->10.09% (134,217,728B) 0x4970F0F: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| |       ->05.04% (67,108,864B) 0x49713D4: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| |       | ->05.04% (67,108,864B) 0x48B5A6D: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| |       |   ->05.04% (67,108,864B) 0x25926B: SoLoud::sdl2static_init(SoLoud::Soloud*, unsigned int, unsigned int, unsigned int, unsigned int) (soloud_sdl2_static.cpp:87)
| |       |     ->05.04% (67,108,864B) 0x1FE6E5: SoLoud::Soloud::init(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) (soloud.cpp:247)
| |       |       ->05.04% (67,108,864B) 0x12BD29: game::start(int, char**) (base.cpp:91)
| |       |         ->05.04% (67,108,864B) 0x193E3A: main (main.cpp:8)
| |       |           
| |       ->05.04% (67,108,864B) 0x49716C4: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| |         ->05.04% (67,108,864B) 0x48B698E: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| |           ->05.04% (67,108,864B) 0x48B2327: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| |             ->05.04% (67,108,864B) 0x12BCE9: game::start(int, char**) (base.cpp:88)
| |               ->05.04% (67,108,864B) 0x193E3A: main (main.cpp:8)
| |                 
| ->03.80% (50,622,464B) 0x4BFA074: pthread_create@@GLIBC_2.2.5 (in /usr/lib/libpthread-2.32.so)
| | ->02.52% (33,570,816B) 0x7899D5B: ??? (in /usr/lib/dri/iris_dri.so)
| | | ->02.52% (33,570,816B) 0x6E695B5: ??? (in /usr/lib/dri/iris_dri.so)
| | |   ->02.52% (33,570,816B) 0x6E6ADA8: ??? (in /usr/lib/dri/iris_dri.so)
| | |     ->02.52% (33,570,816B) 0x6E6B1FB: ??? (in /usr/lib/dri/iris_dri.so)
| | |       ->02.52% (33,570,816B) 0x7525848: ??? (in /usr/lib/dri/iris_dri.so)
| | |         ->02.52% (33,570,816B) 0x752C40C: ??? (in /usr/lib/dri/iris_dri.so)
| | |           ->02.52% (33,570,816B) 0x6AB2CE6: ??? (in /usr/lib/dri/iris_dri.so)
| | |             ->02.52% (33,570,816B) 0x6AAFEEA: ??? (in /usr/lib/dri/iris_dri.so)
| | |               ->02.52% (33,570,816B) 0x6F5E528: ??? (in /usr/lib/dri/iris_dri.so)
| | |                 ->02.52% (33,570,816B) 0x687AF5C: ???
| | |                   ->02.52% (33,570,816B) 0x6863838: ???
| | |                     ->02.52% (33,570,816B) 0x6864463: ???
| | |                       ->02.52% (33,570,816B) 0x68645F4: ???
| | |                         ->02.52% (33,570,816B) 0x497D1C6: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| | |                           ->02.52% (33,570,816B) 0x497D4FF: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| | |                             ->02.52% (33,570,816B) 0x494D645: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| | |                               ->02.52% (33,570,816B) 0x494FB62: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| | |                                 ->02.52% (33,570,816B) 0x495039E: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| | |                                   ->02.52% (33,570,816B) 0x48B2307: ??? (in /usr/lib/libSDL2-2.0.so.0.12.0)
| | |                                     ->02.52% (33,570,816B) 0x12BCE9: game::start(int, char**) (base.cpp:88)
| | |                                       ->02.52% (33,570,816B) 0x193E3A: main (main.cpp:8)
...

Глядя на Понимание виртуальной памяти Linux: вывод массива valgrind показывает основные различия с --pages-as-heap и без него, я понимаю причину этих расхождений, но что мне следует сообщать как минимально требуемый объем оперативной памяти для программа для других? Многие из них являются деталями реализации и, похоже, относятся к моему компьютеру.

50 МБ имело бы смысл, так как я использую только malloc и new для выделения памяти в куче, но что, если бы я также использовал mmap? Как я должен проверить это, не получая при этом всех этих ложных срабатываний?


person mid    schedule 28.02.2021    source источник