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 B4D08C54E58 for ; Fri, 15 Mar 2024 10:49:25 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3D8D480118; Fri, 15 Mar 2024 06:49:25 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 38985800B4; Fri, 15 Mar 2024 06:49:25 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2508280118; Fri, 15 Mar 2024 06:49:25 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 11BCF800B4 for ; Fri, 15 Mar 2024 06:49:25 -0400 (EDT) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id C5F51A1136 for ; Fri, 15 Mar 2024 10:49:24 +0000 (UTC) X-FDA: 81898951848.08.345C0B4 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf17.hostedemail.com (Postfix) with ESMTP id AFB7C4000E for ; Fri, 15 Mar 2024 10:49:22 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf17.hostedemail.com: domain of ryan.roberts@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=ryan.roberts@arm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1710499763; 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=DkbhdMeSWxSTmBVpdwkxryAP7+30fLpPWysXjuN9u68=; b=avIZDzef58hJAWk5v1XjwonU1Tr3tJ7D3OSz/fEsNLeGkLRUnEFTsw2ag6/uoJH/R74XxM W6QDC0D9AM3HatlviPlAM3XUjB/Dxc0UNvl2EVRAvjGfrNN86c5zjhWlo54lqw1d8Gqoch r41wv3TSjIV+aNRgEHE1OJqZNfXqc98= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf17.hostedemail.com: domain of ryan.roberts@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=ryan.roberts@arm.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1710499763; a=rsa-sha256; cv=none; b=HlQEAt64twOTtB+/cIDP9Mtzh94ng3/NgIlJgbEnsJqFpLE+IJ9ZIDDcP4373KBYrczhtQ kUVQyijkvBhllm4ijAxqhcq10oR9tQmeF3MrPD9pbuf+sQnwJ9+1Fs4p0HlylUo0iWaZ3Q 9XjVZ28dZDtw5CFD1AVcJxGEA1VPXwU= 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 0E58DC15; Fri, 15 Mar 2024 03:49:57 -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 8E9D23F762; Fri, 15 Mar 2024 03:49:19 -0700 (PDT) Message-ID: <1db242d3-5ff1-4ef5-b20a-578a317fa859@arm.com> Date: Fri, 15 Mar 2024 10:49:17 +0000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v4 5/6] mm: vmscan: Avoid split during shrink_folio_list() 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-6-ryan.roberts@arm.com> From: Ryan Roberts In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: AFB7C4000E X-Stat-Signature: yzaih9uzxn8rjkm3zexwqbqus5o1wse6 X-HE-Tag: 1710499762-644957 X-HE-Meta: U2FsdGVkX19z1Ox8ugSzamnyxABNWZRSnexmTY0dBQ1Idkn6SaC4jR5FjKcbESCQXwNF18wPOR+JZ7U9e7BfnPHkYchHFaBxsY98Y7bevwgmNA/D8WHt1gNhh6f1kFIxH15wwbRhRnzLZ8tS7sG7y7sthy6F/mo2TcN3ncH5qxoIqx3y5sEUEwNbdVE6URjAKThT9Vefb93fyBYplSTHpO8Kt+9SyOALZu2gbts4QTqmGOBpDIUXTe/5glT/DfDqZtRq+nhdPHU+/jQifgQOfe0mvi/5iiToHCRJfoC9BUvdCJ24d7USTL7Ih+vIJeiO+zkckKb7DjO/gy2u1LnbG3vvbiAvTrAQ2L0D7StJZptOrwx2DzrHrPa+/SDUYqGTtkHZgYGQQCB33bRWk3pYX7KV12lPFafNnQJWDxvEvAxwpcE+e26CNLkFvR8RsJE0E8NeyDg7OT6EZqegpM95+yVHkCq/nkzzmlwYh+OA+W4q5njCmy81B1Homevlj+Jyint5IAB8yqWaliqOo7vhEOMHVoLoe/cTz+Qba412qD4s1X3eNpHnYfL1+Eh45cW/NTjbCe4w83xNn0nDc6YJo7DNRXpjEfoMdrYiq0C++/9J4VBz9AceLwIKmbOHwmqwTl7fCaPdjUyBp8G2taWWY5Zc+ikQYROIcMi6mpTRQ/FFZbDVIHZbgv7ByYIpFTMIMgho0h2x91S6n1wP7SngyYWLt/k7zU3X8o7EmNPy92fuvhbaed7RofpTBop1h4jSc2Qnsy8szDssxu5a6t1kDnKi6L62Vg7JF8isKxHYOwoTroNpf+7hZEhQRppnTCTGHFXz1JX/niCXVihaxPKfR+53QBPu93coAH8lQyu4Ypc1gZah28TDWJP2FWVuk68q56Wv28Wbxh6sbUJMZl1THsRO9LhVWE+fz0jbuYVmTcIQY81dS9swugm96trQoq6pyx3Jmw+SfdInK+qe2fg 76pPDDg3 paUMApyB4PpVAcdL4+w80TAcC5SLoRNTioemoGdBVFN1MPwLMoqsNoaZXLVKG5mUUxoPC+4TL9UeY7SuMjqSsQAfV8ADruLG9YJ7D8uyCgcK050EaASGgfkFHDakrxMfF7JUeWNQsHFO7Gvor7Jy7Eusjm8+68QeWKjV4Zt1YXO6FIcAoNc5aDCnHvHRaG81rHCNpx2rDP4y/HAVbyome/9DEC5mGRz67icZyvKWiBhL+2f8KIUiv5/th9i3us+XFNdvfnvPUbr6YB4gQGwZSQTfXeQ== 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:43, David Hildenbrand wrote: > On 11.03.24 16:00, Ryan Roberts wrote: >> Now that swap supports storing all mTHP sizes, avoid splitting large >> folios before swap-out. This benefits performance of the swap-out path >> by eliding split_folio_to_list(), which is expensive, and also sets us >> up for swapping in large folios in a future series. >> >> If the folio is partially mapped, we continue to split it since we want >> to avoid the extra IO overhead and storage of writing out pages >> uneccessarily. >> >> Signed-off-by: Ryan Roberts >> --- >>   mm/vmscan.c | 9 +++++---- >>   1 file changed, 5 insertions(+), 4 deletions(-) >> >> diff --git a/mm/vmscan.c b/mm/vmscan.c >> index cf7d4cf47f1a..0ebec99e04c6 100644 >> --- a/mm/vmscan.c >> +++ b/mm/vmscan.c >> @@ -1222,11 +1222,12 @@ static unsigned int shrink_folio_list(struct list_head >> *folio_list, >>                       if (!can_split_folio(folio, NULL)) >>                           goto activate_locked; >>                       /* >> -                     * Split folios without a PMD map right >> -                     * away. Chances are some or all of the >> -                     * tail pages can be freed without IO. >> +                     * Split partially mapped folios map >> +                     * right away. Chances are some or all >> +                     * of the tail pages can be freed >> +                     * without IO. >>                        */ >> -                    if (!folio_entire_mapcount(folio) && >> +                    if (!list_empty(&folio->_deferred_list) && >>                           split_folio_to_list(folio, >>                                   folio_list)) >>                           goto activate_locked; > > Not sure if we might have to annotate that with data_race(). I asked that exact question to Matthew in another context bt didn't get a response. There are examples of checking if the deferred list is empty with and without data_race() in the code base. But list_empty() is implemented like this: static inline int list_empty(const struct list_head *head) { return READ_ONCE(head->next) == head; } So I assumed the READ_ONCE() makes everything safe without a lock? Perhaps not sufficient for KCSAN? > > Reviewed-by: David Hildenbrand > Thanks!