英语

空闲页面报告

空闲页面报告是一种 API,设备可以通过该 API 注册以接收系统中当前未使用的页面列表。这在虚拟化的情况下非常有用,在这种情况下,客户机可以使用此数据来通知虚拟机监控程序它不再使用内存中的某些页面。

对于驱动程序(通常是气球驱动程序)要使用此功能,它将分配并初始化一个 page_reporting_dev_info 结构。它将填充的结构中的字段是用于处理散列表的“report”函数指针。它还必须保证每次调用该函数都可以处理至少 PAGE_REPORTING_CAPACITY 个散列表条目。调用 page_reporting_register 将向报告框架注册页面报告接口,前提是没有其他页面报告设备已经注册。

注册后,页面报告 API 将开始向驱动程序报告成批的页面。该 API 将在接口注册后 2 秒开始报告页面,并在释放任何足够高阶的页面后 2 秒继续执行此操作。

报告的页面将存储在传递给报告函数的散列表中,其中最后一个条目在条目 nent - 1 中设置了结束位。当报告函数正在处理页面时,分配器无法访问这些页面。报告函数完成后,这些页面将返回到从中获取它们的空闲区域。

在删除正在使用空闲页面报告的驱动程序之前,有必要调用 page_reporting_unregister 以删除空闲页面报告当前正在使用的 page_reporting_dev_info 结构。这样做将防止通过接口发出进一步的报告。如果注册了另一个驱动程序或相同的驱动程序,则可以从先前的驱动程序在报告空闲页面方面停止的位置继续执行。

Alexander Duyck,2019 年 12 月 4 日