Received: by 2002:a05:6358:16cc:b0:ea:6187:17c9 with SMTP id r12csp1277082rwl; Sun, 25 Dec 2022 18:39:26 -0800 (PST) X-Google-Smtp-Source: AMrXdXssVHiJEWuZiSaI/4mUloaCVb0P5kOxA4mC/CXj/CV9IO2BsLH13P4JORKQ8bW1npEtLZRQ X-Received: by 2002:a17:906:3943:b0:7c1:52a:e903 with SMTP id g3-20020a170906394300b007c1052ae903mr18561393eje.55.1672022366264; Sun, 25 Dec 2022 18:39:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1672022366; cv=none; d=google.com; s=arc-20160816; b=vJJuozFl62RLOIk+UscPTNrY2yiHrWLu/yjtr0YUYMFU0rD59hdIslBjmafPf1nnqU DGAnn5A240SPqld8tkxBnwlrFT7+OqcU7gVMvCRcr51pUmaFCZ9L0Lk1hVs5c4ihQn38 yoFwOG8ROjNtzqB0UNDfl9qbvsLmjNxdFaH5qKjVR4uXgrct5pIV991I6X+MT5sqlsoa f330biYFLlfLyGfpEsbrQlOF8Htt0yeaegmKGd74oh0qzoDDeXBjXukHdf7/KGMdS9ZO KBU00Hv5aSYuUX90w+4XtKiFtRRVtSs6CthHqFVAeVV53AWl9z9KSles0MisDYvAgyF8 wtvA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:subject:cc:to:from:mime-version:message-id:date; bh=wRIA3TrXg9egaMK2KPz6cqTPlPcBq1r9kqhHaA9mhqI=; b=BHMJDVV3vCnmIWhpXG3ZNpphWQjQ+MJdnf1VNs0RM5nzTCpU5qgGx1cFEGFKD8TAhf IHRfO1Hw1yPELEGXaUKID2XdBzlUBpPFrU2a9HzP8gCbbv6XFboYFQyXOun5kOvHZTkB JFjlvWsCyqdIhLLFFTkuude2R2s4fO7uYl70eyJUAi+4jkoBL9jUdetorqr5SJKhxL6E D1nW5638ZNRrhcsz/83qAUvhw88yP46/DhQAx7tUsk9tvm4xbyl4JsQI/6jGBZMtgCpU pLo2MsmTu8DqC3AdcndsUQFwMddLG3OpdlA/vxglw3SGoRhJusPMwgT5g44iMGPHAOBl Scmg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=zte.com.cn Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id xh7-20020a170906da8700b0084c45d8a681si2735003ejb.39.2022.12.25.18.39.11; Sun, 25 Dec 2022 18:39:26 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=zte.com.cn Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231468AbiLZCAC (ORCPT + 67 others); Sun, 25 Dec 2022 21:00:02 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60406 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229560AbiLZCAB (ORCPT ); Sun, 25 Dec 2022 21:00:01 -0500 Received: from mxhk.zte.com.cn (mxhk.zte.com.cn [63.216.63.40]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CBD1F2DD5 for ; Sun, 25 Dec 2022 17:59:58 -0800 (PST) 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 4NgLZd1yvRz8QrkZ; Mon, 26 Dec 2022 09:59:53 +0800 (CST) Received: from szxlzmapp03.zte.com.cn ([10.5.231.207]) by mse-fl1.zte.com.cn with SMTP id 2BQ1xmFw050306; Mon, 26 Dec 2022 09:59:48 +0800 (+08) (envelope-from yang.yang29@zte.com.cn) Received: from mapi (szxlzmapp01[null]) by mapi (Zmail) with MAPI id mid14; Mon, 26 Dec 2022 09:59:49 +0800 (CST) Date: Mon, 26 Dec 2022 09:59:49 +0800 (CST) X-Zmail-TransId: 2b0363a9001558a5e838 X-Mailer: Zmail v1.0 Message-ID: <202212260959492929897@zte.com.cn> Mime-Version: 1.0 From: To: Cc: , , , , , , , , Subject: =?UTF-8?B?W1BBVENIIHY0IDAvNl0ga3NtOiBzdXBwb3J0IHRyYWNraW5nIEtTTS1wbGFjZWQgemVyby1wYWdlcw==?= Content-Type: text/plain; charset="UTF-8" X-MAIL: mse-fl1.zte.com.cn 2BQ1xmFw050306 X-Fangmail-Gw-Spam-Type: 0 X-FangMail-Miltered: at cgslv5.04-192.168.250.137.novalocal with ID 63A90019.000 by FangMail milter! X-FangMail-Envelope: 1672019993/4NgLZd1yvRz8QrkZ/63A90019.000/10.5.228.132/[10.5.228.132]/mse-fl1.zte.com.cn/ X-Fangmail-Anti-Spam-Filtered: true X-Fangmail-MID-QID: 63A90019.000/4NgLZd1yvRz8QrkZ X-Spam-Status: No, score=0.6 required=5.0 tests=BAYES_00,RCVD_IN_MSPIKE_H2, SORTED_RECIPS,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: xu xin The core idea of this patch set is to enable users to perceive the number of any pages merged by KSM, regardless of whether use_zero_page switch has been turned on, so that users can know how much free memory increase is really due to their madvise(MERGEABLE) actions. But the problem is, when enabling use_zero_pages, all empty pages will be merged with kernel zero pages instead of with each other as use_zero_pages is disabled, and then these zero-pages are no longer monitored by KSM. The motivations for me to do this contains three points: 1) MADV_UNMERGEABLE and other ways to trigger unsharing will *not* unshare the shared zeropage as placed by KSM (which is against the MADV_UNMERGEABLE documentation at least); see the link: https://lore.kernel.org/lkml/4a3daba6-18f9-d252-697c-197f65578c44@redhat.com/ 2) We cannot know how many pages are zero pages placed by KSM when enabling use_zero_pages, which hides the critical information about how much actual memory are really saved by KSM. Knowing how many ksm-placed zero pages are helpful for user to use the policy of madvise (MERGEABLE) better because they can see the actual profit brought by KSM. 3) The zero pages placed-by KSM are different from those initial empty page (filled with zeros) which are never touched by applications. The former is active-merged by KSM while the later have never consume actual memory. use_zero_pages is useful, not only because of cache colouring as described in doc, but also because use_zero_pages can accelerate merging empty pages when there are plenty of empty pages (full of zeros) as the time of page-by-page comparisons (unstable_tree_search_insert) is saved. So we hope to implement the support for ksm zero page tracking without affecting the feature of use_zero_pages. Zero pages may be the most common merged pages in actual environment(not only VM but also including other application like containers). Enabling use_zero_pages in the environment with plenty of empty pages(full of zeros) will be very useful. Users and app developer can also benefit from knowing the proportion of zero pages in all merged pages to optimize applications. With the patch series, we can both unshare zero-pages(KSM-placed) accurately and count ksm zero pages with enabling use_zero_pages. --- v3->v4: 1) The patch series are readjusted to adapt to these recent changes of break_ksm() from David Hildenbrand's commits: https://lore.kernel.org/all/20221021101141.84170-9-david@redhat.com/T/#u 2) Some changes of patch itself: In [patch 2/6], add a check of mm exiting in unshare_zero_pages in case of unsharing the zero pages whose process is exiting; form a new function clean_rmap_item_zero_flag(), and add it after stable_tree_search() to fix; In [patch 3/6], all decreasing actions of zero pages count are put in clean_rmap_item_zero_flag(), which is more accurate. 3) Add a selftest of unsharing and counting ksm-placed zero pages. --- v2->v3: 1) Add more descriptive information in cover letter. 2) In [patch 2/5], add more commit log for explaining reasons. 3) In [patch 2/5], fix misuse of break_ksm() in unmerge_ksm_pages(): break_ksm(vma, addr, NULL) -> break_ksm(vma, addr, false); --- v1->v2: [patch 4/5] fix build warning, mm/ksm.c:550, misleading indentation; statement 'rmap_item->mm->ksm_zero_pages_sharing--;' is not part of the previous 'if'. *** BLURB HERE *** xu xin (6): ksm: abstract the function try_to_get_old_rmap_item Message-ID: <20221011022150.322212-1-xu.xin16@zte.com.cn> (raw) ksm: support unsharing zero pages placed by KSM ksm: count all zero pages placed by KSM ksm: count zero pages for each process ksm: add zero_pages_sharing documentation selftest: add testing unsharing and counting ksm zero pages Documentation/admin-guide/mm/ksm.rst | 7 + fs/proc/base.c | 1 + include/linux/mm_types.h | 7 +- mm/ksm.c | 187 +++++++++++++++++----- tools/testing/selftests/vm/ksm_functional_tests.c | 104 +++++++++++- 5 files changed, 264 insertions(+), 42 deletions(-) -- 2.15.2