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 1D5FEC4345F for ; Thu, 18 Apr 2024 16:32:37 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id A53A36B0092; Thu, 18 Apr 2024 12:32:36 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9DCD96B0093; Thu, 18 Apr 2024 12:32:36 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 87D6B6B0095; Thu, 18 Apr 2024 12:32:36 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 686F56B0092 for ; Thu, 18 Apr 2024 12:32:36 -0400 (EDT) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 1C61DA17AD for ; Thu, 18 Apr 2024 16:32:36 +0000 (UTC) X-FDA: 82023195912.20.A9BD361 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf30.hostedemail.com (Postfix) with ESMTP id 0C28B80004 for ; Thu, 18 Apr 2024 16:32:33 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=WAz7Z8Nu; spf=pass (imf30.hostedemail.com: domain of peterx@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=peterx@redhat.com; dmarc=pass (policy=none) header.from=redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1713457954; a=rsa-sha256; cv=none; b=hrN8JwDnnDvOfLi1vL9Ysjkt79t0/hyYwmgtX+tBG2/nA7B9+fFUVo9oRWDzosBeEuzLcF sZ6+UYd4mA3YiFVuCb27f1/5xCrd9AsJSuZklL2fQ55e3ByHXSpn4Lqc4U73VkmujIA8UQ +kiSrmu0KggQwzfpuasaXxIIEZ7YXu4= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=WAz7Z8Nu; spf=pass (imf30.hostedemail.com: domain of peterx@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=peterx@redhat.com; dmarc=pass (policy=none) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1713457954; 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:in-reply-to:references:references:dkim-signature; bh=OoXoBfgzx2gWa0LQD3Lc6aPoICfiFdxwwltQidVwXSY=; b=TbNIOPsvvcaX3k200Svi6FR8APFkiFHRv5Z+4l3ItlD7stcBB3bLYoBoRxeOtLaKLyvJug 6v4Srf7Iz7rS03OMZUDndYo3eYxHqEibrqrjXQwY4ncYPVF8Pj7OrpI/okfyjAYaPEe9H8 8U6LI6u+Scl5SMrmsxB3+DDTTYuNF9M= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1713457953; 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: in-reply-to:in-reply-to:references:references; bh=OoXoBfgzx2gWa0LQD3Lc6aPoICfiFdxwwltQidVwXSY=; b=WAz7Z8NurR1cNv8iT4y0lBmirCgiAxWXEWJjomL6qkS7y6KZ1mzTKAgCVzERbUdTNahjqc JU3rogB1BbHxIwSYRQgHoRdQYBe82h4VaoJKsKk6dhfEcNZm2wQkzxsmZp667yjv8DEqzN K8x9v7LQpEOtANI9/4kcitJk21hAyiA= Received: from mail-qv1-f69.google.com (mail-qv1-f69.google.com [209.85.219.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-151-8dnkHdzVOOmDH4JxfwyK9A-1; Thu, 18 Apr 2024 12:32:32 -0400 X-MC-Unique: 8dnkHdzVOOmDH4JxfwyK9A-1 Received: by mail-qv1-f69.google.com with SMTP id 6a1803df08f44-6a0587a6bd1so1512966d6.3 for ; Thu, 18 Apr 2024 09:32:31 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713457951; x=1714062751; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=OoXoBfgzx2gWa0LQD3Lc6aPoICfiFdxwwltQidVwXSY=; b=njqRroc9K7NCEQPmLXXk+Gx5Vz8INihTPr7jHTksKmtQ1NOjKce1fprBdIu9VK3aiy YeJhF6iMbR/CdAO8onmeHwQbHqBEMxsyiWrnv+fb+/122IEozbjZMmBq01ZT5RPivlcV iwOpcHq04GgAohoRZY0iOA0hH+zJD/2TufUiFgVusgbQyranwH3RHEWz44W1HzQqinQO +wRJgcHIPUf9ffdfPaqeIGub8qgYvg/rKxeMeTggxKHIG7AMVd/Frhau1jVZD5WkVg3i mpnLJxmUMgmGamH+AQJpNNSe3xQ1VQNn5z1SDwC/982GIEvzdduxd2vp7gIo/xyexHyT QKCQ== X-Forwarded-Encrypted: i=1; AJvYcCVKQN8JnKzIFh/WSDBNDWDGyMmujLiptKb6z+VcCZMWSGuQ4EfNTws8oM7mcBxplxliHRlAJbWXztRP+uUvPFzOEs4= X-Gm-Message-State: AOJu0Yx1R9p0BSknwDVqNLk0eU/kefseLDOGoNed0XWc0I6itwNh1Ma1 1KBZAafgXp1dEqRzX4dir/4vkumeP8vPcQA3x31/IUT8llUssCQnEmZvVBZFu3Qv7RmSK34fPP6 t8bzVz9kCSyTXL5i/3DzahT9zjG3ysBbFb+6I6NZhOjPHZp7+ X-Received: by 2002:a05:6214:5010:b0:699:dfe:6015 with SMTP id jo16-20020a056214501000b006990dfe6015mr3619314qvb.5.1713457951202; Thu, 18 Apr 2024 09:32:31 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFCX2ZiqlQpWRViI/shJtjWywfeIOgT6oF/nqydrevc9MBJDKAWCBc0FgLPOgsdm6lIR1EAzg== X-Received: by 2002:a05:6214:5010:b0:699:dfe:6015 with SMTP id jo16-20020a056214501000b006990dfe6015mr3619281qvb.5.1713457950581; Thu, 18 Apr 2024 09:32:30 -0700 (PDT) Received: from x1n (pool-99-254-121-117.cpe.net.cable.rogers.com. [99.254.121.117]) by smtp.gmail.com with ESMTPSA id d5-20020a0cdb05000000b0069b432df140sm767917qvk.121.2024.04.18.09.32.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Apr 2024 09:32:30 -0700 (PDT) Date: Thu, 18 Apr 2024 12:32:28 -0400 From: Peter Xu To: Kefeng Wang Cc: Andrew Morton , linux-mm@kvack.org Subject: Re: [PATCH v2] mm: memory: check userfaultfd_wp() in vmf_orig_pte_uffd_wp() Message-ID: References: <20240418120641.2653165-1-wangkefeng.wang@huawei.com> MIME-Version: 1.0 In-Reply-To: <20240418120641.2653165-1-wangkefeng.wang@huawei.com> X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=utf-8 Content-Disposition: inline X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 0C28B80004 X-Stat-Signature: zr5jj65tip71n41sxhsdejhwwkfbru1e X-Rspam-User: X-HE-Tag: 1713457953-51464 X-HE-Meta: U2FsdGVkX19X1nFM+GIIzQH2B5CnifNLnOJpQ7iW7BLNd8ADG7Fu3uLq0fS3C3oO5KKROiAbNNA9+8AY1wDlFPO9q0zJUBI8zckjSzKiFVIo5D3eVS8HbGVu8qmRUOP9z88jbRStgeQE30+0/9+9HlPUQ74AUicKHKR4xwZww+Gg9BAU/9O/3JXcsR+WIDQ/a7xHVNzlT+XzdO8PmwSBaN/kTK2UwtljY3lds364z/zwyf8XmaJVXw0iHidTyZgJfgjYb1m2a+G0TJLEcsY+G4bYR6bNHEabYumdf+zcXn5YZm5vsw+NsuL59ca3Qx8PtDNlUHEE/Q+tvuGdzYfHN+7pq7m3/ei9RPF8+gR0gSlrBc/dp0hBK9IEFAnhaojLMUUIUzPcAwEgOm4MLex/9Gvc2JhLfZEfzkYOLEGakbjpILstyDMMS6tlsYEe0+QJ2fLS6n3bD8X0phPp4swGraeGwNN49pVHFlcaiM708sX84bfDjpVvgP253zAd+zFodPGSFB/uf0c+tTXBnyyfnPxiuYb4X9/LL7swnybnw48IF+/YJ6c08XY/00j0gV+47SQLwsQoiqYdW28yD62JiI0QolCePusy/anuJF5FmKaBZK+1SbA5jItu0ukNXIS/j1ZeG7sFM8NbmQU0E6+CfsbCTfK2uEsVxI8Qq5oVW5jfEKZu/Bi4FyZqjcn+eoG4KYp8shjgcL1+7XugWjo7Y4W+J8NPVwc9nv1y4mcfyt9s2AvIO15UOnJAp0whJffG7JYNBd35+KGS12AIuxD9E21e0QJLUUHrQ+zQHm+j9YN2iT4wKnlkGATHPoK8CA0aOqyMwolHL9NS0cevO/7rhReye2Xo+AjKs3YwBWDp7/bTpAP5v+UoRSnOBS9ySdDEd4dECktXKNHbDxPS88RUW2HpQCVj1lkTk7bSgXu0rFViveKNHuQzjlwKqjHvfW+19AJe6gCgk5LZyxxkYG4 tv90N0OP 800eaRDU6966MiAnMm6ZfI6Gb/Nq1bOGJ/Mm1yg67kW0ZXGaxyC/52bDIKy6EKtl+VbIubkjtZylDH7ht2kYTBYPKkXzJNGnW3ziPm/mQH2keDBBkfnd0mzwr/EOXmE682aZSAhvEpvHnsy2fFRN8q26x26l1f3iuENvb8VSXXFXwyg/31VgpmoCrddZLff/4DKs+TpqJnBxvoZFZ6B/53NWnqivdVcwQ0Ktx0G2FwaKOdMSD6m9odRAeuiBfZajAVkDxhHWlNnleYKEQvkxjGYR9PJNQ3pIED03fJUN647Nk8ImII8R9dQ5rKAXGWNHuv8zDw2v43wlOpXBtPGSTqZAsUV5YvMEXgUYH2iWO/RUPWnriEZ3NGku+m+uLvM1Lndge9T3jYSkziuwguf3fW+mtEoMhQFhgI9WUZt1ASn1CN4pweO4v8HZjYw== 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: List-Subscribe: List-Unsubscribe: Hi, Kefeng, On Thu, Apr 18, 2024 at 08:06:41PM +0800, Kefeng Wang wrote: > Add userfaultfd_wp() check in vmf_orig_pte_uffd_wp() to avoid the > unnecessary pte_marker_entry_uffd_wp() in most pagefault, difference > as shows below from perf data of lat_pagefault, note, the function > vmf_orig_pte_uffd_wp() is not inlined in the two kernel versions. > > perf report -i perf.data.before | grep vmf > 0.17% 0.13% lat_pagefault [kernel.kallsyms] [k] vmf_orig_pte_uffd_wp.part.0.isra.0 > perf report -i perf.data.after | grep vmf Any real number to share too besides the perf greps? I meant, even if perf report will not report such function anymore, it doesn't mean it'll be faster, and how much it improves? Now we're switching from pte_marker_uffd_wp() check into a vma flag check. I think it makes more sense to compare the number rather than the perf reports, as the vma flag check instructions will be buried under other entries IIUC. Thanks, > > In addition, directly call vmf_orig_pte_uffd_wp() in do_anonymous_page() > and set_pte_range() to save a uffd_wp variable. > > Signed-off-by: Kefeng Wang > --- > v2: update changelog > > mm/memory.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/mm/memory.c b/mm/memory.c > index 5ae2409d3cb9..2cf54def3995 100644 > --- a/mm/memory.c > +++ b/mm/memory.c > @@ -116,6 +116,8 @@ static bool vmf_orig_pte_uffd_wp(struct vm_fault *vmf) > { > if (!(vmf->flags & FAULT_FLAG_ORIG_PTE_VALID)) > return false; > + if (!userfaultfd_wp(vmf->vma)) > + return false; > > return pte_marker_uffd_wp(vmf->orig_pte); > } > @@ -4388,7 +4390,6 @@ static struct folio *alloc_anon_folio(struct vm_fault *vmf) > */ > static vm_fault_t do_anonymous_page(struct vm_fault *vmf) > { > - bool uffd_wp = vmf_orig_pte_uffd_wp(vmf); > struct vm_area_struct *vma = vmf->vma; > unsigned long addr = vmf->address; > struct folio *folio; > @@ -4488,7 +4489,7 @@ static vm_fault_t do_anonymous_page(struct vm_fault *vmf) > folio_add_new_anon_rmap(folio, vma, addr); > folio_add_lru_vma(folio, vma); > setpte: > - if (uffd_wp) > + if (vmf_orig_pte_uffd_wp(vmf)) > entry = pte_mkuffd_wp(entry); > set_ptes(vma->vm_mm, addr, vmf->pte, entry, nr_pages); > > @@ -4663,7 +4664,6 @@ void set_pte_range(struct vm_fault *vmf, struct folio *folio, > struct page *page, unsigned int nr, unsigned long addr) > { > struct vm_area_struct *vma = vmf->vma; > - bool uffd_wp = vmf_orig_pte_uffd_wp(vmf); > bool write = vmf->flags & FAULT_FLAG_WRITE; > bool prefault = in_range(vmf->address, addr, nr * PAGE_SIZE); > pte_t entry; > @@ -4678,7 +4678,7 @@ void set_pte_range(struct vm_fault *vmf, struct folio *folio, > > if (write) > entry = maybe_mkwrite(pte_mkdirty(entry), vma); > - if (unlikely(uffd_wp)) > + if (unlikely(vmf_orig_pte_uffd_wp(vmf))) > entry = pte_mkuffd_wp(entry); > /* copy-on-write page */ > if (write && !(vma->vm_flags & VM_SHARED)) { > -- > 2.27.0 > -- Peter Xu