lkml.org 
[lkml]   [2016]   [Jan]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v9 01/13] vmstat: provide a function to quiet down the diff processing
    Date
    From: Christoph Lameter <cl@linux.com>

    quiet_vmstat() can be called in anticipation of a OS "quiet" period
    where no tick processing should be triggered. quiet_vmstat() will fold
    all pending differentials into the global counters and disable the
    vmstat_worker processing.

    Note that the shepherd thread will continue scanning the differentials
    from another processor and will reenable the vmstat workers if it
    detects any changes.

    Signed-off-by: Christoph Lameter <cl@linux.com>
    Signed-off-by: Chris Metcalf <cmetcalf@ezchip.com>
    ---
    include/linux/vmstat.h | 2 ++
    mm/vmstat.c | 14 ++++++++++++++
    2 files changed, 16 insertions(+)

    diff --git a/include/linux/vmstat.h b/include/linux/vmstat.h
    index 5dbc8b0ee567..6f5a21993ff3 100644
    --- a/include/linux/vmstat.h
    +++ b/include/linux/vmstat.h
    @@ -189,6 +189,7 @@ extern void __inc_zone_state(struct zone *, enum zone_stat_item);
    extern void dec_zone_state(struct zone *, enum zone_stat_item);
    extern void __dec_zone_state(struct zone *, enum zone_stat_item);

    +void quiet_vmstat(void);
    void cpu_vm_stats_fold(int cpu);
    void refresh_zone_stat_thresholds(void);

    @@ -249,6 +250,7 @@ static inline void __dec_zone_page_state(struct page *page,

    static inline void refresh_zone_stat_thresholds(void) { }
    static inline void cpu_vm_stats_fold(int cpu) { }
    +static inline void quiet_vmstat(void) { }

    static inline void drain_zonestat(struct zone *zone,
    struct per_cpu_pageset *pset) { }
    diff --git a/mm/vmstat.c b/mm/vmstat.c
    index 0d5712b0206c..0510d2ec31a6 100644
    --- a/mm/vmstat.c
    +++ b/mm/vmstat.c
    @@ -1418,6 +1418,20 @@ static void vmstat_update(struct work_struct *w)
    }

    /*
    + * Switch off vmstat processing and then fold all the remaining differentials
    + * until the diffs stay at zero. The function is used by NOHZ and can only be
    + * invoked when tick processing is not active.
    + */
    +void quiet_vmstat(void)
    +{
    + do {
    + if (!cpumask_test_and_set_cpu(smp_processor_id(), cpu_stat_off))
    + cancel_delayed_work(this_cpu_ptr(&vmstat_work));
    +
    + } while (refresh_cpu_vm_stats());
    +}
    +
    +/*
    * Check if the diffs for a certain cpu indicate that
    * an update is needed.
    */
    --
    2.1.2


    \
     
     \ /
      Last update: 2016-01-04 21:21    [W:4.895 / U:0.520 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site