我理解 xen 在启动时会分配客户机所需的所有物理内存。它还会维护一个影子页表(我假设它使用 struct page_info 来维护它。我说得对吗?如果不正确,谁能解释一下?),我希望访问这个表,因为我需要遍历该列表,检查分配了此页面的客户机是否至少访问过它一次。
有人能解释我如何才能实现这个目标吗?
答案1
拉维,
为了回答您的问题,我假设您想要修改虚拟机管理程序源代码,并且您是一位经验丰富的 Linux 内核编码员。如果您没有内核编码经验,那么您可能应该先尝试一个更简单的内核编码项目来获得一些经验。解释如何修改 Xen 影子内存代码超出了 AskUbuntu 的范围。答案肯定不适合这些回复之一。您要做的事情非常复杂。
首先,struct page_info 不是一个列表。它是一个构建块抽象数据类型,在 Xen 虚拟机管理程序中的多个列表中使用。因此,请告诉我们您正在查看哪个使用 page_info 的列表。
正如您已经看到的,page_info 结构中有一个引用计数,但据我所知,它不能直接用于执行您想要的操作。您看到的作为 page_info 结构一部分的反向指针 _domain 仅针对未用作影子页面的页面定义。
Xen 可以配置为按照您所说的操作,在启动客户机时分配所有内存,但也可以配置为使用 ballooning 并在稍后分配内存,无论是增加还是减少。要了解 balloon 驱动程序和这种内存分配,请参阅 Xen wiki,网址为http://wiki.xen.org/wiki/Main_Page。
还有一项称为“超验内存”的功能,在源代码中称为“tmem”。如果配置为使用 tmem,Xen 将从不使用内存的客户机中拿走内存,将其提供给更需要内存的另一个客户机。因此,如果您想修改 Xen 虚拟机管理程序以跟踪所有影子内存的客户机访问,则需要做更多工作,并在所有可能的内存管理模式下运行。
如果您不是内核编码人员,而只是进行故障排除,您可以将串行终端连接到运行 Xen 的硬件(有关如何操作,请参阅 Xen wiki)以查看内存使用情况。一旦串行终端正常运行,您不仅可以与 dom0 对话,而且通过按 Ctrl-A 三次,您还可以直接与虚拟机管理程序对话。按“h”键可获取命令帮助列表。
真挚地,
段错误重载