如何处理linux页面缓存(标记查找)返回的页面少于要求的页面?

如何处理linux页面缓存(标记查找)返回的页面少于要求的页面?,linux,linux-kernel,flush,page-caching,Linux,Linux Kernel,Flush,Page Caching,这是从文件系统的角度来看的 文件系统页面大小为8K(即块大小的两倍,4k)。 因此,当我弄脏页面并进行刷新时,我会不惜一切代价确保传递给pvec\u lookup\u tag()的范围是8k对齐的。页面缓存应提供从8k对齐地址(即偶数索引)开始的页面 所以,问题是 我已经弄脏了页面,然后我要求页面缓存在指定的范围和映射中查找14个脏页面。 但是,令人惊讶的是,它只给了我一个奇数对齐的页面。 简言之,我得到的只是我最初计划的8k页面的第二个4k页面。 此外,我还通过使用crashdump检查了映射

这是从文件系统的角度来看的

文件系统页面大小为8K(即块大小的两倍,4k)。
因此,当我弄脏页面并进行刷新时,我会不惜一切代价确保传递给
pvec\u lookup\u tag()
的范围是8k对齐的。页面缓存应提供从8k对齐地址(即偶数索引)开始的页面

所以,问题是

我已经弄脏了页面,然后我要求页面缓存在指定的范围和映射中查找14个脏页面。
但是,令人惊讶的是,它只给了我一个奇数对齐的页面。
简言之,我得到的只是我最初计划的8k页面的第二个4k页面。
此外,我还通过使用crashdump检查了映射。我问的所有14页都在那里,而且都标着脏的

只要重新尝试相同的查找,就可以得到正确的页面。 但我觉得这里一定有更好的解决办法。
在将页面标记为脏页面和尝试标记查找之间是否存在某种奇怪的窗口导致了这种情况

(我在Linux内核v3.10.x上)


好吧,让我用更简单的措辞来重新表述这个问题

linux中的标记查找是否可能给我的页面比我要求的少?

如果是,如何处理这种情况?

限制操作系统仅使用一个CPU内核是否可以解决问题?在这种情况下,发生了一场比赛。否则,我会首先在最新的香草内核上检查这个问题。我不能转到3.10以上的任何版本,因为我使用的是一些明确的策略,这些策略后来会被删除。是的,限制一个CPU可以解决这个问题。所以,这可能是一场比赛。可能是因为他们为基数树引入了无锁设计。尽管如此,我还是觉得很奇怪,就我所能找到的而言,这件事竟然没有提及。