英语

空闲页面报告

空闲页面报告是一种 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 日