Linux get_user_pages是否保证不会交换页面?

问题描述 投票:0回答:1

假设我在用户空间的缓冲区中调用了get_user_pages。我知道这实际上将“破坏”所有页面以确保它们存在于RAM中。

但是,这是否保证它们将保留在RAM中且不会被交换出去?

这是我在4.19.69内核上尝试过的一些代码的快速示例:

down_read(&current->mm->mmap_sem);
rc = get_user_pages(
    start,          //start virtual address
    1,              //number of pages
    FOLL_WRITE,     //flags, see FOLL_* in mm.h
    &p,             //destination page* array
    NULL            //destination vma* array (unneeded)
);
up_read(&current->mm->mmap_sem);

if (rc <= 0) {
    printk(KERN_ERR "Could not get user page :(\n");
    return rc;
}

printk(KERN_INFO "Page is %sreserved\n", PageReserved(p) ? "" : "not ");

根据dmesg消息,该页面未标记为保留。假设我开始向该(物理)页面进行DMA传输。这是否意味着在DMA硬件运行时Linux可能会将其换出到磁盘上?如果是这样,保证页面保持原样的正确方法是什么?

c linux-kernel dma
1个回答
1
投票

[get_user_pages()具有参考commentget_user_pages_remote()。后者的文档says

get_user_pages_remote()-将用户页面固定在内存中

因此,除非您用例如put_user_pages()

© www.soinside.com 2019 - 2024. All rights reserved.