是否可以为(非文件支持的)mmap 区域添加自定义名称?

Is it possible to add a customized name for the (non file-backed) mmap region?

只是好奇是否可以为非文件支持的 mmap 区域指定一个名称?类似于以下示例中的 [New VMA area]

$ cat /proc/12345/maps
...
7fc062ef2000-7fc062f84000 r-xp 00000000 08:01 22688328                   /usr/local/musl/lib/libc.so
7fc062f85000-7fc062f86000 r--p 00092000 08:01 22688328                   /usr/local/musl/lib/libc.so
7fc062f86000-7fc062f87000 rw-p 00093000 08:01 22688328                   /usr/local/musl/lib/libc.so
7fc062f87000-7fc062f8a000 rw-p 00000000 00:00 0                          [New VMA area]
7fff6c384000-7fff6c3a5000 rw-p 00000000 00:00 0                          [stack]
7fff6c3bd000-7fff6c3c0000 r--p 00000000 00:00 0                          [vvar]

maps的内容来自the show_map_vma function in fs/proc/task_mmu.c。看看它,如果你想要一个非文件支持的映射的自定义名称,它需要来自 vma->vm_ops->namearch_vma_namearch_vm_name 是特定于体系结构的(正如您从名称中所期望的那样)并且仅用于为某些区域添加一些硬编码名称,因此它对您没有用。这使得 vma->vm_ops->name 成为您唯一的可能性,但是当您使用 MAP_ANONYMOUS 调用 mmap 时,vma_set_anonymousvma->vm_ops 设置为 NULL。因此,如果没有自定义内核代码,严格来说您所要求的是不可能的。

但是,您仍然可以按照自己的意愿行事。如果您实际上只是希望内存不被磁盘支持,您可以使用 memfd_create 系统调用或非磁盘支持文件系统(例如 tmpfs)中的文件创建一个 FD(例如,/dev/shm ,就像 shm_open 使用)。这些方法中的任何一种都可以让您控制所使用的文件名(例如,/memfd:some_name (deleted)/dev/shm/some_name)。