有没有一种方法可以通过给定的 struct page 找到相应的 struct task_struct?我想做的是我想知道哪个 KVM 虚拟机在虚拟化环境中使用给定的页面。并且 task_struct 添加了一个新的数据成员(即 vm_id),这样一旦我通过给定的 struc 页面获取 task_struct,我就可以获得 vm id。似乎没有直接的解决方案。但我对此一无所知。
那么,做这些事情的正确方法是什么?非常感谢!
在 linux 中,kvm vm 是一个普通进程,其中 pid 和许多 vm 结构作为普通任务,要归档你想要的,我认为你需要编写一个内核模块并执行类似这样的操作
考虑到在 Linux 内核中实现了页框回收算法。为了实现 PFRA,内核使用了一些数据结构来查找所有使用同一页的页表条目,这些页将被回收。定位页表时,如果定义了 CONFIG_MM_OWNER,也应该定位 task_struct。
到 mm_struct 的页映射可能是 1:N,到 task_struct 的页映射也可能是 1:N。
在文件 ./mm/rmap.c 的函数 try_to_unmap_anon() 和 try_to_unmap_file() 中,有一些代码执行从页面结构到 mm_struct 的反向映射工作。
PFRA 实现细节可以参考《Understanding Linux Kernel, 3rd Edition》中的第 17 章。
一般来说,不会,因为许多页面在多个任务/进程之间共享(共享库、运行的程序的多个实例等)。不过,我对内核结构不够熟悉,无法提出替代解决方案,所以我会让其他人回答这个问题......