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 6161BC433EF for ; Wed, 23 Mar 2022 18:43:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CF60E8D0003; Wed, 23 Mar 2022 14:43:09 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CA6488D0001; Wed, 23 Mar 2022 14:43:09 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B7AF28D0003; Wed, 23 Mar 2022 14:43:09 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (relay.hostedemail.com [64.99.140.25]) by kanga.kvack.org (Postfix) with ESMTP id AA3798D0001 for ; Wed, 23 Mar 2022 14:43:09 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 74AB524CCE for ; Wed, 23 Mar 2022 18:43:09 +0000 (UTC) X-FDA: 79276523298.10.C378256 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf22.hostedemail.com (Postfix) with ESMTP id D9A7BC0037 for ; Wed, 23 Mar 2022 18:43:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1648060988; h=from:from: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:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=GPHRJrOley9SnFxNP5QQI8FCtrq/8HttXGFrhV18jDU=; b=il05ZnYusjfGf4idL+2Idq1cl94IVlExKm74KRk1MKFULGil7izWBs8eFNI1Wvy3dsTCg1 OdQpb2pxMcncG7fJZSnELVjA3vjHysefqOdUKI0j7aVnn5eq019CaAOd3mb0zHNA1FCIOk U5uHwdRd7K1Hxk7fExbGTDI4qznO0AI= Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-510-cWhkEP9_M0WXj95e_mCPhw-1; Wed, 23 Mar 2022 14:43:07 -0400 X-MC-Unique: cWhkEP9_M0WXj95e_mCPhw-1 Received: by mail-wm1-f72.google.com with SMTP id m123-20020a1c2681000000b0038c9e1197f6so866313wmm.4 for ; Wed, 23 Mar 2022 11:43:06 -0700 (PDT) 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:mime-version:user-agent :content-language:to:cc:references:from:organization:subject :in-reply-to:content-transfer-encoding; bh=GPHRJrOley9SnFxNP5QQI8FCtrq/8HttXGFrhV18jDU=; b=mSzzRfz1DuI/lIJ3g5tOKFrTIFX8/3Jv2qNWityRiGdYqMAiE8F8KZChgKyDOUk/RQ Vp0f7/suhPvgRlIYrNLEP3v0Ro3OCWse1XmQDNCQGc8syTk7AzUCimeBqLO9vNiNN78c GvcJdfJ2t94tmoy9fV6u/KOIwX/vZRGwGy0xyWd4GAerXAvyxaHidZTcIEB5dmfO19pu 3F9V9IHzqHa0tQUvoMcYNiDAu7/TdcC1uF17x5IrAksQpzaUcxLI5fKxlYb52BmQOblS 8/riPxRoxDrPWnhLMmCGbWKspV9MYoDuNhlX6f0Eyp8qlQ7S3q0T/RApyp1ueeOyn/3p NiZw== X-Gm-Message-State: AOAM533hIAvUXsqe89bAURxbutPAzTya8QOu7ZyeM337lJSC9ycYarkl /DTV1xNrjwkYYlivEMduiE4aA/Dm1QqAcuyonmXA6fbkaal4INXR3YBgg0NcZI1J2UpnkvDYDZB AodCeuZrofiQ= X-Received: by 2002:a5d:40ce:0:b0:203:f29f:7447 with SMTP id b14-20020a5d40ce000000b00203f29f7447mr1141237wrq.477.1648060985713; Wed, 23 Mar 2022 11:43:05 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwOYbNFRnlYPUEiyiewa/tU01HWlSWpgMsaJci9hELtKkoaaTWsF35k/xaY5GbeEqNtFwgOYw== X-Received: by 2002:a5d:40ce:0:b0:203:f29f:7447 with SMTP id b14-20020a5d40ce000000b00203f29f7447mr1141218wrq.477.1648060985441; Wed, 23 Mar 2022 11:43:05 -0700 (PDT) Received: from ?IPV6:2003:cb:c704:a300:f7c1:f4a5:f958:a561? (p200300cbc704a300f7c1f4a5f958a561.dip0.t-ipconnect.de. [2003:cb:c704:a300:f7c1:f4a5:f958:a561]) by smtp.gmail.com with ESMTPSA id q11-20020adfcd8b000000b001e320028660sm488768wrj.92.2022.03.23.11.43.04 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 23 Mar 2022 11:43:04 -0700 (PDT) Message-ID: <614b33de-cdf0-73d2-08e3-196363d816d2@redhat.com> Date: Wed, 23 Mar 2022 19:43:04 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.6.2 To: cgel.zte@gmail.com, akpm@linux-foundation.org Cc: 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 References: <20220323075714.2345743-1-yang.yang29@zte.com.cn> From: David Hildenbrand Organization: Red Hat Subject: Re: [PATCH v2] mm/vmstat: add events for ksm cow In-Reply-To: <20220323075714.2345743-1-yang.yang29@zte.com.cn> X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Rspam-User: Authentication-Results: imf22.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=il05ZnYu; spf=none (imf22.hostedemail.com: domain of david@redhat.com has no SPF policy when checking 170.10.133.124) smtp.mailfrom=david@redhat.com; dmarc=pass (policy=none) header.from=redhat.com X-Rspamd-Server: rspam03 X-Rspamd-Queue-Id: D9A7BC0037 X-Stat-Signature: cm3safmzt3mqbtujhbdsa6cqjdmk8sxc X-HE-Tag: 1648060988-403347 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 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. 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