如何操纵Linux中的页面caching?

我想知道什么文件caching在页面caching中,并且要实际释放特定文件的caching空间。 如果需要的话,我可以编写内核模块甚至修改内核代码。 任何人都可以给我一些线索吗?

首先,内核不会维护页面缓存中所有文件的主列表,因为它不需要这样的信息。 相反,给一个inode,你可以查看关联的页面缓存页面,反之亦然。

对于每个页面缓存struct pagepage_mapping()将返回它所属的struct address_spacestruct address_spacehost成员标识拥有的struct inode ,从那里你可以得到inode号和设备。

mincore()返回一个向量,该向量指出调用进程的虚拟内存页面是否驻留在内核(RAM)中,如果引用,则不会导致磁盘访问(页面错误)。 内核返回关于从地址addr开始的页面的驻留信息,并且继续长度字节。

要测试当前映射到进程中的文件是否在缓存中,请使用其映射地址调用mincore
要测试任意文件是否在缓存中,请打开并映射它,然后按照上述步骤操作。

有一个提议的fincore()系统调用,不需要先映射文件,但是(现在这个时候)还不是一般可用的。

(然后madvise(MADV_DONTNEED) / fadvise(FADV_DONTNEED)可以从缓存中删除映射/文件的一部分。)

您可以通过使用,在Linux下的页面缓存中释放文件的内容

 posix_fadvise(fd, POSIX_FADV_DONTNEED 

从Linux 2.6开始,这将立即摆脱缓存给定文件或部分文件的页面缓存部分; 这个调用会阻塞,直到操作完成,但是这个行为不能被posix保证。

请注意,如果页面已被修改,则不会产生任何影响,在这种情况下,您希望先执行fdatasync或类似操作。

编辑:对不起,我没有完全读你的问题。 我不知道如何判断当前哪些文件在页面缓存中。 抱歉。