
hulk inclusion category:feature bugzilla:https://gitee.com/openeuler/kernel/issues/IC8KS8 CVE: NA -------------------------------- This patch exposes boost SPE sampling data through a new tracepoint (trace_spe_boost_spe_record), allowing userspace to monitor memory access patterns collected by the boost SPE feature. When a mem_sampling record has a valid boost_spe_idx, the tracepoint is triggered, providing visibility into boosted SPE activity. Currently, the mem_sampling module does not utilize this hotness data for sampling decisions; this patch focuses on improving observability without integrating boost SPE data into core sampling logic. Signed-off-by: Ze Zuo <zuoze1@huawei.com> Signed-off-by: Tong Tiangen <tongtiangen@huawei.com> --- drivers/arm/mm_monitor/mm_spe.c | 2 ++ include/trace/events/kmem.h | 34 +++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/drivers/arm/mm_monitor/mm_spe.c b/drivers/arm/mm_monitor/mm_spe.c index a7e6407ed843..0eaa7e7397e1 100644 --- a/drivers/arm/mm_monitor/mm_spe.c +++ b/drivers/arm/mm_monitor/mm_spe.c @@ -459,6 +459,8 @@ void mm_spe_record_enqueue(struct arm_spe_record *record) return; } + if (record->boost_spe_idx) + trace_spe_boost_spe_record((struct mem_sampling_record *)record); trace_mm_spe_record((struct mem_sampling_record *)record); record_tail = spe_buf->record_base + spe_buf->nr_records * SPE_RECORD_ENTRY_SIZE; diff --git a/include/trace/events/kmem.h b/include/trace/events/kmem.h index 423e3ba1b3d1..4bcbf613c9a3 100644 --- a/include/trace/events/kmem.h +++ b/include/trace/events/kmem.h @@ -432,6 +432,40 @@ TRACE_EVENT(mm_spe_record, TP_printk("vaddr=%llu paddr=%llu pid=%d", __entry->vaddr, __entry->paddr, __entry->pid) ); + +TRACE_EVENT(spe_boost_spe_record, + TP_PROTO(struct mem_sampling_record *record), + + TP_ARGS(record), + + TP_STRUCT__entry( + __field(u64, boost_spe_pa1) + __field(u64, boost_spe_pa2) + __field(u64, boost_spe_pa3) + __field(u64, boost_spe_pa4) + __field(u64, boost_spe_pa5) + __field(u64, boost_spe_pa6) + __field(u64, boost_spe_pa7) + __field(u64, boost_spe_pa8) + ), + + TP_fast_assign( + __entry->boost_spe_pa1 = record->boost_spe_addr[0]; + __entry->boost_spe_pa2 = record->boost_spe_addr[1]; + __entry->boost_spe_pa3 = record->boost_spe_addr[2]; + __entry->boost_spe_pa4 = record->boost_spe_addr[3]; + __entry->boost_spe_pa5 = record->boost_spe_addr[4]; + __entry->boost_spe_pa6 = record->boost_spe_addr[5]; + __entry->boost_spe_pa7 = record->boost_spe_addr[6]; + __entry->boost_spe_pa8 = record->boost_spe_addr[7]; + ), + + TP_printk("boost_spe_addr[0]=0x%llx boost_spe_addr[1]=0x%llx tlb_addr[2]=0x%llx tlb_addr[3]=0x%llx tlb_addr[4]=0x%llx tlb_addr[5]=0x%llx tlb_addr[6]=0x%llx tlb_addr[7]=0x%llx", + __entry->boost_spe_pa1, __entry->boost_spe_pa2, + __entry->boost_spe_pa3, __entry->boost_spe_pa4, + __entry->boost_spe_pa5, __entry->boost_spe_pa6, + __entry->boost_spe_pa7, __entry->boost_spe_pa8) +); #endif /* CONFIG_ARM_SPE_MEM_SAMPLING */ -- 2.25.1