diff options
| author | Heiko Carstens <hca@linux.ibm.com> | 2025-09-23 17:34:30 +0200 |
|---|---|---|
| committer | Alexander Gordeev <agordeev@linux.ibm.com> | 2025-09-25 14:28:58 +0200 |
| commit | 088bb10e37252034ec58a6152f20bfdc8a837f54 (patch) | |
| tree | b509b8f624fcdd73086e22c0b2e89457c4baa7a9 /arch/s390/mm/pgalloc.c | |
| parent | 72105fc1c1cb67e779fe2da9d22ffae189c00cfc (diff) | |
s390/mm: Add memory allocation profiling hooks
Similar to common code changes [1] add alloc_hook() wrappers to page table
allocation functions to allow for memory allocation profiling.
If CONFIG_MEM_ALLOC_PROFILING is enabled call sites of page table
allocations are accounted, instead of e.g. only crst_table_alloc() and
page_table_alloc(). This allows for slightly better profiling data, and the
output of /proc/allocinfo is similar to other architectures.
Without alloc_hook() wrappers the output of /proc/allocinfo looks like
this:
17096704 4174 mm/memory.c:1061 func:folio_prealloc
17809408 4348 mm/memory.c:1063 func:folio_prealloc
0 0 mm/memory.c:4422 func:alloc_swap_folio
0 0 mm/memory.c:4286 func:__alloc_swap_folio
0 0 mm/memory.c:4971 func:alloc_anon_folio
...
1589248 97 arch/s390/mm/pgalloc.c:25 func:crst_table_alloc
0 0 arch/s390/mm/pgalloc.c:124 func:page_table_alloc_pgste
4280320 1045 arch/s390/mm/pgalloc.c:149 func:page_table_alloc
With alloc_hook() wrappers:
1097728 268 mm/memory.c:5147 func:__do_fault
20119552 4912 mm/memory.c:1061 func:folio_prealloc
17534976 4281 mm/memory.c:1063 func:folio_prealloc
0 0 mm/memory.c:4422 func:alloc_swap_folio
0 0 mm/memory.c:4286 func:__alloc_swap_folio
786432 192 mm/memory.c:452 func:__pte_alloc
405504 99 mm/memory.c:464 func:__pte_alloc_kernel
1880064 459 mm/memory.c:5525 func:do_fault_around
0 0 mm/memory.c:6403 func:__p4d_alloc
0 0 mm/memory.c:6426 func:__pud_alloc
1064960 65 mm/memory.c:6450 func:__pmd_alloc
0 0 mm/memory.c:4971 func:alloc_anon_folio
0 0 mm/memory.c:5233 func:do_set_pmd
[1] commit 2c321f3f70bc ("mm: change inlined allocation helpers to account at the call site")
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Acked-by: Alexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
Diffstat (limited to 'arch/s390/mm/pgalloc.c')
| -rw-r--r-- | arch/s390/mm/pgalloc.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/arch/s390/mm/pgalloc.c b/arch/s390/mm/pgalloc.c index ad3e0f7f7fc1..36700384fe6b 100644 --- a/arch/s390/mm/pgalloc.c +++ b/arch/s390/mm/pgalloc.c @@ -14,7 +14,7 @@ #include <asm/pgalloc.h> #include <asm/tlbflush.h> -unsigned long *crst_table_alloc(struct mm_struct *mm) +unsigned long *crst_table_alloc_noprof(struct mm_struct *mm) { gfp_t gfp = GFP_KERNEL_ACCOUNT; struct ptdesc *ptdesc; @@ -22,7 +22,7 @@ unsigned long *crst_table_alloc(struct mm_struct *mm) if (mm == &init_mm) gfp &= ~__GFP_ACCOUNT; - ptdesc = pagetable_alloc(gfp, CRST_ALLOC_ORDER); + ptdesc = pagetable_alloc_noprof(gfp, CRST_ALLOC_ORDER); if (!ptdesc) return NULL; table = ptdesc_to_virt(ptdesc); @@ -116,12 +116,12 @@ err_p4d: #ifdef CONFIG_PGSTE -struct ptdesc *page_table_alloc_pgste(struct mm_struct *mm) +struct ptdesc *page_table_alloc_pgste_noprof(struct mm_struct *mm) { struct ptdesc *ptdesc; u64 *table; - ptdesc = pagetable_alloc(GFP_KERNEL_ACCOUNT, 0); + ptdesc = pagetable_alloc_noprof(GFP_KERNEL_ACCOUNT, 0); if (ptdesc) { table = (u64 *)ptdesc_to_virt(ptdesc); __arch_set_page_dat(table, 1); @@ -138,7 +138,7 @@ void page_table_free_pgste(struct ptdesc *ptdesc) #endif /* CONFIG_PGSTE */ -unsigned long *page_table_alloc(struct mm_struct *mm) +unsigned long *page_table_alloc_noprof(struct mm_struct *mm) { gfp_t gfp = GFP_KERNEL_ACCOUNT; struct ptdesc *ptdesc; @@ -146,7 +146,7 @@ unsigned long *page_table_alloc(struct mm_struct *mm) if (mm == &init_mm) gfp &= ~__GFP_ACCOUNT; - ptdesc = pagetable_alloc(gfp, 0); + ptdesc = pagetable_alloc_noprof(gfp, 0); if (!ptdesc) return NULL; if (!pagetable_pte_ctor(mm, ptdesc)) { |