From patchwork Thu Apr 3 05:31:58 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: xu.xin16@zte.com.cn X-Patchwork-Id: 14036751 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 1BDA3C3600C for ; Thu, 3 Apr 2025 05:32:07 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3E957280003; Thu, 3 Apr 2025 01:32:05 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 371B8280001; Thu, 3 Apr 2025 01:32:05 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 238ED280003; Thu, 3 Apr 2025 01:32:05 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 03EF6280001 for ; Thu, 3 Apr 2025 01:32:04 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 20A12161653 for ; Thu, 3 Apr 2025 05:32:06 +0000 (UTC) X-FDA: 83291611452.14.C1C6BAE Received: from mxhk.zte.com.cn (mxhk.zte.com.cn [63.216.63.40]) by imf16.hostedemail.com (Postfix) with ESMTP id 5B2B6180008 for ; Thu, 3 Apr 2025 05:32:02 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=zte.com.cn; spf=pass (imf16.hostedemail.com: domain of xu.xin16@zte.com.cn designates 63.216.63.40 as permitted sender) smtp.mailfrom=xu.xin16@zte.com.cn ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1743658324; 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-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=7kJZKf3efQtFVysux4lt3MYTvBaqKqAQYFQlsRiUDxo=; b=6+cMNWxDzNXcjx7Vm5AvSGv8g4XztSP89cEcT4X529QtTMVtCCpcZ83d5zSsn80QVg28xx a8Ze7VrDadB8NcG7HJtw4w/BD2AlSdwIYqdrBhQEOEosNmodn6Zl/+HBuZy3cHA7imciUg Ys1hvUMw6mzqmRVGOQhzgPMhNGpAtTg= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=zte.com.cn; spf=pass (imf16.hostedemail.com: domain of xu.xin16@zte.com.cn designates 63.216.63.40 as permitted sender) smtp.mailfrom=xu.xin16@zte.com.cn ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1743658324; a=rsa-sha256; cv=none; b=cRVIgocP9g2ton0DX9gslFVOaove5AGmgRco+k6QrSq3/3pq3vpiD2Q2rhN6EElRViGNKO ZkhXObwdvNW1pDKre15Zcc0So6Wy644CX6NgNGM9nd72HJ3BP+JCebCTy20Q2qKORO4gdj MKbUzx1xMfh1YlAGLp++wL+CaCK9fzA= 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 Mime-Version: 1.0 From: To: , Cc: , , , , , , , , , , Subject: =?utf-8?q?=5BPATCH_linux-next_3/6=5D_memcontrol-v1=3A_introduce_ksm?= =?utf-8?q?=5Fstat_at_cgroup?= =?utf-8?q?_?= =?utf-8?q?_level?= X-MAIL: mse-fl1.zte.com.cn 5335Vu70043767 X-Fangmail-Anti-Spam-Filtered: true X-Fangmail-MID-QID: 67EE1D4D.000/4ZSr2j21sXz8R042 X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 5B2B6180008 X-Stat-Signature: 53dqupu6dd4i4mg4heiurb8wacchocsg X-HE-Tag: 1743658322-34635 X-HE-Meta: U2FsdGVkX1/eiW53eO5vWnMl+yH92qk7jR8bAN4Rg+tnSaEZxd9qBFY5kWcvhBt2jar8S3MIO121zixu2kKEEyl3UdnMH2DI8dSu5j/pPMVHHKYHTlIUy2amNWVHz1cQ/TUHLEBNkkq7QQZXGen/cywI990+l80gc7qvOrk+UuxBF4aI0G7EIl5IeL1lXQjlRdwN3fHz/bxhdTCNnP0p7jWDa4zUvsnh+x/wgufUmOW8niNCTiC5e6mP46YlL/XPUm1uQ1ZG2LH/q33Y6KWPHGNLJTeZe9xFJ7cKAoLCO1kDWgl6TgSZ0lWuwb4CS+8Fdy8vp2DaSQBaEhSIlwA0H3sniHknCpXNaZRg5IiYAN7HPJOXbWj7NlpUKmjXEztYhLsHdP9tMF9MVLvA8NRQ24fp8JLdXjZ/6vPkwo58bPmcDbvJoX03PEfryQzwmO1L4R42QvN+NkaWFlctqLCQUItCHHUaIk5zdUsM4cXFNNT+DS5A4zKXDplb8gNGWZsJIEBYa8bbcipi3G9PKA5fw1xDg7ogpAehyCF260JeAuqnmXoglzXPzCuBld4Z3lG1WsTeabxQMebbFt/3ELg56wuT1FM/GfOyvvuUbUqfIsXWguV/nB8j9q9Gc9OEmiZF5w32ixco1JS5AKbr1L5UyRsnel8Fgwf9FK9FEaYroyMPkPxfYSJ9vsD9cTVHL+V+bDtpTZ1Q/tNzBBcRsSo4VYdwu9DzLiI0doJpHYh3N+jhl152lggTlAr3gwlhSBKya3VmuyjJq5VHXdV9rKjvGFwVybLQFpwuTcwd9L30/iPkjY5eNiQQryxheLPsxAIsvUnuzKX63TsvGzbDLpwP+6UYG6RMLETja4JPpVVey4hi5zjlO9pVysi4yfuWeGCiEn67ijf29Lv/zw7sQJ9BXvvlJ5oYjLhi05VoizUUKAM6msOQ8QHhRPh4KmJiFTBme8nanS3F2L8ZM0QuNuf NmL2w6zw VsOwCUoRibXU6Vt85k1ZKoKnxb9xcWqAUfjSEf0xCZ09Yv9BP5sgcowAd73rbkKWrYL4JLwKBulhGSGdz5RPbGCH8o1AKJ0LWdmwxMRF4cX9lyOTb52myGKlHF5Zy8YxMYGonMA+OxG6Zwevg2/Q15IkA/8WpSXGh6O+r94wOjEGUCiPjWSC0o1sVG+TezFfGvVo38vRIAy4OcRP+OLO2PfuiwyyLPXCY3tlZFBTTQ8P7pfEIg4StOfTR7y3WsRo1F4gO+bKY0pZkjTo= 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: 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 = arg; + + mm = get_task_mm(task); + if (mm) { + ksm_stat->ksm_rmap_items += 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 = mem_cgroup_from_seq(m); + + /* Initialization */ + ksm_stat.ksm_rmap_items = 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[] = { NR_FILE_PAGES, NR_ANON_MAPPED, @@ -2079,6 +2113,12 @@ struct cftype mem_cgroup_legacy_files[] = { .name = "numa_stat", .seq_show = memcg_numa_stat_show, }, +#endif +#ifdef CONFIG_KSM + { + .name = "ksm_stat", + .seq_show = memcg_ksm_stat_show, + }, #endif { .name = "kmem.limit_in_bytes",