From patchwork Fri Dec 30 01:16:29 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yang Yang X-Patchwork-Id: 13083999 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 D36F2C3DA7D for ; Fri, 30 Dec 2022 01:16:39 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5359A8E0003; Thu, 29 Dec 2022 20:16:39 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 4E5788E0001; Thu, 29 Dec 2022 20:16:39 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3D4378E0003; Thu, 29 Dec 2022 20:16:39 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 2DE3F8E0001 for ; Thu, 29 Dec 2022 20:16:39 -0500 (EST) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id D66AD1A0134 for ; Fri, 30 Dec 2022 01:16:38 +0000 (UTC) X-FDA: 80297207676.06.4C36C72 Received: from mxct.zte.com.cn (mxct.zte.com.cn [183.62.165.209]) by imf09.hostedemail.com (Postfix) with ESMTP id 3AA60140008 for ; Fri, 30 Dec 2022 01:16:35 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=zte.com.cn; spf=pass (imf09.hostedemail.com: domain of yang.yang29@zte.com.cn designates 183.62.165.209 as permitted sender) smtp.mailfrom=yang.yang29@zte.com.cn ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1672362997; 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: references; bh=lcOvOXzlofwtDdJWJO/YaawEgINJw6332MG6HHQ7ykY=; b=tiMGz+GNBK2GWVTsnNyjTtrJjso+qtHH3rlB/3ctTG594QWOhWjyS36hbIIpOklNu8SxZe P4Sfcd9K16howCdxXV1uGzQDApugPNa4yoyG0wCmX49Uqqno6ZjYOaILiWf7sr/MxNs8fu 0e4yFfVfh2QQa//HGuuk7t0++UGcMlE= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=zte.com.cn; spf=pass (imf09.hostedemail.com: domain of yang.yang29@zte.com.cn designates 183.62.165.209 as permitted sender) smtp.mailfrom=yang.yang29@zte.com.cn ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1672362997; a=rsa-sha256; cv=none; b=LCEnA18Ib0IcyMr7cP2uT8OXy1XxIFQTYlHDi5CPHPfwS/ffWzzPt6aOC+/jWqoJWBs38I SP/0j3C1LTi5MmjlwkoHr7YnpzrUUI1f5SKFDVKI0afQ64J6c4aEX4gIrmsmUlscgrOkc2 PIUrfTJKwCy+3wMyE+fs94iqytG3gEc= 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 4NjnQn2W1mz501Qh; Fri, 30 Dec 2022 09:16:33 +0800 (CST) Received: from szxlzmapp06.zte.com.cn ([10.5.230.252]) by mse-fl1.zte.com.cn with SMTP id 2BU1GSAF084154; Fri, 30 Dec 2022 09:16:28 +0800 (+08) (envelope-from yang.yang29@zte.com.cn) Received: from mapi (szxlzmapp01[null]) by mapi (Zmail) with MAPI id mid14; Fri, 30 Dec 2022 09:16:29 +0800 (CST) Date: Fri, 30 Dec 2022 09:16:29 +0800 (CST) X-Zmail-TransId: 2b0363ae3bed7a8bf824 X-Mailer: Zmail v1.0 Message-ID: <202212300916292181912@zte.com.cn> Mime-Version: 1.0 From: To: Cc: , , , , , , , , Subject: =?utf-8?q?=5BPATCH_v5_4/6=5D_ksm=3A_count_zero_pages_for_each_proce?= =?utf-8?q?ss?= X-MAIL: mse-fl1.zte.com.cn 2BU1GSAF084154 X-Fangmail-Gw-Spam-Type: 0 X-FangMail-Miltered: at cgslv5.04-192.168.251.13.novalocal with ID 63AE3BF1.000 by FangMail milter! X-FangMail-Envelope: 1672362993/4NjnQn2W1mz501Qh/63AE3BF1.000/10.5.228.132/[10.5.228.132]/mse-fl1.zte.com.cn/ X-Fangmail-Anti-Spam-Filtered: true X-Fangmail-MID-QID: 63AE3BF1.000/4NjnQn2W1mz501Qh X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 3AA60140008 X-Stat-Signature: p6dimp46n1uaumjdbif6ih64jk1ecchp X-Rspam-User: X-HE-Tag: 1672362995-3811 X-HE-Meta: U2FsdGVkX19yhcoZo8gn6Zd3Ld0bwkCAZ/lgcrUw7ZHayMt3uP4A6+zKgifurT9ygqhOE9KeN8tNDvwxjRFAMdNA7GL+3L/uKdw9N6B4fSODstcHdEjzE+23YSF9KaPgL9EL4850QBMCV8J9D67GDD4yTIYFNAZkvpigPIZ14kBKMzMGzFpZwO2RNTCb3M2sdIK7g/eZLCM2Tra4VvjRu3t+WWbX7/NIB6bCS6G936KwrX1ls1fdThpv06K02zvhP9l2w2MbG70UkoeTOX528XOCRtQ/2Fv+gN5WwuytbAIl+1yjze1pmnCm4o+/kLR+VplCSqgDkvOXd7vPFKd0pSlHznP9AkU7KmnWk0kbdJwGgsX6bmaRVmSAMiFDYUujWK++Hm7Ht4yCEuSUemOdnKTrx1fgz+axjHbXgDKqhDhZ90SGP78NuJxIo1vwmrY8Jox2qMUXpSBXJNneXqf+wuOAhE6J2HOhzZwXoUlPol/0jE6STnLRrWlDnAU891LuE8B4dveg2erv52quzBqoLKFMMpwC5dOaCAVJHa/kh8zhIU93WWtR8DHl5AA0+cBD3FbomN1A/MP/NoWahq5ApV8rH9F0fz18yZUhewSL9Qt4bhGo+c2wokRkV1GR5/UOTp7BLKVQKDN4YXwCoDsonBdbzHOfDyCBTGt5g9OyfRD7ydlwucxDrJEmqxFYQpyXsi/XBytRwaoLWnCQ/yRPZy6dRMugcoO4RV+UGeduSLvSoenrdIUKbu+Ex4/yZ4z88mMRZEmNhayny3rGzzhKN2iTlGdxrRPVzZHchdXhDtTjsAekdmvxagR/Dh276VmkMX+jWWCIDoDdMuixBi7x5spVJ1h6AzbLnrmiyPvhv/3yqTYLWVro+r4dLQAxxvCHMbbmAiQd32tFCw9UV616k2rKCrbJ1tLf2jcDDiVm+Po= 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: From: xu xin As the number of ksm zero pages is not included in ksm_merging_pages per process when enabling use_zero_pages, it's unclear of how many actual pages are merged by KSM. To let users accurately estimate their memory demands when unsharing KSM zero-pages, it's necessary to show KSM zero- pages per process. since unsharing zero pages placed by KSM accurately is achieved, then tracking empty pages merging and unmerging is not a difficult thing any longer. Since we already have /proc//ksm_stat, just add the information of zero_pages_sharing in it. Cc: Claudio Imbrenda Cc: David Hildenbrand Cc: Xuexin Jiang Cc: Xiaokai Ran Cc: Yang Yang Signed-off-by: xu xin --- fs/proc/base.c | 1 + include/linux/mm_types.h | 7 ++++++- mm/ksm.c | 2 ++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/fs/proc/base.c b/fs/proc/base.c index 9e479d7d202b..ac9ebe972be0 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c @@ -3207,6 +3207,7 @@ static int proc_pid_ksm_stat(struct seq_file *m, struct pid_namespace *ns, mm = get_task_mm(task); if (mm) { seq_printf(m, "ksm_rmap_items %lu\n", mm->ksm_rmap_items); + seq_printf(m, "zero_pages_sharing %lu\n", mm->ksm_zero_pages_sharing); mmput(mm); } diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h index 4e1031626403..5c734ebc1890 100644 --- a/include/linux/mm_types.h +++ b/include/linux/mm_types.h @@ -776,7 +776,7 @@ struct mm_struct { #ifdef CONFIG_KSM /* * Represent how many pages of this process are involved in KSM - * merging. + * merging (not including ksm_zero_pages_sharing). */ unsigned long ksm_merging_pages; /* @@ -784,6 +784,11 @@ struct mm_struct { * including merged and not merged. */ unsigned long ksm_rmap_items; + /* + * Represent how many empty pages are merged with kernel zero + * pages when enabling KSM use_zero_pages. + */ + unsigned long ksm_zero_pages_sharing; #endif #ifdef CONFIG_LRU_GEN struct { diff --git a/mm/ksm.c b/mm/ksm.c index 72c0722be280..083f5d125373 100644 --- a/mm/ksm.c +++ b/mm/ksm.c @@ -794,6 +794,7 @@ static inline void clean_rmap_item_zero_flag(struct ksm_rmap_item *rmap_item) { if (rmap_item->address & ZERO_PAGE_FLAG) { ksm_zero_pages_sharing--; + rmap_item->mm->ksm_zero_pages_sharing--; rmap_item->address &= PAGE_MASK; } } @@ -2117,6 +2118,7 @@ static int try_to_merge_with_kernel_zero_page(struct ksm_rmap_item *rmap_item, if (!err) { rmap_item->address |= ZERO_PAGE_FLAG; ksm_zero_pages_sharing++; + rmap_item->mm->ksm_zero_pages_sharing++; } } else { /* If the vma is out of date, we do not need to continue. */