Received: by 2002:ab2:3141:0:b0:1ed:23cc:44d1 with SMTP id i1csp412819lqg; Fri, 1 Mar 2024 08:50:36 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCXYcsyVIdwURjY+Cx4JYIprPJieooWTmVpz0Jeu5K7awxiAB6oe4isd+j7RnerkZu0MafPYVHdljme18SIFfA2XvQubSUDWtU8kWbnhcA== X-Google-Smtp-Source: AGHT+IE9X0G+1N/pPVPCpm1+g0lMp7n3JN1tPPzagxictN/e1BVvjZCwxPctBKDLmHL+c1YtGEle X-Received: by 2002:a17:906:3757:b0:a44:27e9:e778 with SMTP id e23-20020a170906375700b00a4427e9e778mr1552452ejc.43.1709311836749; Fri, 01 Mar 2024 08:50:36 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709311836; cv=pass; d=google.com; s=arc-20160816; b=YIn/16I2xIeXQ3cLgLZuahkBQGAxgXM9ChQa6QZbj9aaS2/zxp5aQ5Q7ASrhl3qI5n zRQbW0BThAFowthrZ2mnGAK3ZI0pyK8SVglSnuVKDcracD1eIAfzrpUdBNNXRrpEtcfX bFmd66udWIadekNd/Or8xNoFO8ec4JmpbSfCZ2ZtvmoP5Z6NwnuxXcFnE66/aBvy15g0 7ipulMnoCaRikc0IMn3JiurfZMdbY5tDN5e0wfxBkxcAc8m/wrqK+mymsIAC+i1vcijc 87V6G1o/mW7viCouq6cHcPWr8SaTEoh/c/+e04+S9hKbBgFW6ncUggAXqqH9GqRmWe0w izcg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:date:message-id; bh=uUb6o5wgql9LYT3LSscQbMW9IoU1Qbqpne8G5FtV9j0=; fh=fcSDNSYrryrcYk5yYau+qkZ+Yl1/kMEhSVF9PtN2gmE=; b=fT3kJZRcnVUD7nHmqOXGaItaSvoOYroaI1J5767eNhsj7cFR+NIRT0mdkQESpd18j/ 6hjz1vTfhSS7t/kVS8cSQ0NOrG90XutMk1mV4NMl8wiK9+zxWk639Ow1oYchsPSD1uOv eBKT4aXIyC6BztHFeBKjiy/9eTs2dId6SyshCZ7wPGHDqk1BvDunTUVGCelP0EmfAq1z Z9+c6wMKVOTaBu35EQeuBrzhLUIy2gtLZe5jDFvQBQWtna91uz/W7PscskVI0A9Lkw+9 Lwh4W9wP+I2cz0BltF5nLYLXJxfaXWdhzNrXw8FNn/E4KDd+1MLLZUmJbICYtaQh6lFt Ss6w==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=arm.com dmarc=pass fromdomain=arm.com); spf=pass (google.com: domain of linux-kernel+bounces-88753-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-88753-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [2604:1380:4601:e00::3]) by mx.google.com with ESMTPS id k20-20020a170906055400b00a441c264613si1571273eja.406.2024.03.01.08.50.36 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 01 Mar 2024 08:50:36 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-88753-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) client-ip=2604:1380:4601:e00::3; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=arm.com dmarc=pass fromdomain=arm.com); spf=pass (google.com: domain of linux-kernel+bounces-88753-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:4601:e00::3 as permitted sender) smtp.mailfrom="linux-kernel+bounces-88753-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by am.mirrors.kernel.org (Postfix) with ESMTPS id BDFA51F21CBD for ; Fri, 1 Mar 2024 16:50:35 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id C9EF93B794; Fri, 1 Mar 2024 16:44:14 +0000 (UTC) Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id D577E882E for ; Fri, 1 Mar 2024 16:44:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709311454; cv=none; b=GzWLSuBSEjta11i384ssYxs3rKh44zBckHOkfPuP5+zFYR37G3qo+Is5T/8BF2H7ivDDaOttaQ7lKgIzTH30TkTzglBxbVdbmMNjwZuB733WmprnDatc6B0EhB32wuAgQgjuvmB8OYO9byvVj8P14CbzllIvX3rLQ4DHAmrLqfk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709311454; c=relaxed/simple; bh=ye5bABfqIH9nHzdBhk/BpXsgjuQ7wRgISNEXdSvVIbI=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=mHG00OSF56OvS5HCRXfM48RrIWnlgf76LHCrb1xkX2sVpUegGudbYrLJSP5oD7b512on3wuTZwswKb5huHqgqPWOSvEUNwpm9YmzS/zx74HUQ+yYhoBMeqQdzNuyzIzZ7jHgFZJUfdbM90CfQJP2xUQwoHoZe+hvokNJ4C5x8kE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=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 3E3C11FB; Fri, 1 Mar 2024 08:44:50 -0800 (PST) Received: from [10.57.68.58] (unknown [10.57.68.58]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 21F823F73F; Fri, 1 Mar 2024 08:44:09 -0800 (PST) Message-ID: Date: Fri, 1 Mar 2024 16:44:08 +0000 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v3 1/4] mm: swap: Remove CLUSTER_FLAG_HUGE from swap_cluster_info:flags Content-Language: en-GB To: Matthew Wilcox Cc: David Hildenbrand , Andrew Morton , Huang Ying , Gao Xiang , Yu Zhao , Yang Shi , Michal Hocko , Kefeng Wang , linux-kernel@vger.kernel.org, linux-mm@kvack.org References: <6541e29b-f25a-48b8-a553-fd8febe85e5a@redhat.com> <2934125a-f2e2-417c-a9f9-3cb1e074a44f@redhat.com> <049818ca-e656-44e4-b336-934992c16028@arm.com> <4a73b16e-9317-477a-ac23-8033004b0637@arm.com> <1195531c-d985-47e2-b7a2-8895fbb49129@redhat.com> <5ebac77a-5c61-481f-8ac1-03bc4f4e2b1d@arm.com> From: Ryan Roberts In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 01/03/2024 16:31, Matthew Wilcox wrote: > On Fri, Mar 01, 2024 at 04:27:32PM +0000, Ryan Roberts wrote: >> I've implemented the batching as David suggested, and I'm pretty confident it's >> correct. The only problem is that during testing I can't provoke the code to >> take the path. I've been pouring through the code but struggling to figure out >> under what situation you would expect the swap entry passed to >> free_swap_and_cache() to still have a cached folio? Does anyone have any idea? >> >> This is the original (unbatched) function, after my change, which caused David's >> concern that we would end up calling __try_to_reclaim_swap() far too much: >> >> int free_swap_and_cache(swp_entry_t entry) >> { >> struct swap_info_struct *p; >> unsigned char count; >> >> if (non_swap_entry(entry)) >> return 1; >> >> p = _swap_info_get(entry); >> if (p) { >> count = __swap_entry_free(p, entry); >> if (count == SWAP_HAS_CACHE) >> __try_to_reclaim_swap(p, swp_offset(entry), >> TTRS_UNMAPPED | TTRS_FULL); >> } >> return p != NULL; >> } >> >> The trouble is, whenever its called, count is always 0, so >> __try_to_reclaim_swap() never gets called. >> >> My test case is allocating 1G anon memory, then doing madvise(MADV_PAGEOUT) over >> it. Then doing either a munmap() or madvise(MADV_FREE), both of which cause this >> function to be called for every PTE, but count is always 0 after >> __swap_entry_free() so __try_to_reclaim_swap() is never called. I've tried for >> order-0 as well as PTE- and PMD-mapped 2M THP. > > I think you have to page it back in again, then it will have an entry in > the swap cache. Maybe. I know little about anon memory ;-) Ahh, I was under the impression that the original folio is put into the swap cache at swap out, then (I guess) its removed once the IO is complete? I'm sure I'm miles out... what exactly is the lifecycle of a folio going through swap out? I guess I can try forking after swap out, then fault it back in in the child and exit. Then do the munmap in the parent. I guess that could force it? Thanks for the tip - I'll have a play. > > If that doesn't work, perhaps use tmpfs, and use some memory pressure to > force that to swap? > >> I'm guessing the swapcache was already reclaimed as part of MADV_PAGEOUT? I'm >> using a block ram device as my backing store - I think this does synchronous IO >> so perhaps if I have a real block device with async IO I might have more luck? >> Just a guess... >> >> Or perhaps this code path is a corner case? In which case, perhaps its not worth >> adding the batching optimization after all? >> >> Thanks, >> Ryan >>