Messages in this thread | | | Date | Tue, 8 Nov 2022 18:56:48 +0100 | From | David Hildenbrand <> | Subject | Re: [PATCH v2] mm: anonymous shared memory naming |
| |
On 07.11.22 19:47, Pasha Tatashin wrote: > Since: commit 9a10064f5625 ("mm: add a field to store names for private > anonymous memory"), name for private anonymous memory, but not shared > anonymous, can be set. However, naming shared anonymous memory just as
^ is
> useful for tracking purposes. > > Extend the functionality to be able to set names for shared anon. > > Sample output: > /* Create shared anonymous segmenet */
s/segmenet/segment/
> anon_shmem = mmap(NULL, SIZE, PROT_READ | PROT_WRITE, > MAP_SHARED | MAP_ANONYMOUS, -1, 0); > /* Name the segment: "MY-NAME" */ > rv = prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, > anon_shmem, SIZE, "MY-NAME"); > > cat /proc/<pid>/maps (and smaps): > 7fc8e2b4c000-7fc8f2b4c000 rw-s 00000000 00:01 1024 [anon_shmem:MY-NAME]
What would it have looked like before? Just no additional information?
> > Signed-off-by: Pasha Tatashin <pasha.tatashin@soleen.com> > ---
[...]
> diff --git a/include/linux/mm.h b/include/linux/mm.h > index 8bbcccbc5565..06b6fb3277ab 100644 > --- a/include/linux/mm.h > +++ b/include/linux/mm.h > @@ -699,8 +699,10 @@ static inline unsigned long vma_iter_addr(struct vma_iterator *vmi) > * paths in userfault. > */ > bool vma_is_shmem(struct vm_area_struct *vma); > +bool vma_is_anon_shmem(struct vm_area_struct *vma); > #else > static inline bool vma_is_shmem(struct vm_area_struct *vma) { return false; } > +static inline bool vma_is_anon_shmem(struct vm_area_struct *vma) { return false; } > #endif > > int vma_is_stack_for_current(struct vm_area_struct *vma); > diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h > index 500e536796ca..08d8b973fb60 100644 > --- a/include/linux/mm_types.h > +++ b/include/linux/mm_types.h > @@ -461,21 +461,11 @@ struct vm_area_struct { > * For areas with an address space and backing store, > * linkage into the address_space->i_mmap interval tree. > * > - * For private anonymous mappings, a pointer to a null terminated string > - * containing the name given to the vma, or NULL if unnamed. > */ > - > - union { > - struct { > - struct rb_node rb; > - unsigned long rb_subtree_last; > - } shared; > - /* > - * Serialized by mmap_sem. Never use directly because it is > - * valid only when vm_file is NULL. Use anon_vma_name instead. > - */ > - struct anon_vma_name *anon_name; > - }; > + struct { > + struct rb_node rb; > + unsigned long rb_subtree_last; > + } shared; >
So that effectively grows the size of vm_area_struct. Hm. I'd really prefer to keep this specific to actual anonymous memory, not extending it to anonymous files.
Do we have any *actual* users where we don't have an alternative? I doubt that this is really required.
The simplest approach seems to be to use memfd instead of MAP_SHARED | MAP_ANONYMOUS. __NR_memfd_create can be passed a name and you get what you propose here effectively already. Or does anything speak against it?
-- Thanks,
David / dhildenb
| |