• Ryan Roberts's avatar
    mm: thp: support allocation of anonymous multi-size THP · 19eaf449
    Ryan Roberts authored
    Introduce the logic to allow THP to be configured (through the new sysfs
    interface we just added) to allocate large folios to back anonymous
    memory, which are larger than the base page size but smaller than
    PMD-size.  We call this new THP extension "multi-size THP" (mTHP).
    
    mTHP continues to be PTE-mapped, but in many cases can still provide
    similar benefits to traditional PMD-sized THP: Page faults are
    significantly reduced (by a factor of e.g.  4, 8, 16, etc.  depending on
    the configured order), but latency spikes are much less prominent because
    the size of each page isn't as huge as the PMD-sized variant and there is
    less memory to clear in each page fault.  The number of per-page
    operations (e.g.  ref counting, rmap management, lru list management) are
    also significantly reduced since those ops now become per-folio.
    
    Some architectures also employ TLB compression mechanisms to squeeze more
    entries in when a set of PTEs are virtually and physically contiguous and
    approporiately aligned.  In this case, TLB misses will occur less often.
    
    The new behaviour is disabled by default, but can be enabled at runtime by
    writing to /sys/kernel/mm/transparent_hugepage/hugepage-XXkb/enabled (see
    documentation in previous commit).  The long term aim is to change the
    default to include suitable lower orders, but there are some risks around
    internal fragmentation that need to be better understood first.
    
    [ryan.roberts@arm.com: resolve some multi-size THP review nits]
      Link: https://lkml.kernel.org/r/20231214160251.3574571-1-ryan.roberts@arm.com
    Link: https://lkml.kernel.org/r/20231207161211.2374093-5-ryan.roberts@arm.comSigned-off-by: default avatarRyan Roberts <ryan.roberts@arm.com>
    Tested-by: default avatarKefeng Wang <wangkefeng.wang@huawei.com>
    Tested-by: default avatarJohn Hubbard <jhubbard@nvidia.com>
    Acked-by: default avatarDavid Hildenbrand <david@redhat.com>
    Cc: Alistair Popple <apopple@nvidia.com>
    Cc: Anshuman Khandual <anshuman.khandual@arm.com>
    Cc: Barry Song <v-songbaohua@oppo.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: "Huang, Ying" <ying.huang@intel.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Itaru Kitayama <itaru.kitayama@gmail.com>
    Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Cc: Luis Chamberlain <mcgrof@kernel.org>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Yang Shi <shy828301@gmail.com>
    Cc: Yin Fengwei <fengwei.yin@intel.com>
    Cc: Yu Zhao <yuzhao@google.com>
    Cc: Zi Yan <ziy@nvidia.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    19eaf449
memory.c 170 KB