我正在寻找一种在操作系统访问交换空间时插入一些人为延迟的方法。我正在开发最新版本的内核(Version6.0.6),我在内核开源代码中找到了一些位置,它处理页面错误(do_page_fault()),但我不确定它是否是插入延迟的合适位置?
我在arch/x86/fault.c中尝试了arch/x86/fault.c部件(我正在使用ubuntu22.04进行测试)。但没有成功。在创建和更新内核时,有时会插入如此多的延迟,有时则不会。
发布于 2022-11-10 16:28:44
有两种类型的页面错误:主要错误和次要错误。
你正在寻找的东西被认为是重大的错误。有一个名为memory.c的文件。在函数vm_fault_t do_swap_page(struct vm_fault *vmf)中,您可以找到它的实现,请参阅以下代码:(linux -> mm -> Memy.c)
if (!folio) {
/*
* Back out if somebody else faulted in this pte
* while we released the pte lock.
*/
vmf->pte = pte_offset_map_lock(vma->vm_mm, vmf->pmd,
vmf->address, &vmf->ptl);
if (likely(pte_same(*vmf->pte, vmf->orig_pte)))
ret = VM_FAULT_OOM;
goto unlock;
}
/* Had to read the page from swap area: Major fault */
ret = VM_FAULT_MAJOR;
count_vm_event(PGMAJFAULT);
count_memcg_event_mm(vma->vm_mm, PGMAJFAULT);https://stackoverflow.com/questions/74392102
复制相似问题