lkml.org 
[lkml]   [2009]   [Jun]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 101/108] vmscan: count the number of times zone_reclaim() scans and fails
    2.6.30-stable review patch.  If anyone has any objections, please let us know.

    ------------------

    From: Mel Gorman <mel@csn.ul.ie>

    commit 24cf72518c79cdcda486ed26074ff8151291cf65 upstream.

    On NUMA machines, the administrator can configure zone_reclaim_mode that
    is a more targetted form of direct reclaim. On machines with large NUMA
    distances for example, a zone_reclaim_mode defaults to 1 meaning that
    clean unmapped pages will be reclaimed if the zone watermarks are not
    being met.

    There is a heuristic that determines if the scan is worthwhile but it is
    possible that the heuristic will fail and the CPU gets tied up scanning
    uselessly. Detecting the situation requires some guesswork and
    experimentation so this patch adds a counter "zreclaim_failed" to
    /proc/vmstat. If during high CPU utilisation this counter is increasing
    rapidly, then the resolution to the problem may be to set
    /proc/sys/vm/zone_reclaim_mode to 0.

    [akpm@linux-foundation.org: name things consistently]
    Signed-off-by: Mel Gorman <mel@csn.ul.ie>
    Reviewed-by: Rik van Riel <riel@redhat.com>
    Cc: Christoph Lameter <cl@linux-foundation.org>
    Reviewed-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
    Cc: Wu Fengguang <fengguang.wu@intel.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    include/linux/vmstat.h | 3 +++
    mm/vmscan.c | 3 +++
    mm/vmstat.c | 3 +++
    3 files changed, 9 insertions(+)

    --- a/include/linux/vmstat.h
    +++ b/include/linux/vmstat.h
    @@ -36,6 +36,9 @@ enum vm_event_item { PGPGIN, PGPGOUT, PS
    FOR_ALL_ZONES(PGSTEAL),
    FOR_ALL_ZONES(PGSCAN_KSWAPD),
    FOR_ALL_ZONES(PGSCAN_DIRECT),
    +#ifdef CONFIG_NUMA
    + PGSCAN_ZONE_RECLAIM_FAILED,
    +#endif
    PGINODESTEAL, SLABS_SCANNED, KSWAPD_STEAL, KSWAPD_INODESTEAL,
    PAGEOUTRUN, ALLOCSTALL, PGROTATED,
    #ifdef CONFIG_HUGETLB_PAGE
    --- a/mm/vmscan.c
    +++ b/mm/vmscan.c
    @@ -2452,6 +2452,9 @@ int zone_reclaim(struct zone *zone, gfp_
    ret = __zone_reclaim(zone, gfp_mask, order);
    zone_clear_flag(zone, ZONE_RECLAIM_LOCKED);

    + if (!ret)
    + count_vm_event(PGSCAN_ZONE_RECLAIM_FAILED);
    +
    return ret;
    }
    #endif
    --- a/mm/vmstat.c
    +++ b/mm/vmstat.c
    @@ -675,6 +675,9 @@ static const char * const vmstat_text[]
    TEXTS_FOR_ZONES("pgscan_kswapd")
    TEXTS_FOR_ZONES("pgscan_direct")

    +#ifdef CONFIG_NUMA
    + "zone_reclaim_failed",
    +#endif
    "pginodesteal",
    "slabs_scanned",
    "kswapd_steal",



    \
     
     \ /
      Last update: 2009-07-01 03:33    [W:3.773 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site