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 5F683C54E58 for ; Fri, 15 Mar 2024 10:55:22 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C8F3980119; Fri, 15 Mar 2024 06:55:21 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C3EDE800B4; Fri, 15 Mar 2024 06:55:21 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B2F0680119; Fri, 15 Mar 2024 06:55:21 -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 9BA1D800B4 for ; Fri, 15 Mar 2024 06:55:21 -0400 (EDT) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 59C27160939 for ; Fri, 15 Mar 2024 10:55:21 +0000 (UTC) X-FDA: 81898966842.06.97D17BD Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf11.hostedemail.com (Postfix) with ESMTP id 91ED740018 for ; Fri, 15 Mar 2024 10:55:19 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=none; spf=pass (imf11.hostedemail.com: domain of ryan.roberts@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=ryan.roberts@arm.com; dmarc=pass (policy=none) header.from=arm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1710500119; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=dVISdFxlCnLtDT3M38ABbrRIg78dyfX+9/DO6lkUNLA=; b=lS78WpRbIATYvUXOA5rDJTLNr04pIKCNPnFMeqiUuBSlr1W2vKZxUYA37AMD702Cuw2nUC uzx7+Dmyc1Y0W0qZRjAKPUP1Ivzm2Z1AmSknXFb2bNJR9kUOnVppfmumwab3NCgwMKFQ9W QgwqdDTPVI5uHQwyUYBBvHvG7Y1Z4LA= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1710500119; a=rsa-sha256; cv=none; b=StIFrJ6hln10go2y2w3MPdcdx0C5pyvlIOHTc9eVLuzUGI2PK/A15iSTodvgtl6Uk88Eq8 +gqpJKFdHSxBfbfp0E/eQG2NLGw9TizRU+UdfUJ9Ou0C4NfIDmAZMIa2SZDw/gSk1Tqcc+ V4i+jk6Yc8iKjD+E2Dju8p8xfZnGYbo= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=none; spf=pass (imf11.hostedemail.com: domain of ryan.roberts@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=ryan.roberts@arm.com; dmarc=pass (policy=none) header.from=arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id CB7A8C15; Fri, 15 Mar 2024 03:55:53 -0700 (PDT) Received: from [10.57.69.160] (unknown [10.57.69.160]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 026733F762; Fri, 15 Mar 2024 03:55:15 -0700 (PDT) Message-ID: Date: Fri, 15 Mar 2024 10:55:14 +0000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v4 6/6] mm: madvise: Avoid split during MADV_PAGEOUT and MADV_COLD Content-Language: en-GB To: David Hildenbrand , Andrew Morton , Matthew Wilcox , Huang Ying , Gao Xiang , Yu Zhao , Yang Shi , Michal Hocko , Kefeng Wang , Barry Song <21cnbao@gmail.com>, Chris Li Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org References: <20240311150058.1122862-1-ryan.roberts@arm.com> <20240311150058.1122862-7-ryan.roberts@arm.com> From: Ryan Roberts In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Stat-Signature: toq6hfrytptowy7s311ge6mp11qe4qcb X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 91ED740018 X-Rspam-User: X-HE-Tag: 1710500119-152973 X-HE-Meta: U2FsdGVkX1/3w6TBkhwBqGFYYPo03oZOfd7hhculTU0MetGAwQGwIwF7dDnGieciTlcwU3VcN6ofgNev54s/DxS14gAc9dET8BHAPGo+RlOu2bIwo61lz0/ZD0HyqjGDsqHwMB8fgkXb4ZdfLc52RYhBtgfZ8QtrWJtN1Qdu3gmfg5ThH1WSowXU/lSvcWdNeM5jWIJiTSVc/9xTX3hB90q1ruXGSJ61COlQYdn4e22pvUD/++qCyREdW2DTRDHi4H8k3UEiY4+CCLX4I0eu73OJBx/6s700b0NS64EtF46iiKaKRY0rq/AKODbH4qsqjPBudB2bONmf7P2PjdO8uG9OCxf+AqBfskEIZdRfSDh6Ss8tQCQ1/nXSNXeEmNWWCwzOeeF7z6Ygruk3Twg6O6v011jccCCJFacz2Vj9H6A0ACTxptLuic1h4BahyHVj9g5WaT8Mu1mo/fmFyVMQsYwoQsHWEEJhukIVKspdVqf9ALZFYzKa0+riZaKgy6K/aIVoi+AIG9vJv0tphJBec44Om24p6Dy00cMF//0DK1iCOvZaDTCnr6WeDXgTeHrzAKOXsSJXsCH0mBrD55At/gG7tEHIHehniAgVwlmjgAJVOqG0OepEGMzva/WMjHmDj/hEapI/vqLvnWkzC//2BijYjbvw/oepyQRHHp+z9lU6CpG89PFW3GJh0oEfuZvod7pgWo6nGb2WsJsQJowHNTbfMsxiNKEzPG7pbfpbJm0aQMJvb2exzXkXK2J1pc+cZrW2WgEARQKdhujBbj+D+bHBElK7UyxDz3GiVtWFm19PKNGtdk8khTJ/CLkH35AWyek6kRV2BEKqM4SClQD2gcyKhgovfiGZgCeEof8Q6O7uEDxB7rB2L/i8SajqyZKowxLaolb1lOUfj6oIjju2DB8hn6hQ6bX9K9W7vX0ZWpoYHeWzD93NXQdLp6KNumNQwtDqT4kAlq3EucB7iFQ RHe5aIvU 9+1oqLgC+/dHK7jIKQSacIIHLgkQYtpE5GeHwmd9ySMnc8WVO/WYFbENU6H+fzTT/eBgMNj4QA9w8SVH0xOWZJ1QtOjuRwsfhhzpoQ2dAr7m+KcMJTak5ENYUz0o+QGZ8SrpBWoXpdPOOQEsLCKDSxtCEObJp1oCEVjEhVXd1p6UPUf9wyBHlvQypvOMChATa/tfUQA2Ncd+fApTv01cZV1ogu5hKdwHZWkl6 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: On 15/03/2024 10:35, David Hildenbrand wrote: >> -        if (!pageout && pte_young(ptent)) { >> -            ptent = ptep_get_and_clear_full(mm, addr, pte, >> -                            tlb->fullmm); >> -            ptent = pte_mkold(ptent); >> -            set_pte_at(mm, addr, pte, ptent); >> -            tlb_remove_tlb_entry(tlb, pte, addr); >> +        if (!pageout) { >> +            for (; nr != 0; nr--, pte++, addr += PAGE_SIZE) { >> +                if (ptep_test_and_clear_young(vma, addr, pte)) >> +                    tlb_remove_tlb_entry(tlb, pte, addr); >> +            } >>           } > > > The following might turn out a bit nicer: Make folio_pte_batch() collect > "any_young", then doing something like we do with "any_writable" in the fork() > case: > > ... >     nr = folio_pte_batch(folio, addr, pte, ptent, max_nr, >                  fpb_flags, NULL, any_young); >     if (any_young) >         pte_mkyoung(ptent) > ... > > if (!pageout && pte_young(ptent)) { >     mkold_full_ptes(mm, addr, pte, nr, tlb->fullmm); >     tlb_remove_tlb_entries(tlb, pte, nr, addr); > } > I thought about that but decided that it would be better to only TLBI the actual entries that were young. Although looking at tlb_remove_tlb_entry() I see that it just maintains a range between the lowest and highest address, so this won't actually make any difference. So, yes, this will be a nice improvement, and also prevent the O(n^2) pte reads for the contpte case. I'll change in the next version.