我知道xen会在guest虚拟机启动时分配guest虚拟机所需的所有物理内存。它还维护一个影子页面表(我假设它使用struct page_info来维护它。我是否正确?如果没有人可以解释?)我希望访问它,因为我需要遍历该列表以检查访客是否分配此页面至少访问过一次。
struct page_info {
union {
};
pointer next, prev;
union {
};
};
任何人都可以解释我如何实现这个目标吗?
答案 0 :(得分:1)
我知道xen会在guest虚拟机启动时分配guest虚拟机所需的所有物理内存。
可能。我认为当前的Xen工具堆确实这样做了,但有些建议只是为访客的物理内存执行预订而不实际执行分配直到访客实际上访问它。这样做的动机是允许内存过量使用以增加主机对允许内存膨胀的guest虚拟机的容量,并避免在运行之前执行安全性和隔离实施所需的所有guest虚拟机内存的耗时擦除客。
它还维护一个影子页表
对于某些客人,在某些配置中,是的。对于完全虚拟化(也称为HVM)的guest虚拟机,Xen将不使用硬件扩展页表支持(例如Intel EPT)。对于半虚拟客户,它不会这样做。
(我假设它使用struct page_info来维护这个。我是否正确?如果没有人可以解释?)
嗯。影子页面表是一个非常复杂和复杂的软件。它们使用多个数据结构来维护guest虚拟机的虚拟化地址空间。我认为你需要详细研究代码才能掌握它。这超出了简短答案的范围。
我希望访问,因为我需要遍历该列表以检查分配了此页面的访客是否至少访问过一次。
您需要在访客页面表中将页面标记为不存在,并修改Xen的影子页面表代码中的页面错误处理程序以将其修复为陷阱中存在,还会更新您自己的数据结构以跟踪访问当他们发生。有类似的代码用于跟踪访客页面访问用于写入,而不是读取,称为脏位图跟踪,在执行虚拟机的实时迁移时使用。
任何人都可以解释我如何实现这一目标吗?
如果您能够解释想要跟踪对物理内存位置的访客读取访问的动机,那将会有所帮助。