From nobody Mon Feb 9 04:22:30 2026 Received: from mxct.zte.com.cn (mxct.zte.com.cn [183.62.165.209]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0D59619C574; Thu, 3 Apr 2025 05:27:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=183.62.165.209 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743658066; cv=none; b=M9y8HergMIVmRaYMKqK8XtXfHeuleGj3c9K4EKy4wgQdA7SU9IbasKqzLgBRi4RRzC9+ytyPHb1+71bDb1gC8Q6jRfdLulllRiNtF6bAWoVSQcSjpyZdgoaDNO+2GNn5c+qdhe51Nw6aiN1PviDgfsJV+Q7Vik6I2gNixhWiyBI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743658066; c=relaxed/simple; bh=3n7/O/hI64y0dcXn/LxVhsp8wYm7Enb+Q+8pWQDRVE0=; h=Date:Message-ID:In-Reply-To:References:Mime-Version:From:To:Cc: Subject:Content-Type; b=gQqAuSYbKi7z47wqzmwSz6DXhtubmqTlyqevmXndQFC8iu9aKPVy0TFl8AtRiUzuLKxpYd0EeL5VP6WXiZ8eAPxa/v9VxOs1snz2vZS5+f9QIgMB3VC0jXRi2iUdxo+KZmJmm3wCl5UAfTNOSHdrn72pFCG1py+PgjZt1JTYkcs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zte.com.cn; spf=pass smtp.mailfrom=zte.com.cn; arc=none smtp.client-ip=183.62.165.209 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zte.com.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=zte.com.cn Received: from mse-fl1.zte.com.cn (unknown [10.5.228.132]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mxct.zte.com.cn (FangMail) with ESMTPS id 4ZSqxX6HLHz51SYK; Thu, 3 Apr 2025 13:27:28 +0800 (CST) Received: from xaxapp04.zte.com.cn ([10.99.98.157]) by mse-fl1.zte.com.cn with SMTP id 5335RNj9042170; Thu, 3 Apr 2025 13:27:23 +0800 (+08) (envelope-from xu.xin16@zte.com.cn) Received: from mapi (xaxapp04[null]) by mapi (Zmail) with MAPI id mid32; Thu, 3 Apr 2025 13:27:25 +0800 (CST) Date: Thu, 3 Apr 2025 13:27:25 +0800 (CST) X-Zmail-TransId: 2afb67ee1c3d005-634bb X-Mailer: Zmail v1.0 Message-ID: <202504031327254709KjF9LmE5S0XFQdI6rxlu@zte.com.cn> In-Reply-To: <20250403132534636XLwK7CWiCj1J4-FENz0vk@zte.com.cn> References: 20250403132534636XLwK7CWiCj1J4-FENz0vk@zte.com.cn Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 From: To: Cc: , , , , , , , , , , , Subject: =?UTF-8?B?W1BBVENIIGxpbnV4LW5leHQgMS82XSBtZW1jb250cm9sOiByZW5hbWUgbWVtX2Nncm91cF9zY2FuX3Rhc2tzKCnCoMKg?= X-MAIL: mse-fl1.zte.com.cn 5335RNj9042170 X-Fangmail-Anti-Spam-Filtered: true X-Fangmail-MID-QID: 67EE1C40.009/4ZSqxX6HLHz51SYK Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: xu xin Current Issue: =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D The function mem_cgroup_scan_tasks in memcontrol.c has a naming ambiguity. While its name suggests it only iterates through processes belonging to the current memcgroup, it actually scans all descendant cgroups under the subtree rooted at this memcgroup. This discrepancy can cause confusion for developers relying on the semantic meaning of the function name. Resolution: =3D=3D=3D=3D=3D=3D=3D=3D=3D Renaming: We have renamed the original function to **mem_cgroup_tree_scan_tasks** to explicitly reflect its subtree-traversal behavior. A subsequent patch will introduce a new mem_cgroup_scan_tasks function that strictly iterates processes only within the current memcgroup, aligning its behavior with its name. Signed-off-by: xu xin --- include/linux/memcontrol.h | 4 ++-- mm/memcontrol.c | 4 ++-- mm/oom_kill.c | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 53364526d877..232cea80e71f 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -795,7 +795,7 @@ struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *, struct mem_cgroup *, struct mem_cgroup_reclaim_cookie *); void mem_cgroup_iter_break(struct mem_cgroup *, struct mem_cgroup *); -void mem_cgroup_scan_tasks(struct mem_cgroup *memcg, +void mem_cgroup_tree_scan_tasks(struct mem_cgroup *memcg, int (*)(struct task_struct *, void *), void *arg); static inline unsigned short mem_cgroup_id(struct mem_cgroup *memcg) @@ -1289,7 +1289,7 @@ static inline void mem_cgroup_iter_break(struct mem_c= group *root, { } -static inline void mem_cgroup_scan_tasks(struct mem_cgroup *memcg, +static inline void mem_cgroup_tree_scan_tasks(struct mem_cgroup *memcg, int (*fn)(struct task_struct *, void *), void *arg) { } diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 421740f1bcdc..9af30fbfe819 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -1151,7 +1151,7 @@ static void invalidate_reclaim_iterators(struct mem_c= group *dead_memcg) } /** - * mem_cgroup_scan_tasks - iterate over tasks of a memory cgroup hierarchy + * mem_cgroup_tree_scan_tasks - iterate over tasks of a memory cgroup hier= archy * @memcg: hierarchy root * @fn: function to call for each task * @arg: argument passed to @fn @@ -1163,7 +1163,7 @@ static void invalidate_reclaim_iterators(struct mem_c= group *dead_memcg) * * This function must not be called for the root memory cgroup. */ -void mem_cgroup_scan_tasks(struct mem_cgroup *memcg, +void mem_cgroup_tree_scan_tasks(struct mem_cgroup *memcg, int (*fn)(struct task_struct *, void *), void *arg) { struct mem_cgroup *iter; diff --git a/mm/oom_kill.c b/mm/oom_kill.c index 25923cfec9c6..af3b8407fb08 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c @@ -367,7 +367,7 @@ static void select_bad_process(struct oom_control *oc) oc->chosen_points =3D LONG_MIN; if (is_memcg_oom(oc)) - mem_cgroup_scan_tasks(oc->memcg, oom_evaluate_task, oc); + mem_cgroup_tree_scan_tasks(oc->memcg, oom_evaluate_task, oc); else { struct task_struct *p; @@ -428,7 +428,7 @@ static void dump_tasks(struct oom_control *oc) pr_info("[ pid ] uid tgid total_vm rss rss_anon rss_file rss_sh= mem pgtables_bytes swapents oom_score_adj name\n"); if (is_memcg_oom(oc)) - mem_cgroup_scan_tasks(oc->memcg, dump_task, oc); + mem_cgroup_tree_scan_tasks(oc->memcg, dump_task, oc); else { struct task_struct *p; int i =3D 0; @@ -1056,7 +1056,7 @@ static void oom_kill_process(struct oom_control *oc, = const char *message) if (oom_group) { memcg_memory_event(oom_group, MEMCG_OOM_GROUP_KILL); mem_cgroup_print_oom_group(oom_group); - mem_cgroup_scan_tasks(oom_group, oom_kill_memcg_member, + mem_cgroup_tree_scan_tasks(oom_group, oom_kill_memcg_member, (void *)message); mem_cgroup_put(oom_group); } --=20 2.15.2 From nobody Mon Feb 9 04:22:30 2026 Received: from mxhk.zte.com.cn (mxhk.zte.com.cn [63.216.63.40]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ABD0C11712; Thu, 3 Apr 2025 05:30:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=63.216.63.40 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743658218; cv=none; b=oKmVGGmhwK6NdvZnUnPEFhpnpONDOr3YZsbnCVdsTkJgW3fo05A4I6jgOndMGHhInMuARcmf87yW3teZazK7VYbexnCo/F2bVrH/Nv1YCdYRM6Qx4eXBkpDeGGh0AFeOdq7WMh9JAWmnfHp+F9G9x78KmElfzMKz/vh66PdpMLc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743658218; c=relaxed/simple; bh=BM2a4g1TbHQGRp0LZlYp70MEjNeMliYqZpPQB2oBxvc=; h=Date:Message-ID:In-Reply-To:References:Mime-Version:From:To:Cc: Subject:Content-Type; b=Da2WL9rpOH4AHyOiNwDMVPAwsLtC0dC11cer+WZE8KtpTvZ/ivIjBk0oTXefYFJ2ng1OzN7FyHErPo4Shb7qv4DCoUXISOiqbGgriqbYqus08DJFSN7AWvYmfiFyCJ2tUvNplW3dQhsHgfjszfIiQJZ6Kni+0CfZC+LgCty8WIs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zte.com.cn; spf=pass smtp.mailfrom=zte.com.cn; arc=none smtp.client-ip=63.216.63.40 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zte.com.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=zte.com.cn Received: from mse-fl1.zte.com.cn (unknown [10.5.228.132]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mxhk.zte.com.cn (FangMail) with ESMTPS id 4ZSr0f6xBDz8R042; Thu, 3 Apr 2025 13:30:10 +0800 (CST) Received: from xaxapp01.zte.com.cn ([10.88.99.176]) by mse-fl1.zte.com.cn with SMTP id 5335U7at043271; Thu, 3 Apr 2025 13:30:07 +0800 (+08) (envelope-from xu.xin16@zte.com.cn) Received: from mapi (xaxapp02[null]) by mapi (Zmail) with MAPI id mid32; Thu, 3 Apr 2025 13:30:09 +0800 (CST) Date: Thu, 3 Apr 2025 13:30:09 +0800 (CST) X-Zmail-TransId: 2afa67ee1ce1ffffffffd79-6c227 X-Mailer: Zmail v1.0 Message-ID: <20250403133009359JE5AjQxfNH7B3DWUgFHXi@zte.com.cn> In-Reply-To: <20250403132534636XLwK7CWiCj1J4-FENz0vk@zte.com.cn> References: 20250403132534636XLwK7CWiCj1J4-FENz0vk@zte.com.cn Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 From: To: Cc: , , , , , , , , , , , Subject: =?UTF-8?B?W1BBVENIIGxpbnV4LW5leHQgMi82XSBtZW1jb250cm9sOiBpbnRyb2R1Y2UgdGhlIG5ldwoKIG1lbV9jZ3JvdXBfc2Nhbl90YXNrcygp?= X-MAIL: mse-fl1.zte.com.cn 5335U7at043271 X-Fangmail-Anti-Spam-Filtered: true X-Fangmail-MID-QID: 67EE1CE2.00B/4ZSr0f6xBDz8R042 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: xu xin Introduce a new mem_cgroup_scan_tasks function that strictly iterates processes only within the current memcgroup, aligning its behavior with its name. Signed-off-by: xu xin --- include/linux/memcontrol.h | 7 +++++++ mm/memcontrol.c | 24 ++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 232cea80e71f..3af34e124ce6 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -795,6 +795,8 @@ struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *, struct mem_cgroup *, struct mem_cgroup_reclaim_cookie *); void mem_cgroup_iter_break(struct mem_cgroup *, struct mem_cgroup *); +void mem_cgroup_scan_tasks(struct mem_cgroup *memcg, + int (*)(struct task_struct *, void *), void *arg); void mem_cgroup_tree_scan_tasks(struct mem_cgroup *memcg, int (*)(struct task_struct *, void *), void *arg); @@ -1289,6 +1291,11 @@ static inline void mem_cgroup_iter_break(struct mem_= cgroup *root, { } +static inline void mem_cgroup_scan_tasks(struct mem_cgroup *memcg, + int (*fn)(struct task_struct *, void *), void *arg) +{ +} + static inline void mem_cgroup_tree_scan_tasks(struct mem_cgroup *memcg, int (*fn)(struct task_struct *, void *), void *arg) { diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 9af30fbfe819..aff5a095b9e4 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -1150,6 +1150,30 @@ static void invalidate_reclaim_iterators(struct mem_= cgroup *dead_memcg) dead_memcg); } +/* * + * mem_cgroup_scan_tasks - iterate over tasks of only this memory cgroup. + * @memcg: the specified memory cgroup. + * @fn: function to call for each task + * @arg: argument passed to @fn + * + * Unlike mem_cgroup_tree_scan_tasks(), this function only iterate over + * these tasks attached to @memcg, not including any of its descendants + * memcg. And this could be called for the root memory cgroup. + */ +void mem_cgroup_scan_tasks(struct mem_cgroup *memcg, + int (*fn)(struct task_struct *, void *), void *arg) +{ + int ret =3D 0; + struct css_task_iter it; + struct task_struct *task; + + css_task_iter_start(&memcg->css, CSS_TASK_ITER_PROCS, &it); + while (!ret && (task =3D css_task_iter_next(&it))) + ret =3D fn(task, arg); + + css_task_iter_end(&it); +} + /** * mem_cgroup_tree_scan_tasks - iterate over tasks of a memory cgroup hier= archy * @memcg: hierarchy root --=20 2.15. From nobody Mon Feb 9 04:22:30 2026 Received: from mxhk.zte.com.cn (mxhk.zte.com.cn [63.216.63.40]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A9B23D26D; Thu, 3 Apr 2025 05:32:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=63.216.63.40 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743658323; cv=none; b=K8iz9Z/ogd+xuF1bZt64FhWw/wclGiGArVhPDSL/jhyEIHRSAAaUia3pcH0x0VyMfbMbNehzPoU0TUd80JGi8AaQNe7cxzvWBUYEbyvB3Xstl0ikMEv0HdxFGcJ9QdGT9iB3ds/aPYgV0dNtQ7R/kJIwp9MWYSQDaKvhJKyZFyk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743658323; c=relaxed/simple; bh=unUSdxUnKG+T7L+6CvqNgY2lpiikyaDL8t2v61GBeLI=; h=Date:Message-ID:In-Reply-To:References:Mime-Version:From:To:Cc: Subject:Content-Type; b=mvkIzgbiqVlJrnsg/az2RMXW+qEo8FvHjYut3KKk8fo2Upq4UwECeapI4jjziAyt98CIF7KdbnFGOExAZv7QfJqJeQC4UDhGHR5cX8o4OTH5CaS4Lmrh9WCuHbtoKbU95sZHpfRyQaVDwIXh80a8ahnMnl2FgCQ0k4Z/p+dMx6g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zte.com.cn; spf=pass smtp.mailfrom=zte.com.cn; arc=none smtp.client-ip=63.216.63.40 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zte.com.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=zte.com.cn Received: from mse-fl1.zte.com.cn (unknown [10.5.228.132]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mxhk.zte.com.cn (FangMail) with ESMTPS id 4ZSr2j21sXz8R042; Thu, 3 Apr 2025 13:31:57 +0800 (CST) Received: from xaxapp02.zte.com.cn ([10.88.97.241]) by mse-fl1.zte.com.cn with SMTP id 5335Vu70043767; Thu, 3 Apr 2025 13:31:56 +0800 (+08) (envelope-from xu.xin16@zte.com.cn) Received: from mapi (xaxapp02[null]) by mapi (Zmail) with MAPI id mid32; Thu, 3 Apr 2025 13:31:58 +0800 (CST) Date: Thu, 3 Apr 2025 13:31:58 +0800 (CST) X-Zmail-TransId: 2afa67ee1d4effffffff9e4-6de90 X-Mailer: Zmail v1.0 Message-ID: <20250403133158436XF_dvGEyg6j0sZsH6VH9U@zte.com.cn> In-Reply-To: <20250403132534636XLwK7CWiCj1J4-FENz0vk@zte.com.cn> References: 20250403132534636XLwK7CWiCj1J4-FENz0vk@zte.com.cn Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 From: To: , Cc: , , , , , , , , , , Subject: =?UTF-8?B?W1BBVENIIGxpbnV4LW5leHQgMy82XSBtZW1jb250cm9sLXYxOiBpbnRyb2R1Y2Uga3NtX3N0YXQgYXQgY2dyb3VwCgogbGV2ZWw=?= X-MAIL: mse-fl1.zte.com.cn 5335Vu70043767 X-Fangmail-Anti-Spam-Filtered: true X-Fangmail-MID-QID: 67EE1D4D.000/4ZSr2j21sXz8R042 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: xu xin With the enablement of container-level KSM (e.g., via prctl), there is a growing demand for container-level observability of KSM behavior. However, current cgroup implementations lack support for exposing KSM-related metrics. This patch introduces a new interface named ksm_stat at the cgroup hierarchy level, enabling users to monitor KSM merging statistics specifically for containers where this feature has been activated, eliminating the need to manually inspect KSM information for each individual process within the cgroup. Users can obtain the KSM information of a cgroup just by: `cat /sys/fs/cgroup/memory.ksm_stat` Current implementation supports cgroup v1 temporarily; cgroup v2 compatibility is planned for future versions. Co-developed-by: Haonan Chen Signed-off-by: Haonan Chen Signed-off-by: xu xin --- mm/memcontrol-v1.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/mm/memcontrol-v1.c b/mm/memcontrol-v1.c index 8660908850dc..95da877d5516 100644 --- a/mm/memcontrol-v1.c +++ b/mm/memcontrol-v1.c @@ -1821,6 +1821,40 @@ static int memcg_numa_stat_show(struct seq_file *m, = void *v) } #endif /* CONFIG_NUMA */ +#ifdef CONFIG_KSM +struct memcg_ksm_stat { + unsigned long ksm_rmap_items; +}; + +static int evaluate_memcg_ksm_stat(struct task_struct *task, void *arg) +{ + struct mm_struct *mm; + struct memcg_ksm_stat *ksm_stat =3D arg; + + mm =3D get_task_mm(task); + if (mm) { + ksm_stat->ksm_rmap_items +=3D mm->ksm_rmap_items; + mmput(mm); + } + + return 0; +} + +static int memcg_ksm_stat_show(struct seq_file *m, void *v) +{ + struct memcg_ksm_stat ksm_stat; + struct mem_cgroup *memcg =3D mem_cgroup_from_seq(m); + + /* Initialization */ + ksm_stat.ksm_rmap_items =3D 0; + /* summing all processes'ksm statistic items of this cgroup hierarchy */ + mem_cgroup_scan_tasks(memcg, evaluate_memcg_ksm_stat, &ksm_stat); + seq_printf(m, "ksm_rmap_items %lu\n", ksm_stat.ksm_rmap_items); + + return 0; +} +#endif + static const unsigned int memcg1_stats[] =3D { NR_FILE_PAGES, NR_ANON_MAPPED, @@ -2079,6 +2113,12 @@ struct cftype mem_cgroup_legacy_files[] =3D { .name =3D "numa_stat", .seq_show =3D memcg_numa_stat_show, }, +#endif +#ifdef CONFIG_KSM + { + .name =3D "ksm_stat", + .seq_show =3D memcg_ksm_stat_show, + }, #endif { .name =3D "kmem.limit_in_bytes", --=20 2.15.2 From nobody Mon Feb 9 04:22:30 2026 Received: from mxct.zte.com.cn (mxct.zte.com.cn [183.62.165.209]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9888E199EB0; Thu, 3 Apr 2025 05:37:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=183.62.165.209 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743658631; cv=none; b=ZGHpQhhbchigf9UGr9qZed+Fy3O1W8Bd2wxb7WvY03cuIrgBPhB9T/P0hdoeWIhqh5UUkNiP6uJFchciGcHnoFxcrMC6nDyUFLOPQjSeANIOwv0OHc14oggUKZf/P/HU1U5LuzWENxiy6lYZgMrMT+C0a86ENDipP3ZBlNeXtlo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743658631; c=relaxed/simple; bh=DkPMlsDZjv5DSrQnUXpSBl1a/+EgHtPiqSIFYHVCbtE=; h=Date:Message-ID:In-Reply-To:References:Mime-Version:From:To:Cc: Subject:Content-Type; b=aBGCZvLE2n06/upiPdjDG+jM0YwYg+gNGIPNQ52bPrOIaIL2t9bVh2v6Ib5JZVPGDHuZMOhCO+EabRvBDAInWu65p9MGBHxaa+sWOztuA8Xwvy+3fH9kYu38MbbOesuvpjpYuD619eyP7HILQkDhBB9XQOmRkOCDktRroW7O0Sc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zte.com.cn; spf=pass smtp.mailfrom=zte.com.cn; arc=none smtp.client-ip=183.62.165.209 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zte.com.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=zte.com.cn Received: from mse-fl2.zte.com.cn (unknown [10.5.228.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mxct.zte.com.cn (FangMail) with ESMTPS id 4ZSr8c1tDPz51SY9; Thu, 3 Apr 2025 13:37:04 +0800 (CST) Received: from xaxapp04.zte.com.cn ([10.99.98.157]) by mse-fl2.zte.com.cn with SMTP id 5335ax06016459; Thu, 3 Apr 2025 13:36:59 +0800 (+08) (envelope-from xu.xin16@zte.com.cn) Received: from mapi (xaxapp01[null]) by mapi (Zmail) with MAPI id mid32; Thu, 3 Apr 2025 13:37:00 +0800 (CST) Date: Thu, 3 Apr 2025 13:37:00 +0800 (CST) X-Zmail-TransId: 2af967ee1e7cffffffffe9c-7733f X-Mailer: Zmail v1.0 Message-ID: <20250403133700772Rm5te7Iuqsi7ZGMGpFlok@zte.com.cn> In-Reply-To: <20250403132534636XLwK7CWiCj1J4-FENz0vk@zte.com.cn> References: 20250403132534636XLwK7CWiCj1J4-FENz0vk@zte.com.cn Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 From: To: , Cc: , , , , , , , , , , Subject: =?UTF-8?B?W1BBVENIIGxpbnV4LW5leHQgNC82XSBtZW1jb250cm9sLXYxOiBhZGQga3NtX3plcm9fcGFnZXMgaW4KCiBjZ3JvdXAvbWVtb3J5LmtzbV9zdGF0?= X-MAIL: mse-fl2.zte.com.cn 5335ax06016459 X-Fangmail-Anti-Spam-Filtered: true X-Fangmail-MID-QID: 67EE1E80.002/4ZSr8c1tDPz51SY9 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: xu xin Users can obtain ksm_zero_pages of a cgroup just by: / # cat /sys/fs/cgroup/memory.ksm_stat ksm_rmap_items 76800 ksm_zero_pages 0 Current implementation supports cgroup v1 temporarily; cgroup v2 compatibility is planned for future versions. Signed-off-by: xu xin --- mm/memcontrol-v1.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/mm/memcontrol-v1.c b/mm/memcontrol-v1.c index 95da877d5516..a6eea1deebff 100644 --- a/mm/memcontrol-v1.c +++ b/mm/memcontrol-v1.c @@ -11,6 +11,7 @@ #include #include #include +#include #include "internal.h" #include "swap.h" @@ -1824,6 +1825,7 @@ static int memcg_numa_stat_show(struct seq_file *m, v= oid *v) #ifdef CONFIG_KSM struct memcg_ksm_stat { unsigned long ksm_rmap_items; + long ksm_zero_pages; }; static int evaluate_memcg_ksm_stat(struct task_struct *task, void *arg) @@ -1834,6 +1836,7 @@ static int evaluate_memcg_ksm_stat(struct task_struct= *task, void *arg) mm =3D get_task_mm(task); if (mm) { ksm_stat->ksm_rmap_items +=3D mm->ksm_rmap_items; + ksm_stat->ksm_zero_pages +=3D mm_ksm_zero_pages(mm); mmput(mm); } @@ -1847,9 +1850,13 @@ static int memcg_ksm_stat_show(struct seq_file *m, v= oid *v) /* Initialization */ ksm_stat.ksm_rmap_items =3D 0; + ksm_stat.ksm_zero_pages =3D 0; + /* summing all processes'ksm statistic items of this cgroup hierarchy */ mem_cgroup_scan_tasks(memcg, evaluate_memcg_ksm_stat, &ksm_stat); + seq_printf(m, "ksm_rmap_items %lu\n", ksm_stat.ksm_rmap_items); + seq_printf(m, "ksm_zero_pages %ld\n", ksm_stat.ksm_zero_pages); return 0; } --=20 2.15.2 From nobody Mon Feb 9 04:22:30 2026 Received: from mxct.zte.com.cn (mxct.zte.com.cn [183.62.165.209]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D3748199EB0; Thu, 3 Apr 2025 05:38:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=183.62.165.209 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743658722; cv=none; b=FzvQ0RXHs/VJOGA/XNv4z9xL9l0axMipf0KCT6VwFzGbdA3ZEcU5J9jXSVO8EcyaT3qguRxmWp3wHMGE2q1XaerWrOqOnv1rZMD1TIQIY2FbRB79ALzZtikmTBAYzBf0z9xCSQiq+v6liG10JtkcdYDXerNA6ExZ+mZ1KhYdCdA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743658722; c=relaxed/simple; bh=zi8NXk3p42tO/Q7Q7pLyw/dDYNobmqL2jNxPxFyODRc=; h=Date:Message-ID:In-Reply-To:References:Mime-Version:From:To:Cc: Subject:Content-Type; b=aSokeQImeezXwczY8jkCxU5jEGC4w12FwswsseVtxl/0/iKnFQd/AR6cJqpRewxJ90pVHDcsnV9qVkzgYoytYhce29tuMdO3dAydrZ4yRwh9BVPLAoOH4d1YtXFW1TEDsriTiIIIq4j5jGH9tv83roThA9FC1IoUuQgC4R5f8uE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zte.com.cn; spf=pass smtp.mailfrom=zte.com.cn; arc=none smtp.client-ip=183.62.165.209 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zte.com.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=zte.com.cn Received: from mse-fl2.zte.com.cn (unknown [10.5.228.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mxct.zte.com.cn (FangMail) with ESMTPS id 4ZSrBN0RWlz51SY9; Thu, 3 Apr 2025 13:38:36 +0800 (CST) Received: from xaxapp04.zte.com.cn ([10.99.98.157]) by mse-fl2.zte.com.cn with SMTP id 5335cWOB017140; Thu, 3 Apr 2025 13:38:32 +0800 (+08) (envelope-from xu.xin16@zte.com.cn) Received: from mapi (xaxapp04[null]) by mapi (Zmail) with MAPI id mid32; Thu, 3 Apr 2025 13:38:34 +0800 (CST) Date: Thu, 3 Apr 2025 13:38:34 +0800 (CST) X-Zmail-TransId: 2afb67ee1eda53d-6e9e8 X-Mailer: Zmail v1.0 Message-ID: <20250403133834135T-0RJg5_VxJfmzN3dG3bE@zte.com.cn> In-Reply-To: <20250403132534636XLwK7CWiCj1J4-FENz0vk@zte.com.cn> References: 20250403132534636XLwK7CWiCj1J4-FENz0vk@zte.com.cn Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 From: To: , Cc: , , , , , , , , , Subject: =?UTF-8?B?W1BBVENIIGxpbnV4LW5leHQgNS82XSBtZW1jb250cm9sLXYxOiBhZGQga3NtX21lcmdpbmdfcGFnZXMgaW4gY2dyb3VwL21lbW9yeS5rc21fc3RhdA==?= X-MAIL: mse-fl2.zte.com.cn 5335cWOB017140 X-Fangmail-Anti-Spam-Filtered: true X-Fangmail-MID-QID: 67EE1EDC.000/4ZSrBN0RWlz51SY9 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: xu xin Users can obtain ksm_merging_pages of a cgroup just by: / # cat /sys/fs/cgroup/memory.ksm_stat ksm_rmap_items 76800 ksm_zero_pages 0 ksm_merging_pages 1092 Current implementation supports cgroup v1 temporarily; cgroup v2 compatibility is planned for future versions. Signed-off-by: xu xin --- mm/memcontrol-v1.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mm/memcontrol-v1.c b/mm/memcontrol-v1.c index a6eea1deebff..b52f728af963 100644 --- a/mm/memcontrol-v1.c +++ b/mm/memcontrol-v1.c @@ -1826,6 +1826,7 @@ static int memcg_numa_stat_show(struct seq_file *m, v= oid *v) struct memcg_ksm_stat { unsigned long ksm_rmap_items; long ksm_zero_pages; + unsigned long ksm_merging_pages; }; static int evaluate_memcg_ksm_stat(struct task_struct *task, void *arg) @@ -1837,6 +1838,7 @@ static int evaluate_memcg_ksm_stat(struct task_struct= *task, void *arg) if (mm) { ksm_stat->ksm_rmap_items +=3D mm->ksm_rmap_items; ksm_stat->ksm_zero_pages +=3D mm_ksm_zero_pages(mm); + ksm_stat->ksm_merging_pages +=3D mm->ksm_merging_pages; mmput(mm); } @@ -1851,12 +1853,14 @@ static int memcg_ksm_stat_show(struct seq_file *m, = void *v) /* Initialization */ ksm_stat.ksm_rmap_items =3D 0; ksm_stat.ksm_zero_pages =3D 0; + ksm_stat.ksm_merging_pages =3D 0; /* summing all processes'ksm statistic items of this cgroup hierarchy */ mem_cgroup_scan_tasks(memcg, evaluate_memcg_ksm_stat, &ksm_stat); seq_printf(m, "ksm_rmap_items %lu\n", ksm_stat.ksm_rmap_items); seq_printf(m, "ksm_zero_pages %ld\n", ksm_stat.ksm_zero_pages); + seq_printf(m, "ksm_merging_pages %ld\n", ksm_stat.ksm_merging_pages); return 0; } --=20 2.15.2 From nobody Mon Feb 9 04:22:30 2026 Received: from mxct.zte.com.cn (mxct.zte.com.cn [183.62.165.209]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B5614199EB0; Thu, 3 Apr 2025 05:40:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=183.62.165.209 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743658820; cv=none; b=Ao08miL5iTfimqm8BglCFmx+yxknCXNZE7t1BAQ4nIQPHHcyAKLfkkOMH5dGxk0SX1q/qsY5tegHFxqOUs8LA80Bx5dQtCKBpp9Ji/3MlrRui/7f1PVTeI8W13yfGxQ04pLY+042/kg82X8upOICqeycq4ahUULJnUHuREUzJPE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1743658820; c=relaxed/simple; bh=/tTUnVNOyLZuLB9VxUf703I3JwCpIFx3QDmRbmt33Lw=; h=Date:Message-ID:In-Reply-To:References:Mime-Version:From:To:Cc: Subject:Content-Type; b=eH+MwMkwm2qvH28+TM/eTO/P69yjrXK76pxMnY5QDKZhlteAnfJMe2q480IyCbniba/jzqljAvWKA+uWDYZZF3aMSSRvqJV+t5K41/NXWwB+pt0NidjYL4WKXtD5hgEWvK4xG6kbRhphnm8tf2TxpDKSFQBGEaXJI1bZhYWCSgA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zte.com.cn; spf=pass smtp.mailfrom=zte.com.cn; arc=none smtp.client-ip=183.62.165.209 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=zte.com.cn Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=zte.com.cn Received: from mse-fl1.zte.com.cn (unknown [10.5.228.132]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mxct.zte.com.cn (FangMail) with ESMTPS id 4ZSrDD759fz4x6DN; Thu, 3 Apr 2025 13:40:12 +0800 (CST) Received: from xaxapp05.zte.com.cn ([10.99.98.109]) by mse-fl1.zte.com.cn with SMTP id 5335eBrW047456; Thu, 3 Apr 2025 13:40:11 +0800 (+08) (envelope-from xu.xin16@zte.com.cn) Received: from mapi (xaxapp05[null]) by mapi (Zmail) with MAPI id mid32; Thu, 3 Apr 2025 13:40:13 +0800 (CST) Date: Thu, 3 Apr 2025 13:40:13 +0800 (CST) X-Zmail-TransId: 2afc67ee1f3dffffffffce3-75188 X-Mailer: Zmail v1.0 Message-ID: <20250403134013749X6VVdhQope3TRpBQF_qia@zte.com.cn> In-Reply-To: <20250403132534636XLwK7CWiCj1J4-FENz0vk@zte.com.cn> References: 20250403132534636XLwK7CWiCj1J4-FENz0vk@zte.com.cn Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 From: To: , Cc: , , , , , , , , , , Subject: =?UTF-8?B?W1BBVENIIGxpbnV4LW5leHQgNi82XSBtZW1jb250cm9sLXYxOiBhZGQga3NtX3Byb2ZpdCBpbiBjZ3JvdXAvbWVtb3J5LmtzbV9zdGF0?= X-MAIL: mse-fl1.zte.com.cn 5335eBrW047456 X-Fangmail-Anti-Spam-Filtered: true X-Fangmail-MID-QID: 67EE1F3C.00C/4ZSrDD759fz4x6DN Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: xu xin Users can obtain ksm_profit of a cgroup just by: / # cat /sys/fs/cgroup/memory.ksm_stat ksm_rmap_items 76800 ksm_zero_pages 0 ksm_merging_pages 76800 ksm_profit 309657600 Current implementation supports cgroup v1 temporarily; cgroup v2 compatibility is planned for future versions. Signed-off-by: xu xin --- mm/memcontrol-v1.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mm/memcontrol-v1.c b/mm/memcontrol-v1.c index b52f728af963..3e7a653e3df1 100644 --- a/mm/memcontrol-v1.c +++ b/mm/memcontrol-v1.c @@ -1827,6 +1827,7 @@ struct memcg_ksm_stat { unsigned long ksm_rmap_items; long ksm_zero_pages; unsigned long ksm_merging_pages; + long ksm_profit; }; static int evaluate_memcg_ksm_stat(struct task_struct *task, void *arg) @@ -1839,6 +1840,7 @@ static int evaluate_memcg_ksm_stat(struct task_struct= *task, void *arg) ksm_stat->ksm_rmap_items +=3D mm->ksm_rmap_items; ksm_stat->ksm_zero_pages +=3D mm_ksm_zero_pages(mm); ksm_stat->ksm_merging_pages +=3D mm->ksm_merging_pages; + ksm_stat->ksm_profit +=3D ksm_process_profit(mm); mmput(mm); } @@ -1854,6 +1856,7 @@ static int memcg_ksm_stat_show(struct seq_file *m, vo= id *v) ksm_stat.ksm_rmap_items =3D 0; ksm_stat.ksm_zero_pages =3D 0; ksm_stat.ksm_merging_pages =3D 0; + ksm_stat.ksm_profit =3D 0; /* summing all processes'ksm statistic items of this cgroup hierarchy */ mem_cgroup_scan_tasks(memcg, evaluate_memcg_ksm_stat, &ksm_stat); @@ -1861,6 +1864,7 @@ static int memcg_ksm_stat_show(struct seq_file *m, vo= id *v) seq_printf(m, "ksm_rmap_items %lu\n", ksm_stat.ksm_rmap_items); seq_printf(m, "ksm_zero_pages %ld\n", ksm_stat.ksm_zero_pages); seq_printf(m, "ksm_merging_pages %ld\n", ksm_stat.ksm_merging_pages); + seq_printf(m, "ksm_profit %ld\n", ksm_stat.ksm_profit); return 0; } --=20 2.15.2