Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 14ede717 authored by Minchan Kim's avatar Minchan Kim Committed by Saravana Kannan
Browse files

ANDROID: GKI: add fields from per-process mm event tracking feature



mm_event feature exports mm_event_count function and adds new fields
in the task_struct. Fix ABI diffs by adding the necessary padding.

Bug: 80168800
Bug: 116825053
Bug: 153442668
Test: boot
Change-Id: I4e69c994f47402766481c58ab5ec2071180964b8
Signed-off-by: default avatarMinchan Kim <minchan@google.com>
(cherry picked from commit 04ff5ec537a5f9f546dcb32257d8fbc1f4d9ca2d)
Signed-off-by: default avatarMartin Liu <liumartin@google.com>
[surenb: cherry picked and trimmed the original patch to include only
necessary changes to resolve ABI diff for task_struct and
mm_event_count, changed enum mm_event_type to contain the final
members]

Bug: 149182139
Test: build and boot
Signed-off-by: default avatarSuren Baghdasaryan <surenb@google.com>
Change-Id: Iacdba61298ba15fc71b46e0323b4160f174300b7
parent c69ff7a8
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _LINUX_MM_EVENT_H
#define _LINUX_MM_EVENT_H

enum mm_event_type {
	MM_MIN_FAULT = 0,
	MM_MAJ_FAULT = 1,
	MM_READ_IO = 2,
	MM_COMPACTION = 3,
	MM_RECLAIM = 4,
	MM_SWP_FAULT = 5,
	MM_KERN_ALLOC = 6,
	MM_TYPE_NUM = 7,
};

struct mm_event_task {
	unsigned int count;
	unsigned int max_lat;
	u64 accm_lat;
} __attribute__ ((packed));

#endif
+5 −1
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@
#include <linux/sched/prio.h>
#include <linux/signal_types.h>
#include <linux/mm_types_task.h>
#include <linux/mm_event.h>
#include <linux/task_io_accounting.h>
#include <linux/rseq.h>

@@ -971,7 +972,10 @@ struct task_struct {
	/* Deadlock detection and priority inheritance handling: */
	struct rt_mutex_waiter		*pi_blocked_on;
#endif

#ifdef CONFIG_MM_EVENT_STAT
	struct mm_event_task	mm_event[MM_TYPE_NUM];
	unsigned long		next_period;
#endif
#ifdef CONFIG_DEBUG_MUTEXES
	/* Mutex deadlock detection: */
	struct mutex_waiter		*blocked_on;
+16 −0
Original line number Diff line number Diff line
@@ -614,6 +614,22 @@ config ZSMALLOC_STAT
	  information to userspace via debugfs.
	  If unsure, say N.

config MM_EVENT_STAT
	bool "Track per-process MM event"
	depends on MMU
	help
	  This option enables per-process mm event stat(e.g., fault, reclaim,
	  compaction and so on ) with some interval(Default is 0.5sec).
	  Admin can see the stat from trace file via debugfs(e.g.,
	  /sys/kernel/debug/tracing/trace)

	  It includes max/average memory allocation latency for the interval
	  as well as event count so that admin can see what happens in VM side
	  (how many each event happens and how much processes spent time for
	  the MM event). If it's too large, that would be not good situation.

	  System can dump the trace into bugreport when user allows the dump.

config GENERIC_EARLY_IOREMAP
	bool

+3 −0
Original line number Diff line number Diff line
@@ -28,6 +28,9 @@ mmu-$(CONFIG_MMU) := gup.o highmem.o memory.o mincore.o \
			   rmap.o vmalloc.o


ifdef CONFIG_MM_EVENT_STAT
mmu-$(CONFIG_MMU)	+= mm_event.o
endif
ifdef CONFIG_CROSS_MEMORY_ATTACH
mmu-$(CONFIG_MMU)	+= process_vm_access.o
endif

mm/mm_event.c

0 → 100644
+7 −0
Original line number Diff line number Diff line
#include <linux/mm.h>
#include <linux/mm_event.h>

void mm_event_count(enum mm_event_type event, int count)
{
}
EXPORT_SYMBOL_GPL(mm_event_count);