• Hugh Dickins's avatar
    mm: /proc/sys/vm/stat_refresh skip checking known negative stats · 75083aae
    Hugh Dickins authored
    vmstat_refresh() can occasionally catch nr_zone_write_pending and
    nr_writeback when they are transiently negative.  The reason is partly
    that the interrupt which decrements them in test_clear_page_writeback()
    can come in before __test_set_page_writeback() got to increment them;
    but transient negatives are still seen even when that is prevented, and
    I am not yet certain why (but see Roman's note below).  Those stats are
    not buggy, they have never been seen to drift away from 0 permanently:
    so just avoid the annoyance of showing a warning on them.
    
    Similarly avoid showing a warning on nr_free_cma: CMA users have seen
    that one reported negative from /proc/sys/vm/stat_refresh too, but it
    does drift away permanently: I believe that's because its incrementation
    and decrementation are decided by page migratetype, but the migratetype
    of a pageblock is not guaranteed to be constant.
    
    Roman Gushchin points out:
     "For performance reasons, vmstat counters are incremented and
      decremented using per-cpu batches. vmstat_refresh() flushes the
      per-cpu batches on all CPUs, to get values as accurate as possible;
      but this method is not atomic, so the resulting value is not always
      precise.
    
      As a consequence, for those counters whose actual value is close to 0,
      a small negative value may occasionally be reported. If the value is
      small and the state is transient, it is not an indication of an error"
    
    Link: https://lore.kernel.org/linux-mm/20200714173747.3315771-1-guro@fb.com/
    Link: https://lkml.kernel.org/r/alpine.LSU.2.11.2103012158540.7549@eggly.anvilsSigned-off-by: default avatarHugh Dickins <hughd@google.com>
    Reported-by: default avatarRoman Gushchin <guro@fb.com>
    Acked-by: default avatarRoman Gushchin <guro@fb.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    75083aae
vmstat.c 54.3 KB