我的问题是如何在 Linux 中操作页面缓存?
我试图做一个旨在限制每个文件使用的页面缓存大小的小项目。我使用的方法如下 -
- 当页面指针被添加到页面缓存时,维护一个 kfifo 队列。
- 在add_to_page_cache_lru()中添加一个钩子并查看文件的基数树(地址空间)的大小是否大于预定大小,然后从 fifo 队列中选择一个牺牲品并从页面缓存中删除该页面。
- 我使用函数delete_from_page_cache()和try_to_unmap()从页面缓存中逐出页面,然后使用put_page()释放页面。
我希望这段代码可以释放页面并释放内存,但这似乎没有发生。例如,如果我读取一个大小为 25MB 的文件,并且我已将此文件的页面缓存大小限制为 512 页 (2MB),那么我希望在可用内存中看到只有 2MB 的变化(free -m )。相反,我看到的是完整的 25MB 被吃掉并显示在 free 命令中。
我还应该做些什么来确保满足我的要求?我还没有考虑过脏页,因为我什至无法让它用于读取(cat 文件)。任何指针都会有所帮助。
PS - 我在这个项目中使用 linux 4.0。