是否可以为(非文件支持的)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->name
或 arch_vma_name
。 arch_vm_name
是特定于体系结构的(正如您从名称中所期望的那样)并且仅用于为某些区域添加一些硬编码名称,因此它对您没有用。这使得 vma->vm_ops->name
成为您唯一的可能性,但是当您使用 MAP_ANONYMOUS
调用 mmap
时,vma_set_anonymous
将 vma->vm_ops
设置为 NULL
。因此,如果没有自定义内核代码,严格来说您所要求的是不可能的。
但是,您仍然可以按照自己的意愿行事。如果您实际上只是希望内存不被磁盘支持,您可以使用 memfd_create
系统调用或非磁盘支持文件系统(例如 tmpfs)中的文件创建一个 FD(例如,/dev/shm
,就像 shm_open
使用)。这些方法中的任何一种都可以让您控制所使用的文件名(例如,/memfd:some_name (deleted)
或 /dev/shm/some_name
)。
只是好奇是否可以为非文件支持的 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->name
或 arch_vma_name
。 arch_vm_name
是特定于体系结构的(正如您从名称中所期望的那样)并且仅用于为某些区域添加一些硬编码名称,因此它对您没有用。这使得 vma->vm_ops->name
成为您唯一的可能性,但是当您使用 MAP_ANONYMOUS
调用 mmap
时,vma_set_anonymous
将 vma->vm_ops
设置为 NULL
。因此,如果没有自定义内核代码,严格来说您所要求的是不可能的。
但是,您仍然可以按照自己的意愿行事。如果您实际上只是希望内存不被磁盘支持,您可以使用 memfd_create
系统调用或非磁盘支持文件系统(例如 tmpfs)中的文件创建一个 FD(例如,/dev/shm
,就像 shm_open
使用)。这些方法中的任何一种都可以让您控制所使用的文件名(例如,/memfd:some_name (deleted)
或 /dev/shm/some_name
)。