0

我正在分析我的 I/O 密集型应用程序,并在执行read. 这是让我感到困惑的部分perf report

在此处输入图像描述

可以看出,它mark_page_accessed占用了文件读取例程的 20%。它似乎与执行的块设备 I/O 无关,page_cache_async_readahead在我的情况下甚至没有调用它。所以所有文件数据都在缓存中。

void mark_page_accessed(struct page *page)使用以下文本对实现进行了注释:

/*
 * Mark a page as having seen activity.
 *
 * inactive,unreferenced    ->  inactive,referenced
 * inactive,referenced      ->  active,unreferenced
 * active,unreferenced      ->  active,referenced
 *
 * When a newly allocated page is not yet visible, so safe for non-atomic ops,
 * __SetPageReferenced(page) may be substituted for mark_page_accessed(page).
 */

因此,如果页面是inactiveor ,它似乎会发生unreferenced

问题:这是什么原因mark_page_accessed?是因为页面是不是而发生inactiveunreferenced?可能是什么原因?该页面已从磁盘读取,因此不会发生页面错误(主要或次要)。

4

0 回答 0