• Mel Gorman's avatar
    mm: do not walk all of system memory during show_mem · c78e9363
    Mel Gorman authored
    It has been reported on very large machines that show_mem is taking almost
    5 minutes to display information.  This is a serious problem if there is
    an OOM storm.  The bulk of the cost is in show_mem doing a very expensive
    PFN walk to give us the following information
      Total RAM:       Also available as totalram_pages
      Highmem pages:   Also available as totalhigh_pages
      Reserved pages:  Can be inferred from the zone structure
      Shared pages:    PFN walk required
      Unshared pages:  PFN walk required
      Quick pages:     Per-cpu walk required
    Only the shared/unshared pages requires a full PFN walk but that
    information is useless.  It is also inaccurate as page pins of unshared
    pages would be accounted for as shared.  Even if the information was
    accurate, I'm struggling to think how the shared/unshared information
    could be useful for debugging OOM conditions.  Maybe it was useful before
    rmap existed when reclaiming shared pages was costly but it is less
    relevant today.
    The PFN walk could be optimised a bit but why bother as the information is
    useless.  This patch deletes the PFN walker and infers the total RAM,
    highmem and reserved pages count from struct zone.  It omits the
    shared/unshared page usage on the grounds that it is useless.  It also
    corrects the reporting of HighMem as HighMem/MovableOnly as ZONE_MOVABLE
    has similar problems to HighMem with respect to lowmem/highmem exhaustion.
    Signed-off-by: default avatarMel Gorman <mgorman@suse.de>
    Cc: David Rientjes <rientjes@google.com>
    Acked-by: default avatarKOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
show_mem.c 1.11 KB