From mboxrd@z Thu Jan 1 00:00:00 1970 From: Namjae Jeon Subject: Re: [PATCH] f2fs: avoid issuing small bios due to several dirty node pages Date: Fri, 18 Jan 2013 17:57:40 +0900 Message-ID: References: <1358490548-32675-1-git-send-email-jaegeuk.kim@samsung.com> <1358497552.8234.113.camel@kjgkr> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: QUOTED-PRINTABLE Cc: linux-fsdevel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net To: jaegeuk.kim@samsung.com Return-path: Received: from mail-qa0-f52.google.com ([209.85.216.52]:62675 "EHLO mail-qa0-f52.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750759Ab3ARI5l convert rfc822-to-8bit (ORCPT ); Fri, 18 Jan 2013 03:57:41 -0500 Received: by mail-qa0-f52.google.com with SMTP id d13so2828287qak.4 for ; Fri, 18 Jan 2013 00:57:41 -0800 (PST) In-Reply-To: <1358497552.8234.113.camel@kjgkr> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: 2013/1/18, Jaegeuk Kim : > 2013-01-18 (=EA=B8=88), 16:58 +0900, Namjae Jeon: >> 2013/1/18, Jaegeuk Kim : >> > If some small bios of dirty node pages are supposed to be issued d= uring >> > the >> > sequential data writes, there-in well-produced consecutive data bi= os >> > are >> > able >> > to be split by the small node bios, resulting in performance >> > degradation. >> > So, let's collect a number of dirty node pages until reaching a >> > threshold. >> > And, by default, I set the threshold as 2MB, a segment size. >> > >> > This improves sequential write performance on i5, 512GB SSD (830 w= / >> > SATA2) >> > as >> > follows. >> > Before: 231 MB/s -> After: 255 MB/s >> > >> > Signed-off-by: Jaegeuk Kim >> > --- >> > fs/f2fs/node.c | 17 +++++++++++------ >> > 1 file changed, 11 insertions(+), 6 deletions(-) >> > >> > diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c >> > index f177c01..9bda63c 100644 >> > --- a/fs/f2fs/node.c >> > +++ b/fs/f2fs/node.c >> > @@ -1124,6 +1124,12 @@ static int f2fs_write_node_page(struct page >> > *page, >> > return 0; >> > } >> > >> > +/* >> > + * It is very important to gather dirty pages and write at once, = so >> > that we >> > can >> > + * submit a big bio without interfering other data writes. >> > + * Be default, 512 pages (2MB), a segment size, is quite reasonab= le. >> > + */ >> > +#define COLLECT_DIRTY_NODES 512 >> Hi Jaeguek. >> It is just my opinion. >> One of f2fs advantages is that user can set segment size to fit own >> device. >> For future, Is it not good to use segment size set by user(from >> superblock) instead of fixed size ? > > At this moment, it's very hard to change the segment size due to many > hardcoded data structures such as SSA, bitmaps, etc. > Instead, I proposed something like section and zone which are based o= n > segment. > But, somebody will be able to do later. :) Reviewed-by: Namjae Jeon Okay, I think It is better if you add TODO comment about this to be fixed by the other. Talk Incidentally, let me ask you other thing. get_meta_page never return NULL about allocate page and readpage. Is there any reason it try to infinitely retry about two case ? Thanks for reply! > >> >> Thanks. >> >> > static int f2fs_write_node_pages(struct address_space *mapping, >> > struct writeback_control *wbc) >> > { >> > @@ -1131,17 +1137,16 @@ static int f2fs_write_node_pages(struct >> > address_space *mapping, >> > struct block_device *bdev =3D sbi->sb->s_bdev; >> > long nr_to_write =3D wbc->nr_to_write; >> > >> > - if (wbc->for_kupdate) >> > - return 0; >> > - >> > - if (get_pages(sbi, F2FS_DIRTY_NODES) =3D=3D 0) >> > - return 0; >> > - >> > + /* First check balancing cached NAT entries */ >> > if (try_to_free_nats(sbi, NAT_ENTRY_PER_BLOCK)) { >> > write_checkpoint(sbi, false, false); >> > return 0; >> > } >> > >> > + /* collect a number of dirty node pages and write together */ >> > + if (get_pages(sbi, F2FS_DIRTY_NODES) < COLLECT_DIRTY_NODES) >> > + return 0; >> > + >> > /* if mounting is failed, skip writing node pages */ >> > wbc->nr_to_write =3D bio_get_nr_vecs(bdev); >> > sync_node_pages(sbi, 0, wbc); >> > -- >> > 1.8.0.1.250.gb7973fb >> > >> > -- >> > To unsubscribe from this list: send the line "unsubscribe linux-fs= devel" >> > in >> > the body of a message to majordomo@vger.kernel.org >> > More majordomo info at http://vger.kernel.org/majordomo-info.html >> > > > -- > Jaegeuk Kim > Samsung > -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel= " in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html