- Yu Zhao's Multi-Gen LRU patches are here. They've been under test in
linux-next for a couple of months without, to my knowledge, any negative reports (or any positive ones, come to that). - Also the Maple Tree from Liam R. Howlett. An overlapping range-based tree for vmas. It it apparently slight more efficient in its own right, but is mainly targeted at enabling work to reduce mmap_lock contention. Liam has identified a number of other tree users in the kernel which could be beneficially onverted to mapletrees. Yu Zhao has identified a hard-to-hit but "easy to fix" lockdep splat (https://lkml.kernel.org/r/CAOUHufZabH85CeUN-MEMgL8gJGzJEWUrkiM58JkTbBhh-jew0Q@mail.gmail.com). This has yet to be addressed due to Liam's unfortunately timed vacation. He is now back and we'll get this fixed up. - Dmitry Vyukov introduces KMSAN: the Kernel Memory Sanitizer. It uses clang-generated instrumentation to detect used-unintialized bugs down to the single bit level. KMSAN keeps finding bugs. New ones, as well as the legacy ones. - Yang Shi adds a userspace mechanism (madvise) to induce a collapse of memory into THPs. - Zach O'Keefe has expanded Yang Shi's madvise(MADV_COLLAPSE) to support file/shmem-backed pages. - userfaultfd updates from Axel Rasmussen - zsmalloc cleanups from Alexey Romanov - cleanups from Miaohe Lin: vmscan, hugetlb_cgroup, hugetlb and memory-failure - Huang Ying adds enhancements to NUMA balancing memory tiering mode's page promotion, with a new way of detecting hot pages. - memcg updates from Shakeel Butt: charging optimizations and reduced memory consumption. - memcg cleanups from Kairui Song. - memcg fixes and cleanups from Johannes Weiner. - Vishal Moola provides more folio conversions - Zhang Yi removed ll_rw_block() :( - migration enhancements from Peter Xu - migration error-path bugfixes from Huang Ying - Aneesh Kumar added ability for a device driver to alter the memory tiering promotion paths. For optimizations by PMEM drivers, DRM drivers, etc. - vma merging improvements from Jakub Matěn. - NUMA hinting cleanups from David Hildenbrand. - xu xin added aditional userspace visibility into KSM merging activity. - THP & KSM code consolidation from Qi Zheng. - more folio work from Matthew Wilcox. - KASAN updates from Andrey Konovalov. - DAMON cleanups from Kaixu Xia. - DAMON work from SeongJae Park: fixes, cleanups. - hugetlb sysfs cleanups from Muchun Song. - Mike Kravetz fixes locking issues in hugetlbfs and in hugetlb core. -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQTTMBEPP41GrTpTJgfdBJ7gKXxAjgUCY0HaPgAKCRDdBJ7gKXxA joPjAQDZ5LlRCMWZ1oxLP2NOTp6nm63q9PWcGnmY50FjD/dNlwEAnx7OejCLWGWf bbTuk6U2+TKgJa4X7+pbbejeoqnt5QU= =xfWx -----END PGP SIGNATURE----- Merge tag 'mm-stable-2022-10-08' of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm Pull MM updates from Andrew Morton: - Yu Zhao's Multi-Gen LRU patches are here. They've been under test in linux-next for a couple of months without, to my knowledge, any negative reports (or any positive ones, come to that). - Also the Maple Tree from Liam Howlett. An overlapping range-based tree for vmas. It it apparently slightly more efficient in its own right, but is mainly targeted at enabling work to reduce mmap_lock contention. Liam has identified a number of other tree users in the kernel which could be beneficially onverted to mapletrees. Yu Zhao has identified a hard-to-hit but "easy to fix" lockdep splat at [1]. This has yet to be addressed due to Liam's unfortunately timed vacation. He is now back and we'll get this fixed up. - Dmitry Vyukov introduces KMSAN: the Kernel Memory Sanitizer. It uses clang-generated instrumentation to detect used-unintialized bugs down to the single bit level. KMSAN keeps finding bugs. New ones, as well as the legacy ones. - Yang Shi adds a userspace mechanism (madvise) to induce a collapse of memory into THPs. - Zach O'Keefe has expanded Yang Shi's madvise(MADV_COLLAPSE) to support file/shmem-backed pages. - userfaultfd updates from Axel Rasmussen - zsmalloc cleanups from Alexey Romanov - cleanups from Miaohe Lin: vmscan, hugetlb_cgroup, hugetlb and memory-failure - Huang Ying adds enhancements to NUMA balancing memory tiering mode's page promotion, with a new way of detecting hot pages. - memcg updates from Shakeel Butt: charging optimizations and reduced memory consumption. - memcg cleanups from Kairui Song. - memcg fixes and cleanups from Johannes Weiner. - Vishal Moola provides more folio conversions - Zhang Yi removed ll_rw_block() :( - migration enhancements from Peter Xu - migration error-path bugfixes from Huang Ying - Aneesh Kumar added ability for a device driver to alter the memory tiering promotion paths. For optimizations by PMEM drivers, DRM drivers, etc. - vma merging improvements from Jakub Matěn. - NUMA hinting cleanups from David Hildenbrand. - xu xin added aditional userspace visibility into KSM merging activity. - THP & KSM code consolidation from Qi Zheng. - more folio work from Matthew Wilcox. - KASAN updates from Andrey Konovalov. - DAMON cleanups from Kaixu Xia. - DAMON work from SeongJae Park: fixes, cleanups. - hugetlb sysfs cleanups from Muchun Song. - Mike Kravetz fixes locking issues in hugetlbfs and in hugetlb core. Link: https://lkml.kernel.org/r/CAOUHufZabH85CeUN-MEMgL8gJGzJEWUrkiM58JkTbBhh-jew0Q@mail.gmail.com [1] * tag 'mm-stable-2022-10-08' of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm: (555 commits) hugetlb: allocate vma lock for all sharable vmas hugetlb: take hugetlb vma_lock when clearing vma_lock->vma pointer hugetlb: fix vma lock handling during split vma and range unmapping mglru: mm/vmscan.c: fix imprecise comments mm/mglru: don't sync disk for each aging cycle mm: memcontrol: drop dead CONFIG_MEMCG_SWAP config symbol mm: memcontrol: use do_memsw_account() in a few more places mm: memcontrol: deprecate swapaccounting=0 mode mm: memcontrol: don't allocate cgroup swap arrays when memcg is disabled mm/secretmem: remove reduntant return value mm/hugetlb: add available_huge_pages() func mm: remove unused inline functions from include/linux/mm_inline.h selftests/vm: add selftest for MADV_COLLAPSE of uffd-minor memory selftests/vm: add file/shmem MADV_COLLAPSE selftest for cleared pmd selftests/vm: add thp collapse shmem testing selftests/vm: add thp collapse file and tmpfs testing selftests/vm: modularize thp collapse memory operations selftests/vm: dedup THP helpers mm/khugepaged: add tracepoint to hpage_collapse_scan_file() mm/madvise: add file and shmem support to MADV_COLLAPSE ...
This commit is contained in:
commit
27bc50fc90
409 changed files with 65691 additions and 7933 deletions
|
|
@ -11,11 +11,14 @@
|
|||
EM( SCAN_FAIL, "failed") \
|
||||
EM( SCAN_SUCCEED, "succeeded") \
|
||||
EM( SCAN_PMD_NULL, "pmd_null") \
|
||||
EM( SCAN_PMD_NONE, "pmd_none") \
|
||||
EM( SCAN_PMD_MAPPED, "page_pmd_mapped") \
|
||||
EM( SCAN_EXCEED_NONE_PTE, "exceed_none_pte") \
|
||||
EM( SCAN_EXCEED_SWAP_PTE, "exceed_swap_pte") \
|
||||
EM( SCAN_EXCEED_SHARED_PTE, "exceed_shared_pte") \
|
||||
EM( SCAN_PTE_NON_PRESENT, "pte_non_present") \
|
||||
EM( SCAN_PTE_UFFD_WP, "pte_uffd_wp") \
|
||||
EM( SCAN_PTE_MAPPED_HUGEPAGE, "pte_mapped_hugepage") \
|
||||
EM( SCAN_PAGE_RO, "no_writable_page") \
|
||||
EM( SCAN_LACK_REFERENCED_PAGE, "lack_referenced_page") \
|
||||
EM( SCAN_PAGE_NULL, "page_null") \
|
||||
|
|
@ -166,5 +169,39 @@ TRACE_EVENT(mm_collapse_huge_page_swapin,
|
|||
__entry->ret)
|
||||
);
|
||||
|
||||
TRACE_EVENT(mm_khugepaged_scan_file,
|
||||
|
||||
TP_PROTO(struct mm_struct *mm, struct page *page, const char *filename,
|
||||
int present, int swap, int result),
|
||||
|
||||
TP_ARGS(mm, page, filename, present, swap, result),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(struct mm_struct *, mm)
|
||||
__field(unsigned long, pfn)
|
||||
__string(filename, filename)
|
||||
__field(int, present)
|
||||
__field(int, swap)
|
||||
__field(int, result)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->mm = mm;
|
||||
__entry->pfn = page ? page_to_pfn(page) : -1;
|
||||
__assign_str(filename, filename);
|
||||
__entry->present = present;
|
||||
__entry->swap = swap;
|
||||
__entry->result = result;
|
||||
),
|
||||
|
||||
TP_printk("mm=%p, scan_pfn=0x%lx, filename=%s, present=%d, swap=%d, result=%s",
|
||||
__entry->mm,
|
||||
__entry->pfn,
|
||||
__get_str(filename),
|
||||
__entry->present,
|
||||
__entry->swap,
|
||||
__print_symbolic(__entry->result, SCAN_STATUS))
|
||||
);
|
||||
|
||||
#endif /* __HUGE_MEMORY_H */
|
||||
#include <trace/define_trace.h>
|
||||
|
|
|
|||
123
include/trace/events/maple_tree.h
Normal file
123
include/trace/events/maple_tree.h
Normal file
|
|
@ -0,0 +1,123 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#undef TRACE_SYSTEM
|
||||
#define TRACE_SYSTEM maple_tree
|
||||
|
||||
#if !defined(_TRACE_MM_H) || defined(TRACE_HEADER_MULTI_READ)
|
||||
#define _TRACE_MM_H
|
||||
|
||||
|
||||
#include <linux/tracepoint.h>
|
||||
|
||||
struct ma_state;
|
||||
|
||||
TRACE_EVENT(ma_op,
|
||||
|
||||
TP_PROTO(const char *fn, struct ma_state *mas),
|
||||
|
||||
TP_ARGS(fn, mas),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(const char *, fn)
|
||||
__field(unsigned long, min)
|
||||
__field(unsigned long, max)
|
||||
__field(unsigned long, index)
|
||||
__field(unsigned long, last)
|
||||
__field(void *, node)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->fn = fn;
|
||||
__entry->min = mas->min;
|
||||
__entry->max = mas->max;
|
||||
__entry->index = mas->index;
|
||||
__entry->last = mas->last;
|
||||
__entry->node = mas->node;
|
||||
),
|
||||
|
||||
TP_printk("%s\tNode: %p (%lu %lu) range: %lu-%lu",
|
||||
__entry->fn,
|
||||
(void *) __entry->node,
|
||||
(unsigned long) __entry->min,
|
||||
(unsigned long) __entry->max,
|
||||
(unsigned long) __entry->index,
|
||||
(unsigned long) __entry->last
|
||||
)
|
||||
)
|
||||
TRACE_EVENT(ma_read,
|
||||
|
||||
TP_PROTO(const char *fn, struct ma_state *mas),
|
||||
|
||||
TP_ARGS(fn, mas),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(const char *, fn)
|
||||
__field(unsigned long, min)
|
||||
__field(unsigned long, max)
|
||||
__field(unsigned long, index)
|
||||
__field(unsigned long, last)
|
||||
__field(void *, node)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->fn = fn;
|
||||
__entry->min = mas->min;
|
||||
__entry->max = mas->max;
|
||||
__entry->index = mas->index;
|
||||
__entry->last = mas->last;
|
||||
__entry->node = mas->node;
|
||||
),
|
||||
|
||||
TP_printk("%s\tNode: %p (%lu %lu) range: %lu-%lu",
|
||||
__entry->fn,
|
||||
(void *) __entry->node,
|
||||
(unsigned long) __entry->min,
|
||||
(unsigned long) __entry->max,
|
||||
(unsigned long) __entry->index,
|
||||
(unsigned long) __entry->last
|
||||
)
|
||||
)
|
||||
|
||||
TRACE_EVENT(ma_write,
|
||||
|
||||
TP_PROTO(const char *fn, struct ma_state *mas, unsigned long piv,
|
||||
void *val),
|
||||
|
||||
TP_ARGS(fn, mas, piv, val),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(const char *, fn)
|
||||
__field(unsigned long, min)
|
||||
__field(unsigned long, max)
|
||||
__field(unsigned long, index)
|
||||
__field(unsigned long, last)
|
||||
__field(unsigned long, piv)
|
||||
__field(void *, val)
|
||||
__field(void *, node)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->fn = fn;
|
||||
__entry->min = mas->min;
|
||||
__entry->max = mas->max;
|
||||
__entry->index = mas->index;
|
||||
__entry->last = mas->last;
|
||||
__entry->piv = piv;
|
||||
__entry->val = val;
|
||||
__entry->node = mas->node;
|
||||
),
|
||||
|
||||
TP_printk("%s\tNode %p (%lu %lu) range:%lu-%lu piv (%lu) val %p",
|
||||
__entry->fn,
|
||||
(void *) __entry->node,
|
||||
(unsigned long) __entry->min,
|
||||
(unsigned long) __entry->max,
|
||||
(unsigned long) __entry->index,
|
||||
(unsigned long) __entry->last,
|
||||
(unsigned long) __entry->piv,
|
||||
(void *) __entry->val
|
||||
)
|
||||
)
|
||||
#endif /* _TRACE_MM_H */
|
||||
|
||||
/* This part must be outside protection */
|
||||
#include <trace/define_trace.h>
|
||||
|
|
@ -42,6 +42,79 @@ TRACE_EVENT(vm_unmapped_area,
|
|||
__entry->low_limit, __entry->high_limit, __entry->align_mask,
|
||||
__entry->align_offset)
|
||||
);
|
||||
|
||||
TRACE_EVENT(vma_mas_szero,
|
||||
TP_PROTO(struct maple_tree *mt, unsigned long start,
|
||||
unsigned long end),
|
||||
|
||||
TP_ARGS(mt, start, end),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(struct maple_tree *, mt)
|
||||
__field(unsigned long, start)
|
||||
__field(unsigned long, end)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->mt = mt;
|
||||
__entry->start = start;
|
||||
__entry->end = end;
|
||||
),
|
||||
|
||||
TP_printk("mt_mod %p, (NULL), SNULL, %lu, %lu,",
|
||||
__entry->mt,
|
||||
(unsigned long) __entry->start,
|
||||
(unsigned long) __entry->end
|
||||
)
|
||||
);
|
||||
|
||||
TRACE_EVENT(vma_store,
|
||||
TP_PROTO(struct maple_tree *mt, struct vm_area_struct *vma),
|
||||
|
||||
TP_ARGS(mt, vma),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(struct maple_tree *, mt)
|
||||
__field(struct vm_area_struct *, vma)
|
||||
__field(unsigned long, vm_start)
|
||||
__field(unsigned long, vm_end)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->mt = mt;
|
||||
__entry->vma = vma;
|
||||
__entry->vm_start = vma->vm_start;
|
||||
__entry->vm_end = vma->vm_end - 1;
|
||||
),
|
||||
|
||||
TP_printk("mt_mod %p, (%p), STORE, %lu, %lu,",
|
||||
__entry->mt, __entry->vma,
|
||||
(unsigned long) __entry->vm_start,
|
||||
(unsigned long) __entry->vm_end
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
TRACE_EVENT(exit_mmap,
|
||||
TP_PROTO(struct mm_struct *mm),
|
||||
|
||||
TP_ARGS(mm),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(struct mm_struct *, mm)
|
||||
__field(struct maple_tree *, mt)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->mm = mm;
|
||||
__entry->mt = &mm->mm_mt;
|
||||
),
|
||||
|
||||
TP_printk("mt_mod %p, DESTROY\n",
|
||||
__entry->mt
|
||||
)
|
||||
);
|
||||
|
||||
#endif
|
||||
|
||||
/* This part must be outside protection */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue