From mboxrd@z Thu Jan 1 00:00:00 1970 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 50749C433F5 for ; Thu, 24 Mar 2022 01:36:13 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6D2396B0072; Wed, 23 Mar 2022 21:36:12 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 681886B0073; Wed, 23 Mar 2022 21:36:12 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 549E16B0074; Wed, 23 Mar 2022 21:36:12 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0120.hostedemail.com [216.40.44.120]) by kanga.kvack.org (Postfix) with ESMTP id 449C96B0072 for ; Wed, 23 Mar 2022 21:36:12 -0400 (EDT) Received: from smtpin21.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id D8303A5A85 for ; Thu, 24 Mar 2022 01:36:11 +0000 (UTC) X-FDA: 79277564142.21.EA079E0 Received: from mail-qv1-f52.google.com (mail-qv1-f52.google.com [209.85.219.52]) by imf26.hostedemail.com (Postfix) with ESMTP id 61877140034 for ; Thu, 24 Mar 2022 01:36:11 +0000 (UTC) Received: by mail-qv1-f52.google.com with SMTP id kl29so2689408qvb.2 for ; Wed, 23 Mar 2022 18:36:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=message-id:date:from:to:cc:subject:references:mime-version :content-disposition:in-reply-to; bh=z23EK6bmijRWCIbIIPvtCGbQMz4T1SuXzfcC7h1UfEU=; b=U/iDlSVzMUIjIocEGBfq+v21Z6TfT10tE5Ey03HeWs5ZMs+4ezUhLjsgONBk7g6N+t dxCAqRGWH5EvY0q3ZbP6jQu0zOyqnAtA/hjHnXI+3GAX+q1ErYNHIFSmCfKJmGIYw5gs Pl8fuFQ24KCeNrb/Bx4xgkMhghsm+eD5E/ZzZ3cEzYEgjEaWzHjiEJIddZeVJXLL37NB ErS1fdg0TGKELsjU4ELRwoRj3G29qzagygZ4YNd1MWySKnE0y78jheVib7p6iDiFfazd GPht5op15Hn1zhaJNZC0yMtEgXflvPAEDcim//Jp9ztLmxa61ayN+1w04qPZsfuzcERX ZanA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:from:to:cc:subject:references :mime-version:content-disposition:in-reply-to; bh=z23EK6bmijRWCIbIIPvtCGbQMz4T1SuXzfcC7h1UfEU=; b=5eLu8sRl/dYVTMcDia6G4hgxxfpbaknombtaOgDCW26NidmIFb4l/XTWAOwwbAuILC jlm/LaxtaI9HOwG5FUUsKQOYcvzm5t1DBId34HUtVNIBnE2w1ZjP08zp+HttmvHZoiKd cPnDcsz/AgXsWScvhMLNoKmedI3xmCfFtjbfvbyaKgOk3RgLK70hQihcwlRC4CFhe0Em Zys3QMUcWId2u7SVpMxG7J9jZQc2fuZcQlSTzM4eWtQPTMrDWnF7xbFXeNdLuwuh0MVm i0gB/M6LeiLDoxlFUOlgdZirkcKhRPaFRPyFPAgrzrlyY3gCX6WXbiqXf1FSypdundLO C4Pg== X-Gm-Message-State: AOAM533lL4kGinBwu7tJ5uYZ5o6TvXB3If1eQXnVyaeE37KbdxN9/TqP mGfygIlqd9/ViI7hTkf8ERU= X-Google-Smtp-Source: ABdhPJzHwl0Gnj2Twh7pxTOQ8Y73UhfXBEPugeqapQ0ovJ/sUWGw8ImAdTeiZW9hKwPBvc9C42pE9Q== X-Received: by 2002:a05:6214:1cc4:b0:435:35c3:f0f1 with SMTP id g4-20020a0562141cc400b0043535c3f0f1mr2521904qvd.0.1648085770715; Wed, 23 Mar 2022 18:36:10 -0700 (PDT) Received: from localhost ([193.203.214.57]) by smtp.gmail.com with ESMTPSA id d19-20020a05622a05d300b002e1e720ddcesm1334805qtb.4.2022.03.23.18.36.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Mar 2022 18:36:10 -0700 (PDT) Message-ID: <623bcb0a.1c69fb81.ae484.a006@mx.google.com> X-Google-Original-Message-ID: <20220324013606.GA2347048@cgel.zte@gmail.com> Date: Thu, 24 Mar 2022 01:36:06 +0000 From: CGEL To: David Hildenbrand Cc: akpm@linux-foundation.org, yang.yang29@zte.com.cn, dave.hansen@linux.intel.com, ran.xiaokai@zte.com.cn, yang.shi@linux.alibaba.com, saravanand@fb.com, minchan@kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, xu xin Subject: Re: [PATCH v2] mm/vmstat: add events for ksm cow References: <20220323075714.2345743-1-yang.yang29@zte.com.cn> <614b33de-cdf0-73d2-08e3-196363d816d2@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <614b33de-cdf0-73d2-08e3-196363d816d2@redhat.com> X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 61877140034 X-Stat-Signature: 5t9e7jputhrdmaj7oadp6efq9jprxmia Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b="U/iDlSVz"; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf26.hostedemail.com: domain of cgel.zte@gmail.com designates 209.85.219.52 as permitted sender) smtp.mailfrom=cgel.zte@gmail.com X-Rspam-User: X-HE-Tag: 1648085771-671644 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: On Wed, Mar 23, 2022 at 07:43:04PM +0100, David Hildenbrand wrote: > On 23.03.22 08:57, cgel.zte@gmail.com wrote: > > From: Yang Yang > > > > Users may use ksm by calling madvise(, , MADV_MERGEABLE) when they want > > to save memory, it's a tradeoff by suffering delay on ksm cow. Users can > > get to know how much memory ksm saved by reading > > /sys/kernel/mm/ksm/pages_sharing, but they don't know what's the costs > > of ksm cow, and this is important of some delay sensitive tasks. > > > > So add ksm cow events to help users evaluate whether or how to use ksm. > > > > Signed-off-by: Yang Yang > > Reviewed-by: xu xin > > Reviewed-by: Ran Xiaokai > > --- > > v2: > > - fix compile error when CONFIG_KSM is not set > > --- > > include/linux/vm_event_item.h | 2 ++ > > mm/memory.c | 20 +++++++++++++++++--- > > mm/vmstat.c | 2 ++ > > 3 files changed, 21 insertions(+), 3 deletions(-) > > > > diff --git a/include/linux/vm_event_item.h b/include/linux/vm_event_item.h > > index 16a0a4fd000b..6f32be04212f 100644 > > --- a/include/linux/vm_event_item.h > > +++ b/include/linux/vm_event_item.h > > @@ -131,6 +131,8 @@ enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT, > > SWAP_RA_HIT, > > #ifdef CONFIG_KSM > > KSM_SWPIN_COPY, > > + KSM_COW_SUCCESS, > > + KSM_COW_FAIL, > > #endif > > #endif > > #ifdef CONFIG_X86 > > diff --git a/mm/memory.c b/mm/memory.c > > index 4111f97c91a0..c24d5f04fab5 100644 > > --- a/mm/memory.c > > +++ b/mm/memory.c > > @@ -3257,6 +3257,8 @@ static vm_fault_t do_wp_page(struct vm_fault *vmf) > > __releases(vmf->ptl) > > { > > struct vm_area_struct *vma = vmf->vma; > > + vm_fault_t ret = 0; > > + bool ksm = 0; > > > > if (userfaultfd_pte_wp(vma, *vmf->pte)) { > > pte_unmap_unlock(vmf->pte, vmf->ptl); > > @@ -3294,6 +3296,7 @@ static vm_fault_t do_wp_page(struct vm_fault *vmf) > > */ > > if (PageAnon(vmf->page)) { > > struct page *page = vmf->page; > > + ksm = PageKsm(page); > > > > /* > > * We have to verify under page lock: these early checks are > > @@ -3302,7 +3305,7 @@ static vm_fault_t do_wp_page(struct vm_fault *vmf) > > * > > * PageKsm() doesn't necessarily raise the page refcount. > > */ > > - if (PageKsm(page) || page_count(page) > 3) > > + if (ksm || page_count(page) > 3) > > goto copy; > > if (!PageLRU(page)) > > /* > > @@ -3316,7 +3319,7 @@ static vm_fault_t do_wp_page(struct vm_fault *vmf) > > goto copy; > > if (PageSwapCache(page)) > > try_to_free_swap(page); > > - if (PageKsm(page) || page_count(page) != 1) { > > + if (ksm || page_count(page) != 1) { > > I think we really want to recheck here, after locking the page. > Consequently, just do a PageKsm() check below. > > > unlock_page(page); > > goto copy; > > } > > @@ -3339,7 +3342,18 @@ static vm_fault_t do_wp_page(struct vm_fault *vmf) > > get_page(vmf->page); > > > > pte_unmap_unlock(vmf->pte, vmf->ptl); > > - return wp_page_copy(vmf); > > + ret = wp_page_copy(vmf); > > + > > +#ifdef CONFIG_KSM > > + if (ksm) { > > + if (unlikely(ret & VM_FAULT_ERROR)) > > + count_vm_event(KSM_COW_FAIL); > > + else > > + count_vm_event(KSM_COW_SUCCESS); > > + } > > +#endif > > Do we really care if we failed or not? I mean, the failure case will > usually make your app crash either way ... due to OOM. > I think we need failed count. Because ksm cow oom is a little different from general OOM. User may wonder I am not allocing new memory, why it cause OOM? And OOM may have big impact for some kind of tasks, so we better let user know that, do we? > > Doing > > #ifdef CONFIG_KSM > if (PageKsm(page)) > count_vm_event(COW_KSM); > #endif > > before the wp_page_copy(vmf) should be good enough, no? > > Should be good enough IMHO. > > -- > Thanks, > > David / dhildenb