访问页面缓存时会调用哪些内核函数?

访问页面缓存时会调用哪些内核函数?

我有一个应用程序,我想测量其页面缓存命中/未命中数。我发现这个工具叫cachestat作者:Brendan Gregg,使用该ftrace工具计算 4 个特定函数(mark_page_accessed()mark_buffer_dirty()add_to_page_cache_lru()account_page_dirtied())的数量,以找出页面缓存访问和页面缓存未命中的总数。详细信息可以查到这里,但基本上,页面缓存访问和页面缓存未命中的总数可以计算如下:

总访问次数 = 次数mark_page_accessed()-mark_buffer_dirty()
未命中次数 = 次数 add_to_page_cache_lru()- 未命中次数account_page_dirtied()

当在我的系统上运行时(在两个系统上测试,内核版本分别为3.10和4.18),命中率变成负数,因为由于某种原因, 的数量add_to_page_cache_lru()大于 的数量mark_page_accessed(),而其他两个函数的数量是几乎为零(每 5 秒调用 0~10 次,而其他两个函数则调用数十万~数百万次)

正如布伦丹(Brendan)在本文中所解释的那样线,不同的内核可能使用不同的内核函数来访问(或插入)页面缓存。我认为,如果我知道在页面缓存访问/未命中/命中时调用了哪些其他函数,我就可以修改提供的脚本以在我的内核上运行。不幸的是,我对 Linux 内核的函数知之甚少,希望您能帮助我确定在页面缓存访问时调用了哪些函数。

谢谢!

相关内容