• Vlastimil Babka's avatar
    mm, page_owner: record page owner for each subpage · 7e2f2a0c
    Vlastimil Babka authored
    Patch series "debug_pagealloc improvements through page_owner", v2.
    
    The debug_pagealloc functionality serves a similar purpose on the page
    allocator level that slub_debug does on the kmalloc level, which is to
    detect bad users.  One notable feature that slub_debug has is storing
    stack traces of who last allocated and freed the object.  On page level we
    track allocations via page_owner, but that info is discarded when freeing,
    and we don't track freeing at all.  This series improves those aspects.
    With both debug_pagealloc and page_owner enabled, we can then get bug
    reports such as the example in Patch 4.
    
    SLUB debug tracking additionally stores cpu, pid and timestamp.  This could
    be added later, if deemed useful enough to justify the additional page_ext
    structure size.
    
    This patch (of 3):
    
    Currently, page owner info is only recorded for the first page of a
    high-order allocation, and copied to tail pages in the event of a split
    page.  With the plan to keep previous owner info after freeing the page,
    it would be benefical to record page owner for each subpage upon
    allocation.  This increases the overhead for high orders, but that should
    be acceptable for a debugging option.
    
    The order stored for each subpage is the order of the whole allocation.
    This makes it possible to calculate the "head" pfn and to recognize "tail"
    pages (quoted because not all high-order allocations are compound pages
    with true head and tail pages).  When reading the page_owner debugfs file,
    keep skipping the "tail" pages so that stats gathered by existing scripts
    don't get inflated.
    
    Link: http://lkml.kernel.org/r/20190820131828.22684-3-vbabka@suse.czSigned-off-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Cc: Kirill A. Shutemov <kirill@shutemov.name>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Mel Gorman <mgorman@techsingularity.net>
    Cc: Michal Hocko <mhocko@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    7e2f2a0c
page_owner.c 15.1 KB