• Minchan Kim's avatar
    mm: page_alloc: dump migrate-failed pages · a1394bdd
    Minchan Kim authored
    Currently, debugging CMA allocation failures is quite limited.  The most
    common source of these failures seems to be page migration which doesn't
    provide any useful information on the reason of the failure by itself.
    alloc_contig_range can report those failures as it holds a list of
    migrate-failed pages.
    
    The information logged by dump_page() has already proven helpful for
    debugging allocation issues, like identifying long-term pinnings on
    ZONE_MOVABLE or MIGRATE_CMA.
    
    Let's use the dynamic debugging infrastructure, such that we avoid
    flooding the logs and creating a lot of noise on frequent
    alloc_contig_range() calls.  This information is helpful for debugging
    only.
    
    There are two ifdefery conditions to support common dyndbg options:
    
     - CONFIG_DYNAMIC_DEBUG_CORE && DYNAMIC_DEBUG_MODULE
       It aims for supporting the feature with only specific file with
       adding ccflags.
    
     - CONFIG_DYNAMIC_DEBUG
       It aims for supporting the feature with system wide globally.
    
    A simple example to enable the feature:
    
    Admin could enable the dump like this(by default, disabled)
    
    	echo "func alloc_contig_dump_pages +p" > control
    
    Admin could disable it.
    
    	echo "func alloc_contig_dump_pages =_" > control
    
    Detail goes Documentation/admin-guide/dynamic-debug-howto.rst
    
    A concern is utility functions in dump_page use inconsistent
    loglevels. In the future, we might want to make the loglevels
    used inside dump_page() consistent and eventually rework the way
    we log the information here. See [1].
    
    [1] https://lore.kernel.org/linux-mm/YEh4doXvyuRl5BDB@google.com/
    
    Link: https://lkml.kernel.org/r/20210311194042.825152-1-minchan@kernel.orgSigned-off-by: default avatarMinchan Kim <minchan@kernel.org>
    Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
    Cc: John Dias <joaodias@google.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Jason Baron <jbaron@akamai.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    a1394bdd
page_alloc.c 251 KB