空闲页面报告
空闲页面报告是一种API,设备可以通过该API注册以接收当前系统未使用的页面列表。这在虚拟化的情况下非常有用,因为虚拟机可以利用这些数据通知hypervisor它不再使用内存中的某些页面。
对于驱动程序,通常是一个气球驱动程序(balloon driver),要使用这个功能,它将分配并初始化一个page_reporting_dev_info结构。结构中的字段将填充为“report”函数指针,用于处理scatterlist。它还必须保证每次调用该函数时,能够处理至少PAGE_REPORTING_CAPACITY数量的scatterlist条目。调用page_reporting_register将在假定没有其他页面报告设备已注册的情况下,向报告框架注册页面报告接口。
一旦注册,页面报告API将开始向驱动程序报告页面批次。API将在接口注册后的2秒后开始报告页面,并在释放足够高阶的任何页面后的2秒后继续报告。
报告的页面将存储在传递给报告函数的scatterlist中,最后一个条目在entry nent - 1中设置了结束位。在报告函数处理页面时,这些页面将对分配器不可访问。一旦报告函数完成,这些页面将被返回到它们获取的空闲区域。
在移除使用空闲页面报告的驱动程序之前,有必要调用page_reporting_unregister,以移除当前由空闲页面报告使用的page_reporting_dev_info结构。这样做将阻止通过接口进一步发出报告。如果另一个驱动程序或相同的驱动程序已注册,它可以在报告空闲页面方面继续上一个驱动程序的工作。
mm\page_reporting.c
来源:Alexander Duyck, Dec 04, 2019