lkml.org 
[lkml]   [2007]   [Feb]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 2/3 take2] smaps: add pages referenced count to smaps
    Adds an additional unsigned long field to struct mem_size_stats:
    referenced. For each page table entry that is walked for the VMA in the
    smaps code, this field is incremented by PAGE_SIZE if it has pte-reference
    bits.

    An additional line was added to the /proc/pid/smaps output for each VMA
    to indicate how many pages within it are currently marked as accessed
    (referenced).

    Cc: Hugh Dickins <hugh@veritas.com>
    Cc: Paul Mundt <lethal@linux-sh.org>
    Cc: Christoph Lameter <clameter@sgi.com>
    Signed-off-by: David Rientjes <rientjes@google.com>
    ---
    fs/proc/task_mmu.c | 20 +++++++++++++-------
    1 files changed, 13 insertions(+), 7 deletions(-)

    diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
    index e87824b..50bd004 100644
    --- a/fs/proc/task_mmu.c
    +++ b/fs/proc/task_mmu.c
    @@ -120,6 +120,7 @@ struct mem_size_stats
    unsigned long shared_dirty;
    unsigned long private_clean;
    unsigned long private_dirty;
    + unsigned long referenced;
    };

    struct pte_walker {
    @@ -190,18 +191,20 @@ static int show_map_internal(struct seq_file *m, void *v, struct mem_size_stats

    if (mss)
    seq_printf(m,
    - "Size: %8lu kB\n"
    - "Rss: %8lu kB\n"
    - "Shared_Clean: %8lu kB\n"
    - "Shared_Dirty: %8lu kB\n"
    - "Private_Clean: %8lu kB\n"
    - "Private_Dirty: %8lu kB\n",
    + "Size: %8lu kB\n"
    + "Rss: %8lu kB\n"
    + "Shared_Clean: %8lu kB\n"
    + "Shared_Dirty: %8lu kB\n"
    + "Private_Clean: %8lu kB\n"
    + "Private_Dirty: %8lu kB\n"
    + "Pgs_Referenced: %8lu kB\n",
    (vma->vm_end - vma->vm_start) >> 10,
    mss->resident >> 10,
    mss->shared_clean >> 10,
    mss->shared_dirty >> 10,
    mss->private_clean >> 10,
    - mss->private_dirty >> 10);
    + mss->private_dirty >> 10,
    + mss->referenced >> 10);

    if (m->count < m->size) /* vma is copied successfully */
    m->version = (vma != get_gate_vma(task))? vma->vm_start: 0;
    @@ -302,6 +305,9 @@ static void smaps_pte_func(struct pte_walker *walker, pte_t *pte,
    if (!page)
    return;

    + /* Accumulate the number of pages that have been accessed. */
    + if (pte_young(ptent) || PageReferenced(page))
    + mss->referenced += PAGE_SIZE;
    if (page_mapcount(page) >= 2) {
    if (pte_dirty(ptent))
    mss->shared_dirty += PAGE_SIZE;
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2007-02-07 07:19    [W:0.050 / U:89.304 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site