C:知道何时读取或写入变量

时间:2017-11-06 12:48:30

标签: c linux memory arm mmap

目前正致力于Xilinx臂式开发平台。使用linux和C.

我映射了一些页面。例如## Convenience function get_hist <- function(p) { d <- ggplot_build(p)$data[[1]] data.frame(x = d$x, xmin = d$xmin, xmax = d$xmax, y = d$y) } # make a dataframe for ggplot set.seed(1) x = runif(100, 0, 10) y = cumsum(x) df <- data.frame(x = sort(x), y = y) # make geom_histogram p <- ggplot(data = df, aes(x = x)) + geom_histogram(aes(y = cumsum(..count..)), binwidth = 1, boundary = 0, color = "black", fill = "white") 。我想知道哪些页面是最近最少使用的,所以我可以将它们复制到其他地方。

2 个答案:

答案 0 :(得分:2)

Linux内核本身会跟踪LRU页面,例如,找出要交换或不换出内存争用的页面。

如果要在库中使用LRU标志,可以从用户空间读取LRU标志:

  • 在/ proc / pid / pagemap中迭代要跟踪的虚拟页面条目并记住页面框架编号
  • 从/ proc / kpageflags
  • 中读取与这些页面对应的标志

现在您有几个标志,您可以将它们用于您的逻辑:

 3. UPTODATE  page has up-to-date data
              ie. for file backed page: (in-memory data revision >= on-disk one)
 4. DIRTY     page has been written to, hence contains new data
              ie. for file backed page: (in-memory data revision >  on-disk one)
 8. WRITEBACK page is being synced to disk

    [LRU related page flags]
 5. LRU         page is in one of the LRU lists
 6. ACTIVE      page is in the active LRU list
18. UNEVICTABLE page is in the unevictable (non-)LRU list
                It is somehow pinned and not a candidate for LRU page reclaims,
        eg. ramfs pages, shmctl(SHM_LOCK) and mlock() memory segments
 2. REFERENCED  page has been referenced since last LRU list enqueue/requeue
 9. RECLAIM     page will be reclaimed soon after its pageout IO completed
11. MMAP        a memory mapped page
12. ANON        a memory mapped page that is not part of a file
13. SWAPCACHE   page is mapped to swap space, ie. has an associated swap entry
14. SWAPBACKED  page is backed by swap/RAM

this document

中描述了更多标志

还有一个名为soft-dirty的功能,专门用于跟踪最近的写入(忽略读取)(请参阅Soft Dirty文档)。您可以通过/ proc清除软脏标志,并通过/ proc / pid / pagemap再次读取它们。也许这对你的应用来说也很方便。

答案 1 :(得分:0)

您是否考虑过使用 vmstat(8) Report virtual memory statistics

vmstat报告有关进程,内存, 分页 ,阻止IO,陷阱和cpu活动的信息。 (强调我的)

包括:

  

平板模式的字段描述

     

cache:Cache name num:当前活动对象的总数:Total   可用对象数量大小:每个对象页面的大小:数量   具有至少一个活动对象totpages的页面:总数   已分配的页面pslab:每个slab的页数

以下是 Linux Journal article ,详细介绍了vmstat如何用于监控操作系统统计信息。这是一段摘录:

  

使用vmstat

     

vmstat,顾名思义,报告虚拟内存统计信息。它   显示有多少虚拟内存,多少是免费和分页   活动。最重要的是,您可以观察页面输入和页面输出   他们发生了。这非常有用。

     

要监控系统上的虚拟内存活动,最好   使用vmstat延迟。延迟是指之间的秒数   更新。如果您没有提供延迟,vmstat会报告平均值   自上次启动并退出。建议延迟五秒钟   间隔。

     

要以五秒延迟运行vmstat,请键入:

     

vmstat 5