On Thu, Oct 17, 2024 at 02:58:03PM -0700, chrisl@xxxxxxxxxx wrote: > From: Yu Zhao <yuzhao@xxxxxxxxxx> > > [ Upstream commit 95599ef684d01136a8b77c16a7c853496786e173 ] > > The current assumption is that a large folio can only be split into > order-0 folios. That is not the case for hugeTLB demotion, nor for THP > split: see commit c010d47f107f ("mm: thp: split huge page to any lower > order pages"). > > When a large folio is split into ones of a lower non-zero order, only the > new head pages should be tagged. Tagging tail pages can cause imbalanced > "calls" counters, since only head pages are untagged by pgalloc_tag_sub() > and the "calls" counts on tail pages are leaked, e.g., > > # echo 2048kB >/sys/kernel/mm/hugepages/hugepages-1048576kB/demote_size > # echo 700 >/sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages > # time echo 700 >/sys/kernel/mm/hugepages/hugepages-1048576kB/demote > # echo 0 >/sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages > # grep alloc_gigantic_folio /proc/allocinfo > > Before this patch: > 0 549427200 mm/hugetlb.c:1549 func:alloc_gigantic_folio > > real 0m2.057s > user 0m0.000s > sys 0m2.051s > > After this patch: > 0 0 mm/hugetlb.c:1549 func:alloc_gigantic_folio > > real 0m1.711s > user 0m0.000s > sys 0m1.704s > > Not tagging tail pages also improves the splitting time, e.g., by about > 15% when demoting 1GB hugeTLB folios to 2MB ones, as shown above. > > Link: https://lkml.kernel.org/r/20240906042108.1150526-2-yuzhao@xxxxxxxxxx > Fixes: be25d1d4e822 ("mm: create new codetag references during page splitting") > Signed-off-by: Yu Zhao <yuzhao@xxxxxxxxxx> > Acked-by: Suren Baghdasaryan <surenb@xxxxxxxxxx> > Cc: Kent Overstreet <kent.overstreet@xxxxxxxxx> > Cc: Muchun Song <muchun.song@xxxxxxxxx> > Cc: <stable@xxxxxxxxxxxxxxx> > Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> You did not sign off on this backport, so even if I wanted to take it, I couldn't :( Please fix this, and patch 3/3 up, and just send those. sorry, greg k-h