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 B8051C4829A for ; Tue, 13 Feb 2024 15:00:29 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 489868D0012; Tue, 13 Feb 2024 10:00:29 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 439C78D000E; Tue, 13 Feb 2024 10:00:29 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2B3198D0012; Tue, 13 Feb 2024 10:00:29 -0500 (EST) 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 193568D000E for ; Tue, 13 Feb 2024 10:00:29 -0500 (EST) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 34C82120BCA for ; Tue, 13 Feb 2024 15:00:28 +0000 (UTC) X-FDA: 81787091736.28.20A5022 Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) by imf28.hostedemail.com (Postfix) with ESMTP id 6BDE1C0044 for ; Tue, 13 Feb 2024 15:00:25 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=Yx8bhuuO; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=l1buCSUe; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=Yx8bhuuO; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=l1buCSUe; spf=pass (imf28.hostedemail.com: domain of hare@suse.de designates 195.135.223.131 as permitted sender) smtp.mailfrom=hare@suse.de; dmarc=pass (policy=none) header.from=suse.de ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1707836425; 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:dkim-signature; bh=ArpPiTfnbkTBU8OZLKbGI4ie43bBKud/SXQgIGfKgxI=; b=D5qAJqYHZ3gZAFKtr0B/5T/7GEyo2r3KdTNxBXWwdOUj3WCuVBvBjwrCLTd9K+WzVu/Pwy rbKBWyOINHDJ2EXT2OinS8cPguQ01hobiss4pxMx7pMhXOQ8B9G2eL/e2TTaSt1Q+Gq5zg UgWZ3QtQ+x2yZpTRVM3tEnIF+laXddY= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1707836425; a=rsa-sha256; cv=none; b=7VLgfIXm4RuzEgTCPAKMbOyRtwc8OK9TP5fDSPuogpURdwYzOoWQE2b4110fW76CPqg5v3 4MjjIH0VdayUKzjMvKcE3/SMizeKEYziat78NKoUAg+jYHp32aL/5aJKrkbGmnPnlXzmqh 8PPstq5UN1wNkk5WcW7ktmrRYx2GnDU= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=Yx8bhuuO; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=l1buCSUe; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=Yx8bhuuO; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=l1buCSUe; spf=pass (imf28.hostedemail.com: domain of hare@suse.de designates 195.135.223.131 as permitted sender) smtp.mailfrom=hare@suse.de; dmarc=pass (policy=none) header.from=suse.de Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id B8D221FCDC; Tue, 13 Feb 2024 15:00:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1707836423; h=from:from:reply-to: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=ArpPiTfnbkTBU8OZLKbGI4ie43bBKud/SXQgIGfKgxI=; b=Yx8bhuuOC18foTA2lcF9p0RUNg+ZfZaof58enHKPcMZHPiBQ6nOg5Jf3/wvDnUZZ6U4s67 rIsE2VGBZFA62Os+xNRvoj5y+X1Ui42LRTm7Yh7irpsqJLqoqyMAVlVXva7guTIePbPa4w JT3audGPU99aERj1Dwnc+VQzCtfuWfU= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1707836423; h=from:from:reply-to: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=ArpPiTfnbkTBU8OZLKbGI4ie43bBKud/SXQgIGfKgxI=; b=l1buCSUer1e4eWHzK3fMtI1UaxGPU3+5EVMB9NmeydHTZdt+aiQmOIAb+FmHHqpXc/+fXZ Np1X31e5OqX9mPDw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1707836423; h=from:from:reply-to: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=ArpPiTfnbkTBU8OZLKbGI4ie43bBKud/SXQgIGfKgxI=; b=Yx8bhuuOC18foTA2lcF9p0RUNg+ZfZaof58enHKPcMZHPiBQ6nOg5Jf3/wvDnUZZ6U4s67 rIsE2VGBZFA62Os+xNRvoj5y+X1Ui42LRTm7Yh7irpsqJLqoqyMAVlVXva7guTIePbPa4w JT3audGPU99aERj1Dwnc+VQzCtfuWfU= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1707836423; h=from:from:reply-to: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=ArpPiTfnbkTBU8OZLKbGI4ie43bBKud/SXQgIGfKgxI=; b=l1buCSUer1e4eWHzK3fMtI1UaxGPU3+5EVMB9NmeydHTZdt+aiQmOIAb+FmHHqpXc/+fXZ Np1X31e5OqX9mPDw== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 4E86013404; Tue, 13 Feb 2024 15:00:23 +0000 (UTC) Received: from dovecot-director2.suse.de ([10.150.64.162]) by imap1.dmz-prg2.suse.org with ESMTPSA id wLjtEQeEy2VlMwAAD6G6ig (envelope-from ); Tue, 13 Feb 2024 15:00:23 +0000 Message-ID: <2baca96f-1d97-4a9e-875f-7aa53626e090@suse.de> Date: Tue, 13 Feb 2024 16:00:23 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [RFC v2 05/14] readahead: align index to mapping_min_order in ondemand_ra and force_ra Content-Language: en-US To: "Pankaj Raghav (Samsung)" , linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org Cc: mcgrof@kernel.org, gost.dev@samsung.com, akpm@linux-foundation.org, kbusch@kernel.org, djwong@kernel.org, chandan.babu@oracle.com, p.raghav@samsung.com, linux-kernel@vger.kernel.org, willy@infradead.org, linux-mm@kvack.org, david@fromorbit.com References: <20240213093713.1753368-1-kernel@pankajraghav.com> <20240213093713.1753368-6-kernel@pankajraghav.com> From: Hannes Reinecke In-Reply-To: <20240213093713.1753368-6-kernel@pankajraghav.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: 6BDE1C0044 X-Rspam-User: X-Stat-Signature: 3ck8ggc8r5ro6shrm8h65qocewsseefn X-Rspamd-Server: rspam03 X-HE-Tag: 1707836425-665595 X-HE-Meta: U2FsdGVkX19sXlvbGcpxQYqNeUKGW5Nhx4pu8kaHdlSGa+cYJMDt5lm31/FXgTl7O4Xi2LBiHeI+n7fSwjCUQT0Bej74oicOBxdvADTpXoXKUExzH/m9fJcKs8nh6Lgv155ih9yuqGeWcAsO1f7UA0lPwbT8I7hR7fG0TNLE4bW5nPM1jPfRGIMDVWepagfhohjfGs3Dc+uJmcflq9GPovGHZCNTL6TQkcOh1mKFnblav2lcegMpDl7Gw9Ahr1QHf4/rw4lUSGEQHE1EK32LjZT9tS8EI1JEvwH/OUFR91ic9Ok8OISaY7l83zOVZC+IkI/aRSaJPKXaSLdoBBoOkeCt7EO05n5k1A1fwqHJC7ZH8J9eM7aYIniXv4s/pZnvWuHQmX8y7MWM61kBIu9vXandVjWIO8QsOVa0eACaR9n44hM4vXb6IBAg9YJ+diQ19G5vIriFRbhEfzzyavvyXtH9AWca2nAvecG3XT8W+TSkEgpCLdgKMSuzntHWO+CZq078bCj7tOuxgCrgIM5Z57VOAiBJvNljRpeVNKCbuX2pwRQ3f8i5lXIBtOQmnQNzKyPbjD54kVQP77X4BPOtYNlF7aBX27CHy6WAQ2YcHpGCTsMU2DHmguDhesqwNIYDf2hke4MAFG7ugqovdAdhzPouqifzsLQG4GyNH1zZSE3Dvdk/V12FfbkrR88p0bAvGnI3P/oSVcuszX7UL2cF8TW7aLrLvdpBdDfAfwf0/Qg3MFGwgp82PLObjLHAdAAzjs8wkqSe0kzzse6s7C+l5WDvcayR/6joQG8IzyV7gssPTwdpq/jCCUCU0IvNsCb881r8o4YEvetvfxIw0dNovOn1nTIPM1hIqmsqJC0r+P27njXPumuCMg9cwjf3tfziLvbGpUDyCbXycrsaulr0w3BI5vSgMwIBeL63h0T0NWO6P2cja6XccRj4/5soP8UvmgUHhhaDXDATfA/hN7R WYcQ79vd fcjfGt5JZYENR9naW8dvOCe2Snvsm/yBug23E 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 2/13/24 10:37, Pankaj Raghav (Samsung) wrote: > From: Luis Chamberlain > > Align the ra->start and ra->size to mapping_min_order in > ondemand_readahead(), and align the index to mapping_min_order in > force_page_cache_ra(). This will ensure that the folios allocated for > readahead that are added to the page cache are aligned to > mapping_min_order. > > Signed-off-by: Luis Chamberlain > Signed-off-by: Pankaj Raghav > --- > mm/readahead.c | 48 ++++++++++++++++++++++++++++++++++++++++-------- > 1 file changed, 40 insertions(+), 8 deletions(-) > > diff --git a/mm/readahead.c b/mm/readahead.c > index 4fa7d0e65706..5e1ec7705c78 100644 > --- a/mm/readahead.c > +++ b/mm/readahead.c > @@ -315,6 +315,7 @@ void force_page_cache_ra(struct readahead_control *ractl, > struct file_ra_state *ra = ractl->ra; > struct backing_dev_info *bdi = inode_to_bdi(mapping->host); > unsigned long max_pages, index; > + unsigned int min_nrpages = mapping_min_folio_nrpages(mapping); > > if (unlikely(!mapping->a_ops->read_folio && !mapping->a_ops->readahead)) > return; > @@ -324,6 +325,13 @@ void force_page_cache_ra(struct readahead_control *ractl, > * be up to the optimal hardware IO size > */ > index = readahead_index(ractl); > + if (!IS_ALIGNED(index, min_nrpages)) { > + unsigned long old_index = index; > + > + index = round_down(index, min_nrpages); > + nr_to_read += (old_index - index); > + } > + > max_pages = max_t(unsigned long, bdi->io_pages, ra->ra_pages); > nr_to_read = min_t(unsigned long, nr_to_read, max_pages); > while (nr_to_read) { > @@ -332,6 +340,7 @@ void force_page_cache_ra(struct readahead_control *ractl, > if (this_chunk > nr_to_read) > this_chunk = nr_to_read; > ractl->_index = index; > + VM_BUG_ON(!IS_ALIGNED(index, min_nrpages)); > do_page_cache_ra(ractl, this_chunk, 0); > > index += this_chunk; > @@ -344,11 +353,20 @@ void force_page_cache_ra(struct readahead_control *ractl, > * for small size, x 4 for medium, and x 2 for large > * for 128k (32 page) max ra > * 1-2 page = 16k, 3-4 page 32k, 5-8 page = 64k, > 8 page = 128k initial > + * > + * For higher order address space requirements we ensure no initial reads > + * are ever less than the min number of pages required. > + * > + * We *always* cap the max io size allowed by the device. > */ > -static unsigned long get_init_ra_size(unsigned long size, unsigned long max) > +static unsigned long get_init_ra_size(unsigned long size, > + unsigned int min_nrpages, > + unsigned long max) > { > unsigned long newsize = roundup_pow_of_two(size); > > + newsize = max_t(unsigned long, newsize, min_nrpages); > + > if (newsize <= max / 32) > newsize = newsize * 4; > else if (newsize <= max / 4) > @@ -356,6 +374,8 @@ static unsigned long get_init_ra_size(unsigned long size, unsigned long max) > else > newsize = max; > > + VM_BUG_ON(newsize & (min_nrpages - 1)); > + > return newsize; > } > > @@ -364,14 +384,16 @@ static unsigned long get_init_ra_size(unsigned long size, unsigned long max) > * return it as the new window size. > */ > static unsigned long get_next_ra_size(struct file_ra_state *ra, > + unsigned int min_nrpages, > unsigned long max) > { > - unsigned long cur = ra->size; > + unsigned long cur = max(ra->size, min_nrpages); > > if (cur < max / 16) > return 4 * cur; > if (cur <= max / 2) > return 2 * cur; > + > return max; > } > > @@ -561,7 +583,11 @@ static void ondemand_readahead(struct readahead_control *ractl, > unsigned long add_pages; > pgoff_t index = readahead_index(ractl); > pgoff_t expected, prev_index; > - unsigned int order = folio ? folio_order(folio) : 0; > + unsigned int min_order = mapping_min_folio_order(ractl->mapping); > + unsigned int min_nrpages = mapping_min_folio_nrpages(ractl->mapping); > + unsigned int order = folio ? folio_order(folio) : min_order; > + > + VM_BUG_ON(!IS_ALIGNED(ractl->_index, min_nrpages)); > > /* > * If the request exceeds the readahead window, allow the read to > @@ -583,8 +609,8 @@ static void ondemand_readahead(struct readahead_control *ractl, > expected = round_down(ra->start + ra->size - ra->async_size, > 1UL << order); > if (index == expected || index == (ra->start + ra->size)) { > - ra->start += ra->size; > - ra->size = get_next_ra_size(ra, max_pages); > + ra->start += round_down(ra->size, min_nrpages); > + ra->size = get_next_ra_size(ra, min_nrpages, max_pages); > ra->async_size = ra->size; > goto readit; > } > @@ -603,13 +629,18 @@ static void ondemand_readahead(struct readahead_control *ractl, > max_pages); > rcu_read_unlock(); > > + start = round_down(start, min_nrpages); > + > + VM_BUG_ON(folio->index & (folio_nr_pages(folio) - 1)); > + > if (!start || start - index > max_pages) > return; > > ra->start = start; > ra->size = start - index; /* old async_size */ > + Stale whitespace. > ra->size += req_size; > - ra->size = get_next_ra_size(ra, max_pages); > + ra->size = get_next_ra_size(ra, min_nrpages, max_pages); > ra->async_size = ra->size; > goto readit; > } > @@ -646,7 +677,7 @@ static void ondemand_readahead(struct readahead_control *ractl, > > initial_readahead: > ra->start = index; > - ra->size = get_init_ra_size(req_size, max_pages); > + ra->size = get_init_ra_size(req_size, min_nrpages, max_pages); > ra->async_size = ra->size > req_size ? ra->size - req_size : ra->size; > > readit: > @@ -657,7 +688,7 @@ static void ondemand_readahead(struct readahead_control *ractl, > * Take care of maximum IO pages as above. > */ > if (index == ra->start && ra->size == ra->async_size) { > - add_pages = get_next_ra_size(ra, max_pages); > + add_pages = get_next_ra_size(ra, min_nrpages, max_pages); > if (ra->size + add_pages <= max_pages) { > ra->async_size = add_pages; > ra->size += add_pages; > @@ -668,6 +699,7 @@ static void ondemand_readahead(struct readahead_control *ractl, > } > > ractl->_index = ra->start; > + VM_BUG_ON(!IS_ALIGNED(ractl->_index, min_nrpages)); > page_cache_ra_order(ractl, ra, order); > } > Otherwise looks good. Cheers, Hannes