From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id D3571C36010 for ; Wed, 2 Apr 2025 01:13:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 29D4F280002; Tue, 1 Apr 2025 21:13:07 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 24C4E280001; Tue, 1 Apr 2025 21:13:07 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0EE8A280002; Tue, 1 Apr 2025 21:13:07 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id E8D42280001 for ; Tue, 1 Apr 2025 21:13:06 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 0D2241A0B52 for ; Wed, 2 Apr 2025 01:13:07 +0000 (UTC) X-FDA: 83287330014.27.BA1A587 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.14]) by imf17.hostedemail.com (Postfix) with ESMTP id 5A05740004 for ; Wed, 2 Apr 2025 01:13:04 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=AxRSPgS4; spf=pass (imf17.hostedemail.com: domain of yu.c.chen@intel.com designates 192.198.163.14 as permitted sender) smtp.mailfrom=yu.c.chen@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1743556385; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:references:dkim-signature; bh=on+FhL/6Wetpb99osjPXbe+ZHwrSiIR0MJZ6PqGMPYk=; b=PF5ywhgzENLqfRmVC12gc24kNhb2de+TKfPrzsWF9qoqIbMbNQR91gXeAWrMY3NBGjw2rm /+dpfldjQcibNJPchjSIZvBNy9wCImx7sfjKeMUpovJxBq8l3qw8BxjUaeXX2rneBH9ES6 NXaySyFfHWR5PkvPB9cbsTylzI9VYA4= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=pass header.d=intel.com header.s=Intel header.b=AxRSPgS4; spf=pass (imf17.hostedemail.com: domain of yu.c.chen@intel.com designates 192.198.163.14 as permitted sender) smtp.mailfrom=yu.c.chen@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1743556385; a=rsa-sha256; cv=none; b=P0f0tPAh+zfbO52kophqPbVeKlflMs6zY8GJIYT9E+mcJ5g7bp4pz8XkmkoA8gOrWyHHx4 M9Zi+CkkhO5RjlfQJyzgCs+PopLOdma8YEVU78mbhBmnz01BG+wL8+nqS6XMCV88WZGtEU /i2lsX6R6ajXGuYJ3oWmBgxKar5jqYg= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1743556384; x=1775092384; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=dkDDZ46+D6s06CwT6yuA2JUG7qQMBQcORO4mUIRvv0U=; b=AxRSPgS4NFIIL0y+SFOVQfYfaUF879a20aQPhJyqOzCEyITH55muLe1N rs7Aidi5LTpXFM8Cu6thydzgfU+tqguNbaUvVXFW3WqgtSs3k4Wa+jqDK lo8RCcI5QVLJ0uHuIDYiuxXMNSjWcMwQnd9JQHSxlreQpjoAbXFPdQ/IC DfOAhgM1wIItv9X7suGLqpkT7vcEybTc1KgG/rslN4o0QmWH/r1nvmMuY vFTj1NNYIfwbMVRH7CGUaOpAclKgaTbv0WZElvHmuTYLr2wA01NPLlLya mnkHcEjzM1UXFKEhnFvwUnpxb1NS3IXFAMrgyRxTECfmAq9ZWvhqRYcoh Q==; X-CSE-ConnectionGUID: 8MaXBRRETCiwSDC5OhWU+Q== X-CSE-MsgGUID: 7hZyhNdvTb+8DY4sorAeKA== X-IronPort-AV: E=McAfee;i="6700,10204,11391"; a="45075101" X-IronPort-AV: E=Sophos;i="6.14,294,1736841600"; d="scan'208";a="45075101" Received: from fmviesa001.fm.intel.com ([10.60.135.141]) by fmvoesa108.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Apr 2025 18:13:02 -0700 X-CSE-ConnectionGUID: LZY7pB2pQB+rTQoopQpl9g== X-CSE-MsgGUID: +9HhSE1MSECtq6/USqK3Eg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.14,294,1736841600"; d="scan'208";a="157529943" Received: from chenyu-dev.sh.intel.com ([10.239.62.107]) by fmviesa001.fm.intel.com with ESMTP; 01 Apr 2025 18:12:57 -0700 From: Chen Yu To: Peter Zijlstra , Ingo Molnar , Juri Lelli , Vincent Guittot , Mel Gorman , Johannes Weiner , Michal Hocko , Roman Gushchin , Shakeel Butt , Muchun Song , Andrew Morton Cc: Tim Chen , Aubrey Li , Rik van Riel , Raghavendra K T , K Prateek Nayak , Baolin Wang , Xunlei Pang , linux-kernel@vger.kernel.org, cgroups@vger.kernel.org, linux-mm@kvack.org, Chen Yu , Chen Yu Subject: [PATCH] sched/numa: Add statistics of numa balance task migration and swap Date: Wed, 2 Apr 2025 09:06:11 +0800 Message-Id: <20250402010611.3204674-1-yu.c.chen@intel.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 5A05740004 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: q6e55on4nxmpfpotydtdkj3ot8umofbg X-HE-Tag: 1743556384-331179 X-HE-Meta: U2FsdGVkX19iKZn24tpUqwTvM8uNBP36KvMFyBj/ZKg8VDxGk3v5ivjIjNQl/+4VKsEHEYl3UltRQhAelMVhdstFuN5Bmx21m6MepNIR1XwowZOMdaJLub/llEpCJMU+r7ycvwZPTsOidy2rgZLQT8wsauOf8RUpS3XuB9qotwL0jHwVVAjK+muReqdIjgdVEyqR4CH61+b6vRExySt81pWTv7igQX8/leGgxsTan80O3ML7dsiPZsCoKDhau3Zx60GJePUwmoTULcxZ1m8jcFZb00XwLoQvFrX5m+qXNMiaSGjWzOQsmHpuHYLPVAStO6D4jBxQEK1AqcC29WF6EVztWJzxOiuO1b4mB73XmQ6+kJddHjOS47TVrLtYKHjVM42c5SxCjD0aQGs/2eiqBoUjirzuDbUIx7VDD3HTFBNUD9WQ4aBRFHXGXecTAmQQClF91TrVOEBEAMOWPfB9DskfhlVkQgKcuweLrh+R9hagetQMeVHJJX5ufupeFUlPWfAEtmVyoGAG3XcVwPI39CcgsWelHaWOmhNQNjkQLV+O6K1R61exlbozJCNnM14+ne2+6MlrSoVezLpNVxnNDfcNl0kzz4kBJfzbB765vtZP7T8/HRNquAkMsdIoBAn3s44YztTRy82bFD27toAhCjnz476iP9x5hiaWdxLCZRvyOvPeN4kaZiclPhfJQN3ws2dImypVxNb0EGYsveGDG9EIbdDe1JhZObqviZV5NBnbfDJZD/dacTzTqmyLhWFRx37FNmjTs66UtVbt+2JYZGeK2SEb6K9pKhjVKRSwamZ+c26mAiWRe+bpzoqbmthBGy8t5IuELV+wtd71tbejRqk90q46w+4YuIZPOrc4AbFP3Ifns1UxNxwJx3Z8mjfwi52aZUFa1ubxjBb3bQh41rmFdJQnEyXENbSD6q+7qv1JIKPGVRtbOd3OVs9VEY3J4+2LJPIiT8fpdKr4XQW jL+dc/Y1 tiEkZe5+sRIiQbOIcSWCH3sy5ANCkZcE63D7puxnwI/tjC6jb3N7WtVoP+7cAt7c5T82aYkqhkrP/klQgKAsVhfGJ7gLLCPcgXl7PyJg6hEDiBxhsuF6m3WzUpjba+7ea/DMKbnbBZpiGWKMfhIgQ2NZ+tLb2oXoQbTqb5YUNm/ZIwzlhrN37LFPvsME9bQrosFWMlWT3UwWyQqk= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On system with NUMA balancing enabled, it is found that tracking the task activities due to NUMA balancing is helpful. NUMA balancing has two mechanisms for task migration: one is to migrate the task to an idle CPU in its preferred node, the other is to swap tasks on different nodes if they are on each other's preferred node. The kernel already has NUMA page migration statistics in /sys/fs/cgroup/mytest/memory.stat and /proc/{PID}/sched. but does not have statistics for task migration/swap. Add the task migration and swap count accordingly. The following two new fields: numa_task_migrated numa_task_swapped will be displayed in both /sys/fs/cgroup/{GROUP}/memory.stat and /proc/{PID}/sched Previous RFC version can be found here: https://lore.kernel.org/lkml/1847c5ef828ad4835a35e3a54b88d2e13bce0eea.1740483690.git.yu.c.chen@intel.com/ Signed-off-by: Chen Yu --- RFC->v1: Rename the nr_numa_task_migrated to numa_task_migrated, and nr_numa_task_swapped numa_task_swapped in /proc/{PID}/sched, so both cgroup's memory.stat and task's sched have the same field name. --- include/linux/sched.h | 4 ++++ include/linux/vm_event_item.h | 2 ++ kernel/sched/core.c | 10 ++++++++-- kernel/sched/debug.c | 4 ++++ mm/memcontrol.c | 2 ++ mm/vmstat.c | 2 ++ 6 files changed, 22 insertions(+), 2 deletions(-) diff --git a/include/linux/sched.h b/include/linux/sched.h index 0785268c76f8..9623e5300453 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -532,6 +532,10 @@ struct sched_statistics { u64 nr_failed_migrations_running; u64 nr_failed_migrations_hot; u64 nr_forced_migrations; +#ifdef CONFIG_NUMA_BALANCING + u64 numa_task_migrated; + u64 numa_task_swapped; +#endif u64 nr_wakeups; u64 nr_wakeups_sync; diff --git a/include/linux/vm_event_item.h b/include/linux/vm_event_item.h index f70d0958095c..aef817474781 100644 --- a/include/linux/vm_event_item.h +++ b/include/linux/vm_event_item.h @@ -64,6 +64,8 @@ enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT, NUMA_HINT_FAULTS, NUMA_HINT_FAULTS_LOCAL, NUMA_PAGE_MIGRATE, + NUMA_TASK_MIGRATE, + NUMA_TASK_SWAP, #endif #ifdef CONFIG_MIGRATION PGMIGRATE_SUCCESS, PGMIGRATE_FAIL, diff --git a/kernel/sched/core.c b/kernel/sched/core.c index c86c05264719..314d5cbce2b6 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -3348,6 +3348,11 @@ void set_task_cpu(struct task_struct *p, unsigned int new_cpu) #ifdef CONFIG_NUMA_BALANCING static void __migrate_swap_task(struct task_struct *p, int cpu) { + __schedstat_inc(p->stats.numa_task_swapped); + + if (p->mm) + count_memcg_events_mm(p->mm, NUMA_TASK_SWAP, 1); + if (task_on_rq_queued(p)) { struct rq *src_rq, *dst_rq; struct rq_flags srf, drf; @@ -7948,8 +7953,9 @@ int migrate_task_to(struct task_struct *p, int target_cpu) if (!cpumask_test_cpu(target_cpu, p->cpus_ptr)) return -EINVAL; - /* TODO: This is not properly updating schedstats */ - + __schedstat_inc(p->stats.numa_task_migrated); + if (p->mm) + count_memcg_events_mm(p->mm, NUMA_TASK_MIGRATE, 1); trace_sched_move_numa(p, curr_cpu, target_cpu); return stop_one_cpu(curr_cpu, migration_cpu_stop, &arg); } diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c index 56ae54e0ce6a..f971c2af7912 100644 --- a/kernel/sched/debug.c +++ b/kernel/sched/debug.c @@ -1206,6 +1206,10 @@ void proc_sched_show_task(struct task_struct *p, struct pid_namespace *ns, P_SCHEDSTAT(nr_failed_migrations_running); P_SCHEDSTAT(nr_failed_migrations_hot); P_SCHEDSTAT(nr_forced_migrations); +#ifdef CONFIG_NUMA_BALANCING + P_SCHEDSTAT(numa_task_migrated); + P_SCHEDSTAT(numa_task_swapped); +#endif P_SCHEDSTAT(nr_wakeups); P_SCHEDSTAT(nr_wakeups_sync); P_SCHEDSTAT(nr_wakeups_migrate); diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 4de6acb9b8ec..1656c90b2381 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -460,6 +460,8 @@ static const unsigned int memcg_vm_event_stat[] = { NUMA_PAGE_MIGRATE, NUMA_PTE_UPDATES, NUMA_HINT_FAULTS, + NUMA_TASK_MIGRATE, + NUMA_TASK_SWAP, #endif }; diff --git a/mm/vmstat.c b/mm/vmstat.c index 16bfe1c694dd..7de1583a63c9 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c @@ -1339,6 +1339,8 @@ const char * const vmstat_text[] = { "numa_hint_faults", "numa_hint_faults_local", "numa_pages_migrated", + "numa_task_migrated", + "numa_task_swapped", #endif #ifdef CONFIG_MIGRATION "pgmigrate_success", -- 2.25.1