From patchwork Wed Sep 27 16:22:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Roesch X-Patchwork-Id: 145472 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:cae8:0:b0:403:3b70:6f57 with SMTP id r8csp2764060vqu; Wed, 27 Sep 2023 09:56:08 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEGD7FDoZTqXSAVmI92o4L3Vez5oCRvbZ58Q9VpXnc8NqmaQOiyfvz+tUbvYav/XdCr4gO+ X-Received: by 2002:a17:90a:788e:b0:278:fbe3:a31f with SMTP id x14-20020a17090a788e00b00278fbe3a31fmr1862914pjk.37.1695833767841; Wed, 27 Sep 2023 09:56:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695833767; cv=none; d=google.com; s=arc-20160816; b=DQBYeD2l9rBiyAxpNzPHlxlgWXqIvAiWgz0FWY/byBBj0JOvdRyBjC/oQES6scpoh0 TFYKfbSebTK/vxgvo7J3Ux2hESxJpmHIUpj1DISTc6zRzcZ52UEGaUy1ywaZLAHf2aB1 E/tSJijVnPtD5fty0WIbqyxulccCcumdLYZNz26zBAIYgWP03uxSjQl8tKmPbGK9thhN 7AA6WA7Tq4JnCjdQkGO1wVqVdvJ5DtY/uFTaul9JMHsODuFwFCwGOP4+Mtbeg4zd4KKa DaO0Sw2xwWg2CrPDZoETytVfLUE6NKFRsIViWRNiecXaLLba7z85EZ+RSmeAzJWzxf24 fwmA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=ekjszAzCmJfqkUJ4plMMs/7OpHGzCtoSFSggNtD/+So=; fh=sS+J4OyOC0EcVLWJpS3mBHGeO+0+dYZJ+ImCUfzsrH4=; b=YGE3JCtlONU1i5+Zkio7OvQqpGFiNAe2T7FW+LumRCy22MTT1XCjramK3wRzCoZSK+ G2GxajMYneCTKQoZC2xX8dhlKzmxUHlgg64hg6rcF0stRpGWbQ7UCH6U8xHlOex7vYMu VaSzhMQ8wC54zTK6su+jwKKJhOkIBEiA+U1p/ZBWrTAtyGIBBLkm5pcqnVHb8uxtTJx7 BgCfm92zdy3HYKidNAruALt4/ocvPf1GS6/NsUASIcJJp+jJG4cgbSyiaBX50JhQqGE+ WpTJvM7pMjsGdmsZMGDMxydvDlzGBhYxKpAjqwTfmABcCNeFwNr2AKSnEKQx9kHY+Mnt x7wQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from pete.vger.email (pete.vger.email. [2620:137:e000::3:6]) by mx.google.com with ESMTPS id hk1-20020a17090b224100b0025bdaaf0d17si18255663pjb.33.2023.09.27.09.56.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Sep 2023 09:56:07 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) client-ip=2620:137:e000::3:6; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by pete.vger.email (Postfix) with ESMTP id DB73480859B9; Wed, 27 Sep 2023 09:23:10 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at pete.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231481AbjI0QWs (ORCPT + 19 others); Wed, 27 Sep 2023 12:22:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36564 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229901AbjI0QWr (ORCPT ); Wed, 27 Sep 2023 12:22:47 -0400 Received: from 66-220-144-179.mail-mxout.facebook.com (66-220-144-179.mail-mxout.facebook.com [66.220.144.179]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 94DA291 for ; Wed, 27 Sep 2023 09:22:45 -0700 (PDT) Received: by devbig1114.prn1.facebook.com (Postfix, from userid 425415) id 3B9BDCA4DC0F; Wed, 27 Sep 2023 09:22:32 -0700 (PDT) From: Stefan Roesch To: kernel-team@fb.com Cc: shr@devkernel.io, akpm@linux-foundation.org, david@redhat.com, hannes@cmpxchg.org, riel@surriel.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v4 1/4] mm/ksm: add "smart" page scanning mode Date: Wed, 27 Sep 2023 09:22:19 -0700 Message-Id: <20230927162222.3827551-2-shr@devkernel.io> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20230927162222.3827551-1-shr@devkernel.io> References: <20230927162222.3827551-1-shr@devkernel.io> MIME-Version: 1.0 X-Spam-Status: No, score=-0.8 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on pete.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (pete.vger.email [0.0.0.0]); Wed, 27 Sep 2023 09:23:10 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1778210588884716397 X-GMAIL-MSGID: 1778210588884716397 This change adds a "smart" page scanning mode for KSM. So far all the candidate pages are continuously scanned to find candidates for de-duplication. There are a considerably number of pages that cannot be de-duplicated. This is costly in terms of CPU. By using smart scanning considerable CPU savings can be achieved. This change takes the history of scanning pages into account and skips the page scanning of certain pages for a while if de-deduplication for this page has not been successful in the past. To do this it introduces two new fields in the ksm_rmap_item structure: age and remaining_skips. age, is the KSM age and remaining_skips determines how often scanning of this page is skipped. The age field is incremented each time the page is scanned and the page cannot be de- duplicated. age updated is capped at U8_MAX. How often a page is skipped is dependent how often de-duplication has been tried so far and the number of skips is currently limited to 8. This value has shown to be effective with different workloads. The feature is enabled by default and can be disabled with the new smart_scan knob. The feature has shown to be very effective: upt to 25% of the page scans can be eliminated; the pages_to_scan rate can be reduced by 40 - 50% and a similar de-duplication rate can be maintained. Signed-off-by: Stefan Roesch Reviewed-by: David Hildenbrand --- mm/ksm.c | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) diff --git a/mm/ksm.c b/mm/ksm.c index 981af9c72e7a..c0a2e7759365 100644 --- a/mm/ksm.c +++ b/mm/ksm.c @@ -56,6 +56,8 @@ #define DO_NUMA(x) do { } while (0) #endif +typedef u8 rmap_age_t; + /** * DOC: Overview * @@ -193,6 +195,8 @@ struct ksm_stable_node { * @node: rb node of this rmap_item in the unstable tree * @head: pointer to stable_node heading this list in the stable tree * @hlist: link into hlist of rmap_items hanging off that stable_node + * @age: number of scan iterations since creation + * @remaining_skips: how many scans to skip */ struct ksm_rmap_item { struct ksm_rmap_item *rmap_list; @@ -205,6 +209,8 @@ struct ksm_rmap_item { struct mm_struct *mm; unsigned long address; /* + low bits used for flags below */ unsigned int oldchecksum; /* when unstable */ + rmap_age_t age; + rmap_age_t remaining_skips; union { struct rb_node node; /* when node of unstable tree */ struct { /* when listed from stable tree */ @@ -281,6 +287,9 @@ static unsigned int zero_checksum __read_mostly; /* Whether to merge empty (zeroed) pages with actual zero pages */ static bool ksm_use_zero_pages __read_mostly; +/* Skip pages that couldn't be de-duplicated previously */ +static bool ksm_smart_scan = 1; + /* The number of zero pages which is placed by KSM */ unsigned long ksm_zero_pages; @@ -2305,6 +2314,73 @@ static struct ksm_rmap_item *get_next_rmap_item(struct ksm_mm_slot *mm_slot, return rmap_item; } +/* + * Calculate skip age for the ksm page age. The age determines how often + * de-duplicating has already been tried unsuccessfully. If the age is + * smaller, the scanning of this page is skipped for less scans. + * + * @age: rmap_item age of page + */ +static unsigned int skip_age(rmap_age_t age) +{ + if (age <= 3) + return 1; + if (age <= 5) + return 2; + if (age <= 8) + return 4; + + return 8; +} + +/* + * Determines if a page should be skipped for the current scan. + * + * @page: page to check + * @rmap_item: associated rmap_item of page + */ +static bool should_skip_rmap_item(struct page *page, + struct ksm_rmap_item *rmap_item) +{ + rmap_age_t age; + + if (!ksm_smart_scan) + return false; + + /* + * Never skip pages that are already KSM; pages cmp_and_merge_page() + * will essentially ignore them, but we still have to process them + * properly. + */ + if (PageKsm(page)) + return false; + + age = rmap_item->age; + if (age != U8_MAX) + rmap_item->age++; + + /* + * Smaller ages are not skipped, they need to get a chance to go + * through the different phases of the KSM merging. + */ + if (age < 3) + return false; + + /* + * Are we still allowed to skip? If not, then don't skip it + * and determine how much more often we are allowed to skip next. + */ + if (!rmap_item->remaining_skips) { + rmap_item->remaining_skips = skip_age(age); + return false; + } + + /* Skip this page */ + rmap_item->remaining_skips--; + remove_rmap_item_from_tree(rmap_item); + return true; +} + static struct ksm_rmap_item *scan_get_next_rmap_item(struct page **page) { struct mm_struct *mm; @@ -2409,6 +2485,10 @@ static struct ksm_rmap_item *scan_get_next_rmap_item(struct page **page) if (rmap_item) { ksm_scan.rmap_list = &rmap_item->rmap_list; + + if (should_skip_rmap_item(*page, rmap_item)) + goto next_page; + ksm_scan.address += PAGE_SIZE; } else put_page(*page); @@ -3449,6 +3529,28 @@ static ssize_t full_scans_show(struct kobject *kobj, } KSM_ATTR_RO(full_scans); +static ssize_t smart_scan_show(struct kobject *kobj, + struct kobj_attribute *attr, char *buf) +{ + return sysfs_emit(buf, "%u\n", ksm_smart_scan); +} + +static ssize_t smart_scan_store(struct kobject *kobj, + struct kobj_attribute *attr, + const char *buf, size_t count) +{ + int err; + bool value; + + err = kstrtobool(buf, &value); + if (err) + return -EINVAL; + + ksm_smart_scan = value; + return count; +} +KSM_ATTR(smart_scan); + static struct attribute *ksm_attrs[] = { &sleep_millisecs_attr.attr, &pages_to_scan_attr.attr, @@ -3469,6 +3571,7 @@ static struct attribute *ksm_attrs[] = { &stable_node_chains_prune_millisecs_attr.attr, &use_zero_pages_attr.attr, &general_profit_attr.attr, + &smart_scan_attr.attr, NULL, }; From patchwork Wed Sep 27 16:22:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Roesch X-Patchwork-Id: 145464 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:cae8:0:b0:403:3b70:6f57 with SMTP id r8csp2754165vqu; Wed, 27 Sep 2023 09:37:30 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFinXcPr24pf5Q91DwCjaUKCaRPZz6kTwV0hQi8lK2yq8hKteDWM0Ag4kNcsEWNdjTeOGax X-Received: by 2002:a05:6870:14d2:b0:1da:ed10:bcb with SMTP id l18-20020a05687014d200b001daed100bcbmr3068559oab.31.1695832650316; Wed, 27 Sep 2023 09:37:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695832650; cv=none; d=google.com; s=arc-20160816; b=TPZ1OJ6qQTais0D06JCvi6hGEXx2XPy03j63+3qA1fwdV9wpTkupZSIDAX9ktdyega ARoI5uhguJ9imxtzn4XHGqD8B9R5prJGsqPTZap28Cr82JH9ES/9PRRMoULzOn6XQ+Hn ME3OcDpLmIFS1uriaBAAjUE3/3PmzXb0TQone7T8LSsRFIkFmjH8WWpt8o17fYJg8iFh kOoMHDtXIjEfOpsKOaYioGhbX7/HbBh48YpvdE6YFb5aUneHyIk7aIW2UotpFtA8+SWE +JP8L+q1lVnRLjSECGJuSs0RJPUdVNvVyyc3ZJQrXKKAlylHUStfQYg3ty9FAbW/+uiq dLrg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=1LdjbrSTW7GDbAqE3wkNtvp3gXo6eKi0BIzKiZfMuRg=; fh=sS+J4OyOC0EcVLWJpS3mBHGeO+0+dYZJ+ImCUfzsrH4=; b=aDfBM3jyrOb2mAI/CRaTg9x9ORcbPn1ly5R8NBeHD1OZSFiwDrK/QGf8koF4zI8G0W mNMlGYE655xReHGHvM0WKdCwYXW/77GldoE7hR+M2rjcAzgMCy2zsppcQVvFy3r0xATU htRvFYPU7ySngHjT2WH7JQGFBXucHSgCHaZjgipCtFRrGhzip9UL4PQlf90Ld/l8qeDf 2RfSZE3w8goa70KdaSyPbNRaeyHpiH8xz9zmk1i0gD1iNP0mceoOKV3VBdS2C9Q8Avlo 8ma/tq+60sBsrw72A5usep1kJkSo9PCNA2AqEEAMPnCLvMPaQ5RYcSH7ayE9Rqa3Ngmk gMlg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id k68-20020a633d47000000b00578c4e244easi5811981pga.791.2023.09.27.09.37.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Sep 2023 09:37:30 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id DE46F802C7E3; Wed, 27 Sep 2023 09:23:10 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231730AbjI0QW5 (ORCPT + 19 others); Wed, 27 Sep 2023 12:22:57 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36614 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231490AbjI0QWt (ORCPT ); Wed, 27 Sep 2023 12:22:49 -0400 Received: from 66-220-144-178.mail-mxout.facebook.com (66-220-144-178.mail-mxout.facebook.com [66.220.144.178]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3D4F092 for ; Wed, 27 Sep 2023 09:22:48 -0700 (PDT) Received: by devbig1114.prn1.facebook.com (Postfix, from userid 425415) id 47CAECA4DC12; Wed, 27 Sep 2023 09:22:32 -0700 (PDT) From: Stefan Roesch To: kernel-team@fb.com Cc: shr@devkernel.io, akpm@linux-foundation.org, david@redhat.com, hannes@cmpxchg.org, riel@surriel.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v4 2/4] mm/ksm: add pages_skipped metric Date: Wed, 27 Sep 2023 09:22:20 -0700 Message-Id: <20230927162222.3827551-3-shr@devkernel.io> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20230927162222.3827551-1-shr@devkernel.io> References: <20230927162222.3827551-1-shr@devkernel.io> MIME-Version: 1.0 X-Spam-Status: No, score=-0.1 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_BLOCKED,RDNS_DYNAMIC,SPF_HELO_PASS,SPF_NEUTRAL, TVD_RCVD_IP 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 X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Wed, 27 Sep 2023 09:23:10 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1778209417348269140 X-GMAIL-MSGID: 1778209417348269140 This change adds the "pages skipped" metric. To be able to evaluate how successful smart page scanning is, the pages skipped metric can be compared to the pages scanned metric. The pages skipped metric is a cumulative counter. The counter is stored under /sys/kernel/mm/ksm/pages_skipped. Signed-off-by: Stefan Roesch Reviewed-by: David Hildenbrand --- mm/ksm.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/mm/ksm.c b/mm/ksm.c index c0a2e7759365..1df25a66f162 100644 --- a/mm/ksm.c +++ b/mm/ksm.c @@ -293,6 +293,9 @@ static bool ksm_smart_scan = 1; /* The number of zero pages which is placed by KSM */ unsigned long ksm_zero_pages; +/* The number of pages that have been skipped due to "smart scanning" */ +static unsigned long ksm_pages_skipped; + #ifdef CONFIG_NUMA /* Zeroed when merging across nodes is not allowed */ static unsigned int ksm_merge_across_nodes = 1; @@ -2376,6 +2379,7 @@ static bool should_skip_rmap_item(struct page *page, } /* Skip this page */ + ksm_pages_skipped++; rmap_item->remaining_skips--; remove_rmap_item_from_tree(rmap_item); return true; @@ -3463,6 +3467,13 @@ static ssize_t pages_volatile_show(struct kobject *kobj, } KSM_ATTR_RO(pages_volatile); +static ssize_t pages_skipped_show(struct kobject *kobj, + struct kobj_attribute *attr, char *buf) +{ + return sysfs_emit(buf, "%lu\n", ksm_pages_skipped); +} +KSM_ATTR_RO(pages_skipped); + static ssize_t ksm_zero_pages_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) { @@ -3560,6 +3571,7 @@ static struct attribute *ksm_attrs[] = { &pages_sharing_attr.attr, &pages_unshared_attr.attr, &pages_volatile_attr.attr, + &pages_skipped_attr.attr, &ksm_zero_pages_attr.attr, &full_scans_attr.attr, #ifdef CONFIG_NUMA From patchwork Wed Sep 27 16:22:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Roesch X-Patchwork-Id: 145483 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:cae8:0:b0:403:3b70:6f57 with SMTP id r8csp2771655vqu; Wed, 27 Sep 2023 10:06:53 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHmhu8DFVR/6Uz+hj7gcBDqNDcG51MQSOrYZGfE6NNLB055MQRj6y8KvCIYsLbGIm1U/149 X-Received: by 2002:a17:902:d50d:b0:1b9:de75:d5bb with SMTP id b13-20020a170902d50d00b001b9de75d5bbmr3037166plg.7.1695834412737; Wed, 27 Sep 2023 10:06:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695834412; cv=none; d=google.com; s=arc-20160816; b=h8N6o6Pf41RLcB3H4s8NrxUO13qNpY+5BTYpOJWey+ixpFgYdulXCM+iOPQAKV4J+u HI6hEqbJpa+6Cz3f9WcgGcDn6ly/m9KYKuYjDenfWwLvHvBU5laqCsIzWX/cpgY9jgXW elWUu50Ttw2KIFv7oyFjsGka2N9Dz6reywcvV6rogQ2krK0V+0Ab5xNtM57oggZZWgmd y73F+0yNHG+7SrGOfoR06IAvb46GQ7CRnHwp1iXSPHmZ4DfQxZkZux900FLOiWq+F0wG SdTD9RlBgxOjvP19vP03yHYV5vLIZifcozIMXHRHoQGpnvxm+kEI0paMb6dZ/C2bXjEV Qs7g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=dj4Uw0ya+yBYIJV/MmafOuUQqTKYXOAk3384f1ynkjU=; fh=sS+J4OyOC0EcVLWJpS3mBHGeO+0+dYZJ+ImCUfzsrH4=; b=pY50RdsueuSY2KEgVLIxZzeRaESL2Oq1jivGdlycAEnrthReB1YkeG1/PTZzm2tceL WFb1HWFUujJ79YMN6cPjZj/UE/sE5G1VuqC4USVswsiiJLUYn9kcJaae9R5HlnglxIis EJz5BohuNLKUo605d0DXubN5W2ii2Qx69+mhq9Dt3ooshhHcflTDjgW6PsN0oiqJ7R7H 72s0b2wqoopAUXXqOhDZiYFnMTbdIIX0Fz1YUvFDgk9GKCseN6svYy3pCxMIqMwieOFA fgRGMbVzwPr7u47bnv5FJF0kz6lpSJJHTuP1uXKqJ+wxi4qZDXClTKoPPk/BOiBUWl13 nbUw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from groat.vger.email (groat.vger.email. [23.128.96.35]) by mx.google.com with ESMTPS id h5-20020a170902680500b001ab29e00303si5185016plk.426.2023.09.27.10.06.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Sep 2023 10:06:52 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) client-ip=23.128.96.35; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by groat.vger.email (Postfix) with ESMTP id 2237980D0815; Wed, 27 Sep 2023 09:23:17 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at groat.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231659AbjI0QWy (ORCPT + 19 others); Wed, 27 Sep 2023 12:22:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36604 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231463AbjI0QWr (ORCPT ); Wed, 27 Sep 2023 12:22:47 -0400 Received: from 66-220-144-179.mail-mxout.facebook.com (66-220-144-179.mail-mxout.facebook.com [66.220.144.179]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6C1229C for ; Wed, 27 Sep 2023 09:22:46 -0700 (PDT) Received: by devbig1114.prn1.facebook.com (Postfix, from userid 425415) id 5401DCA4DC14; Wed, 27 Sep 2023 09:22:32 -0700 (PDT) From: Stefan Roesch To: kernel-team@fb.com Cc: shr@devkernel.io, akpm@linux-foundation.org, david@redhat.com, hannes@cmpxchg.org, riel@surriel.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v4 3/4] mm/ksm: document smart scan mode Date: Wed, 27 Sep 2023 09:22:21 -0700 Message-Id: <20230927162222.3827551-4-shr@devkernel.io> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20230927162222.3827551-1-shr@devkernel.io> References: <20230927162222.3827551-1-shr@devkernel.io> MIME-Version: 1.0 X-Spam-Status: No, score=-0.8 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on groat.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (groat.vger.email [0.0.0.0]); Wed, 27 Sep 2023 09:23:17 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1778211265292352292 X-GMAIL-MSGID: 1778211265292352292 This adds documentation for the smart scan mode of KSM. Signed-off-by: Stefan Roesch Reviewed-by: David Hildenbrand --- Documentation/admin-guide/mm/ksm.rst | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Documentation/admin-guide/mm/ksm.rst b/Documentation/admin-guide/mm/ksm.rst index 776f244bdae4..2b38a8bb08af 100644 --- a/Documentation/admin-guide/mm/ksm.rst +++ b/Documentation/admin-guide/mm/ksm.rst @@ -155,6 +155,15 @@ stable_node_chains_prune_millisecs scan. It's a noop if not a single KSM page hit the ``max_page_sharing`` yet. +smart_scan + Historically KSM checked every candidate page for each scan. It did + not take into account historic information. When smart scan is + enabled, pages that have previously not been de-duplicated get + skipped. How often these pages are skipped depends on how often + de-duplication has already been tried and failed. By default this + optimization is enabled. The ``pages_skipped`` metric shows how + effective the setting is. + The effectiveness of KSM and MADV_MERGEABLE is shown in ``/sys/kernel/mm/ksm/``: general_profit From patchwork Wed Sep 27 16:22:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Roesch X-Patchwork-Id: 145463 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:cae8:0:b0:403:3b70:6f57 with SMTP id r8csp2753958vqu; Wed, 27 Sep 2023 09:37:09 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFmSlZqpKIJlYe7h2n33OLfmSjZAyB75HY9LVxCsxRoMrcYKi8D5hHO4N4AXcIKE28X3CPD X-Received: by 2002:a25:2c3:0:b0:d80:6754:d535 with SMTP id 186-20020a2502c3000000b00d806754d535mr2294148ybc.60.1695832629659; Wed, 27 Sep 2023 09:37:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695832629; cv=none; d=google.com; s=arc-20160816; b=lKrcsBdG0+gTAfiSIUT/VLkvC7hR7sVel5XMOKFbf3o//bL6Dno0e1Qdtq5vXnedxQ eShnFdXwN4bPysZtR29wYqp0px8PjDjYxWCNq57532DCHelMD4Q0uT7nboXzAdMkd7MV u4aya8tJqJv18HDblbReuzTbHV6hQ4H4ntObKCpem+M+0p1j1LI5dPeoKq7k6cKl+ct0 JShvvg8aIdjIa1willzz2H6Jk3EHtOZXyJA12UpIQ1zw9T4CaYOc7u2px3f/dc6Bjwv2 qNl0be/Be78WQ6jl8wQNSRH5aDLu0tDr34+p5SxHviq22JEnPMT6h7fRBPPSgTE/Zxb4 QloQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=71+GN8RZXaq4jWr0yJG4sss0ixOgqD2wHt5QC1Bg9nE=; fh=sS+J4OyOC0EcVLWJpS3mBHGeO+0+dYZJ+ImCUfzsrH4=; b=oL9WNYFJZcE+tzoBmPkLtzuq+/t8s7OyVUNPJ9Clp80UF4nll+4r/U/jrvETo8oiNn TfYxQ4siyKPIdxtnoHwlpSeJ53h7nm7nlM9SnN5aQqZx2XtsU3We5VOsZhqBTtBHK7D0 B0TadqtGI80spIiBG3tOddi1JgO6w0qBeYGlQV+oKCZpMhd0fpBWCZv0shmjGqkOpa0t cHAgU2/2IWzN4L5Vt6xwVLe2oYuEi4jzdd8wC7jJM6hADWI29RIJl3wltF1W21053QTE 9K1huAIu5Mdm+rP9/j7U62s4Ur9ZeG3U1jaKU/YPFCLDmdwMM+UkpnnSzjWKM0TXFynH CMBw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from snail.vger.email (snail.vger.email. [2620:137:e000::3:7]) by mx.google.com with ESMTPS id b130-20020a633488000000b0056952b496efsi16062690pga.366.2023.09.27.09.37.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Sep 2023 09:37:09 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) client-ip=2620:137:e000::3:7; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 2BB9B809788A; Wed, 27 Sep 2023 09:23:04 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231610AbjI0QWw (ORCPT + 19 others); Wed, 27 Sep 2023 12:22:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36594 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231374AbjI0QWr (ORCPT ); Wed, 27 Sep 2023 12:22:47 -0400 Received: from 66-220-144-178.mail-mxout.facebook.com (66-220-144-178.mail-mxout.facebook.com [66.220.144.178]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6C40BDD for ; Wed, 27 Sep 2023 09:22:46 -0700 (PDT) Received: by devbig1114.prn1.facebook.com (Postfix, from userid 425415) id 62387CA4DC16; Wed, 27 Sep 2023 09:22:32 -0700 (PDT) From: Stefan Roesch To: kernel-team@fb.com Cc: shr@devkernel.io, akpm@linux-foundation.org, david@redhat.com, hannes@cmpxchg.org, riel@surriel.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v4 4/4] mm/ksm: document pages_skipped sysfs knob Date: Wed, 27 Sep 2023 09:22:22 -0700 Message-Id: <20230927162222.3827551-5-shr@devkernel.io> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20230927162222.3827551-1-shr@devkernel.io> References: <20230927162222.3827551-1-shr@devkernel.io> MIME-Version: 1.0 X-Spam-Status: No, score=-0.1 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_BLOCKED,RDNS_DYNAMIC,SPF_HELO_PASS,SPF_NEUTRAL, TVD_RCVD_IP 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 X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Wed, 27 Sep 2023 09:23:04 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1778209395480920324 X-GMAIL-MSGID: 1778209395480920324 This adds documentation for the new metric pages_skipped. Signed-off-by: Stefan Roesch Reviewed-by: David Hildenbrand --- Documentation/admin-guide/mm/ksm.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Documentation/admin-guide/mm/ksm.rst b/Documentation/admin-guide/mm/ksm.rst index 2b38a8bb08af..0cadde17ae0c 100644 --- a/Documentation/admin-guide/mm/ksm.rst +++ b/Documentation/admin-guide/mm/ksm.rst @@ -178,6 +178,8 @@ pages_unshared how many pages unique but repeatedly checked for merging pages_volatile how many pages changing too fast to be placed in a tree +pages_skipped + how many pages did the "smart" page scanning algorithm skip full_scans how many times all mergeable areas have been scanned stable_node_chains