* [PATCH V3 0/2] mm/migration: Add trace events
@ 2022-01-28 11:09 Anshuman Khandual
2022-01-28 11:09 ` [PATCH V3 1/2] mm/migration: Add trace events for THP migrations Anshuman Khandual
2022-01-28 11:09 ` [PATCH V3 2/2] mm/migration: Add trace events for base page and HugeTLB migrations Anshuman Khandual
0 siblings, 2 replies; 3+ messages in thread
From: Anshuman Khandual @ 2022-01-28 11:09 UTC (permalink / raw)
To: linux-mm, akpm; +Cc: Anshuman Khandual
This adds trace events for all migration scenarios including base page, THP
and HugeTLB. This series is applies on v5.17-rc1.
Changes in V3:
- Dropped #define CREATE_TRACE_POINTS from powerpc platform in PATCH 01/02
- Dropped #define CREATE_TRACE_POINTS from x86 platform in PATCH 02/02
- Dropped #define CREATE_TRACE_POINTS from <mm/migrate.c> in PATCH 02/02
Changes in V2:
https://lore.kernel.org/all/1643080105-11416-1-git-send-email-anshuman.khandual@arm.com/
- Used DECLARE_EVENT_CLASS()/DEFINE_EVENT() construct reducing code footprint
- Added trace events for base page and HugeTLB
Changes in V1:
https://lore.kernel.org/all/1641531575-28524-1-git-send-email-anshuman.khandual@arm.com/
- Dropped mm, pmdp, page arguments from trace
- Updated trace argument names and output format
Changes in RFC:
https://lore.kernel.org/all/1640328398-20698-1-git-send-email-anshuman.khandual@arm.com/
Anshuman Khandual (2):
mm/migration: Add trace events for THP migrations
mm/migration: Add trace events for base page and HugeTLB migrations
arch/powerpc/mm/book3s64/trace.c | 1 -
arch/x86/mm/init.c | 1 -
include/trace/events/migrate.h | 31 +++++++++++++++++++++++++++++++
include/trace/events/thp.h | 27 +++++++++++++++++++++++++++
mm/huge_memory.c | 5 +++++
mm/migrate.c | 4 +++-
mm/rmap.c | 6 ++++++
7 files changed, 72 insertions(+), 3 deletions(-)
--
2.25.1
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH V3 1/2] mm/migration: Add trace events for THP migrations
2022-01-28 11:09 [PATCH V3 0/2] mm/migration: Add trace events Anshuman Khandual
@ 2022-01-28 11:09 ` Anshuman Khandual
2022-01-28 11:09 ` [PATCH V3 2/2] mm/migration: Add trace events for base page and HugeTLB migrations Anshuman Khandual
1 sibling, 0 replies; 3+ messages in thread
From: Anshuman Khandual @ 2022-01-28 11:09 UTC (permalink / raw)
To: linux-mm, akpm
Cc: Anshuman Khandual, Steven Rostedt, Ingo Molnar, Zi Yan,
Naoya Horiguchi, John Hubbard, Matthew Wilcox, Michael Ellerman,
Paul Mackerras, linuxppc-dev, linux-kernel
This adds two trace events for PMD based THP migration without split. These
events closely follow the implementation details like setting and removing
of PMD migration entries, which are essential operations for THP migration.
This moves CREATE_TRACE_POINTS into generic THP from powerpc for these new
trace events to be available on other platforms as well.
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Zi Yan <ziy@nvidia.com>
Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Cc: John Hubbard <jhubbard@nvidia.com>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Paul Mackerras <paulus@samba.org>
Cc: linuxppc-dev@lists.ozlabs.org
Cc: linux-mm@kvack.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com>
---
arch/powerpc/mm/book3s64/trace.c | 1 -
include/trace/events/thp.h | 27 +++++++++++++++++++++++++++
mm/huge_memory.c | 5 +++++
3 files changed, 32 insertions(+), 1 deletion(-)
diff --git a/arch/powerpc/mm/book3s64/trace.c b/arch/powerpc/mm/book3s64/trace.c
index b86e7b906257..ccd64b5e6cac 100644
--- a/arch/powerpc/mm/book3s64/trace.c
+++ b/arch/powerpc/mm/book3s64/trace.c
@@ -3,6 +3,5 @@
* This file is for defining trace points and trace related helpers.
*/
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
-#define CREATE_TRACE_POINTS
#include <trace/events/thp.h>
#endif
diff --git a/include/trace/events/thp.h b/include/trace/events/thp.h
index ca3f2767828a..202b3e3e67ff 100644
--- a/include/trace/events/thp.h
+++ b/include/trace/events/thp.h
@@ -48,6 +48,33 @@ TRACE_EVENT(hugepage_update,
TP_printk("hugepage update at addr 0x%lx and pte = 0x%lx clr = 0x%lx, set = 0x%lx", __entry->addr, __entry->pte, __entry->clr, __entry->set)
);
+DECLARE_EVENT_CLASS(migration_pmd,
+
+ TP_PROTO(unsigned long addr, unsigned long pmd),
+
+ TP_ARGS(addr, pmd),
+
+ TP_STRUCT__entry(
+ __field(unsigned long, addr)
+ __field(unsigned long, pmd)
+ ),
+
+ TP_fast_assign(
+ __entry->addr = addr;
+ __entry->pmd = pmd;
+ ),
+ TP_printk("addr=%lx, pmd=%lx", __entry->addr, __entry->pmd)
+);
+
+DEFINE_EVENT(migration_pmd, set_migration_pmd,
+ TP_PROTO(unsigned long addr, unsigned long pmd),
+ TP_ARGS(addr, pmd)
+);
+
+DEFINE_EVENT(migration_pmd, remove_migration_pmd,
+ TP_PROTO(unsigned long addr, unsigned long pmd),
+ TP_ARGS(addr, pmd)
+);
#endif /* _TRACE_THP_H */
/* This part must be outside protection */
diff --git a/mm/huge_memory.c b/mm/huge_memory.c
index 406a3c28c026..ab49f9a3e420 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -39,6 +39,9 @@
#include <asm/pgalloc.h>
#include "internal.h"
+#define CREATE_TRACE_POINTS
+#include <trace/events/thp.h>
+
/*
* By default, transparent hugepage support is disabled in order to avoid
* risking an increased memory footprint for applications that are not
@@ -3173,6 +3176,7 @@ void set_pmd_migration_entry(struct page_vma_mapped_walk *pvmw,
set_pmd_at(mm, address, pvmw->pmd, pmdswp);
page_remove_rmap(page, true);
put_page(page);
+ trace_set_migration_pmd(address, pmd_val(pmdswp));
}
void remove_migration_pmd(struct page_vma_mapped_walk *pvmw, struct page *new)
@@ -3206,5 +3210,6 @@ void remove_migration_pmd(struct page_vma_mapped_walk *pvmw, struct page *new)
if ((vma->vm_flags & VM_LOCKED) && !PageDoubleMap(new))
mlock_vma_page(new);
update_mmu_cache_pmd(vma, address, pvmw->pmd);
+ trace_remove_migration_pmd(address, pmd_val(pmde));
}
#endif
--
2.25.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH V3 2/2] mm/migration: Add trace events for base page and HugeTLB migrations
2022-01-28 11:09 [PATCH V3 0/2] mm/migration: Add trace events Anshuman Khandual
2022-01-28 11:09 ` [PATCH V3 1/2] mm/migration: Add trace events for THP migrations Anshuman Khandual
@ 2022-01-28 11:09 ` Anshuman Khandual
1 sibling, 0 replies; 3+ messages in thread
From: Anshuman Khandual @ 2022-01-28 11:09 UTC (permalink / raw)
To: linux-mm, akpm
Cc: Anshuman Khandual, Steven Rostedt, Ingo Molnar, Zi Yan,
Naoya Horiguchi, John Hubbard, Matthew Wilcox, linux-kernel
This adds two trace events for base page and HugeTLB page migrations. These
events, closely follow the implementation details like setting and removing
of PTE migration entries, which are essential operations for migration. The
new CREATE_TRACE_POINTS in <mm/rmap.c> covers both <events/migration.h> and
<events/tlb.h> based trace events. Hence drop redundant CREATE_TRACE_POINTS
from other places which could have otherwise conflicted during build.
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Zi Yan <ziy@nvidia.com>
Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Cc: John Hubbard <jhubbard@nvidia.com>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: linux-mm@kvack.org
Cc: linux-kernel@vger.kernel.org
Reported-by: kernel test robot <lkp@intel.com>
Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com>
---
arch/x86/mm/init.c | 1 -
include/trace/events/migrate.h | 31 +++++++++++++++++++++++++++++++
mm/migrate.c | 4 +++-
mm/rmap.c | 6 ++++++
4 files changed, 40 insertions(+), 2 deletions(-)
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 4ba024d5b63a..d8cfce221275 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -31,7 +31,6 @@
* We need to define the tracepoints somewhere, and tlb.c
* is only compiled when SMP=y.
*/
-#define CREATE_TRACE_POINTS
#include <trace/events/tlb.h>
#include "mm_internal.h"
diff --git a/include/trace/events/migrate.h b/include/trace/events/migrate.h
index 779f3fad9ecd..061b5128f335 100644
--- a/include/trace/events/migrate.h
+++ b/include/trace/events/migrate.h
@@ -105,6 +105,37 @@ TRACE_EVENT(mm_migrate_pages_start,
__print_symbolic(__entry->reason, MIGRATE_REASON))
);
+DECLARE_EVENT_CLASS(migration_pte,
+
+ TP_PROTO(unsigned long addr, unsigned long pte, int order),
+
+ TP_ARGS(addr, pte, order),
+
+ TP_STRUCT__entry(
+ __field(unsigned long, addr)
+ __field(unsigned long, pte)
+ __field(int, order)
+ ),
+
+ TP_fast_assign(
+ __entry->addr = addr;
+ __entry->pte = pte;
+ __entry->order = order;
+ ),
+
+ TP_printk("addr=%lx, pte=%lx order=%d", __entry->addr, __entry->pte, __entry->order)
+);
+
+DEFINE_EVENT(migration_pte, set_migration_pte,
+ TP_PROTO(unsigned long addr, unsigned long pte, int order),
+ TP_ARGS(addr, pte, order)
+);
+
+DEFINE_EVENT(migration_pte, remove_migration_pte,
+ TP_PROTO(unsigned long addr, unsigned long pte, int order),
+ TP_ARGS(addr, pte, order)
+);
+
#endif /* _TRACE_MIGRATE_H */
/* This part must be outside protection */
diff --git a/mm/migrate.c b/mm/migrate.c
index c7da064b4781..79e3a553923a 100644
--- a/mm/migrate.c
+++ b/mm/migrate.c
@@ -54,7 +54,6 @@
#include <asm/tlbflush.h>
-#define CREATE_TRACE_POINTS
#include <trace/events/migrate.h>
#include "internal.h"
@@ -257,6 +256,9 @@ static bool remove_migration_pte(struct page *page, struct vm_area_struct *vma,
if (PageTransHuge(page) && PageMlocked(page))
clear_page_mlock(page);
+ trace_remove_migration_pte(pvmw.address, pte_val(pte),
+ compound_order(new));
+
/* No need to invalidate - it was non-present before */
update_mmu_cache(vma, pvmw.address, pvmw.pte);
}
diff --git a/mm/rmap.c b/mm/rmap.c
index 6a1e8c7f6213..cae1c46440d6 100644
--- a/mm/rmap.c
+++ b/mm/rmap.c
@@ -76,7 +76,9 @@
#include <asm/tlbflush.h>
+#define CREATE_TRACE_POINTS
#include <trace/events/tlb.h>
+#include <trace/events/migrate.h>
#include "internal.h"
@@ -1861,6 +1863,8 @@ static bool try_to_migrate_one(struct page *page, struct vm_area_struct *vma,
if (pte_swp_uffd_wp(pteval))
swp_pte = pte_swp_mkuffd_wp(swp_pte);
set_pte_at(mm, pvmw.address, pvmw.pte, swp_pte);
+ trace_set_migration_pte(pvmw.address, pte_val(swp_pte),
+ compound_order(page));
/*
* No need to invalidate here it will synchronize on
* against the special swap migration pte.
@@ -1929,6 +1933,8 @@ static bool try_to_migrate_one(struct page *page, struct vm_area_struct *vma,
if (pte_uffd_wp(pteval))
swp_pte = pte_swp_mkuffd_wp(swp_pte);
set_pte_at(mm, address, pvmw.pte, swp_pte);
+ trace_set_migration_pte(address, pte_val(swp_pte),
+ compound_order(page));
/*
* No need to invalidate here it will synchronize on
* against the special swap migration pte.
--
2.25.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2022-01-28 11:09 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-01-28 11:09 [PATCH V3 0/2] mm/migration: Add trace events Anshuman Khandual
2022-01-28 11:09 ` [PATCH V3 1/2] mm/migration: Add trace events for THP migrations Anshuman Khandual
2022-01-28 11:09 ` [PATCH V3 2/2] mm/migration: Add trace events for base page and HugeTLB migrations Anshuman Khandual
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).