Messages in this thread | | | Date | Sun, 13 Oct 2019 20:10:54 -0700 | From | Andi Kleen <> | Subject | Re: [PATCH 3/3] perf tools: Make 'struct map_shared' truly shared |
| |
On Sun, Oct 13, 2019 at 05:14:27PM +0200, Jiri Olsa wrote: > Andi reported that maps cloning is eating lot of memory and > it's probably unnecessary, because they keep the same data. > > Changing 'struct map_shared' to be a pointer inside 'struct map', > so it can be shared on fork. Changing the map__clone function to > actually share 'struct map_shared' for cloned maps. > > The 'struct map_shared' carries its own refcnt counter, which is > incremented when it's assigned to new 'struct map' and decremented > when 'struct map' gets deleted in map__delete (its refcnt is 0). > > This 'maps sharing' seems to save lot of heap for reports with > many forks/cloned mmaps (over 60% in example below).
The one case I wasn't sure about is with JIT support. So if a map gets modified with fixup/start from /tmp/perf-%d in one process, would it impact the other too?
We may need a COW operation for this (hopefully rare) case.
-Andi
| |