我想知道某个页面是否固定在物理内存中,即不可交换或不可迁移。
从这篇post中,我知道 get_user_pages() 通常用于固定驱动程序中的用户空间内存以执行 DMA。它增加了struct page的refcnt,这意味着有人正在对物理页进行操作,并且该页不应该被操作。
是否还有其他情况,例如“kmalloc”或“vmmaloc”分配的内存用于 DMA,应固定。
Linux 提供了
pagemap
,一组用于检查用户空间中页表的接口。请参阅文档(请仔细阅读文档)。
测试页面是否支持 DMA(固定)的方法是:
getpid()
获取当前进程的pid。/proc/<pid>/pagemap
获取虚拟地址的pfn(页框号)。
/proc/kpageflags
查询该页框的标志。固定页面带有 UNEVICTABLE
标志。