【问题标题】:UNIX system call to unset the reference bit of a specific page in page table?UNIX系统调用取消设置页表中特定页面的引用位?
【发布时间】:2018-12-08 19:58:42
【问题描述】:

我正在尝试通过破解页表中的引用位来计算特定页面集的点击量。是否有任何系统调用或任何其他方式来取消设置引用位(在类 UNIX 系统中)?

页表是计算机操作系统中的虚拟内存系统用来存储虚拟地址和物理地址之间的映射关系的数据结构。 (https://en.wikipedia.org/wiki/Page_table)

在类 unix 系统中,每个页表条目都有一个位关联,称为“引用”位,它指示在该位未设置后是否访问了页面。 linux 内核会定期取消设置这些引用位,并在此之后检查一段时间以了解哪些页面已被访问,以检测“热”页面。但是这个信息是非常粗粒度和低精度的,因为它没有说明访问次数和时间。

我想通过取消设置引用位来计算在较短时期内对特定页面的访问次数,然后检查这些页面是否在短时间内被访问过。

因此,我想知道是否有任何系统调用或 CPU 中断提供了取消设置“参考位”的方法。否则,我需要深入内核,看看那里发生了什么。

【问题讨论】:

  • 请解释(也许有一些minimal reproducible example)什么确切是你的参考位以及你如何破解它们。 AFAIK,没有系统调用来获取它们(即使mincore(2) 正在做类似的事情)。所以编辑你的问题来改进它(没有更多细节不清楚)。系统调用列表见syscalls(2)
  • 请提供有关您的目标的更多详细信息。
  • 还可以查看proc(5)。也许你可能对/proc/self/smaps 感兴趣
  • @BasileStarynkevitch 刚刚添加了有关该问题的更多信息。
  • @wallyk 刚刚添加了有关该问题的更多信息。

标签: linux-kernel kernel-module page-tables


【解决方案1】:

没有用于重置页面引用位的 API。页面管理是内核调优的一个非常棘手的方面,没有人想要打扰它。当然,您可以根据需要修改内核。

相反,您可以查看Valgrind,它是一个用于运行单个程序的调试和分析工具。通常它会检测细微的内存错误,例如在动态内存块被释放后检测它的使用。

如果您需要整个系统的页面管理信息,我认为最方便的解决方案是破解内核。

【讨论】:

    猜你喜欢
    • 2012-04-08
    • 2020-08-27
    • 2018-06-28
    • 2011-12-04
    • 2011-06-13
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 2017-04-09
    相关资源
    最近更新 更多