Re: [PATCH] f2fs: avoid issuing small bios due to several dirty node pages

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



2013-01-18 (금), 16:58 +0900, Namjae Jeon:
> 2013/1/18, Jaegeuk Kim <jaegeuk.kim@xxxxxxxxxxx>:
> > If some small bios of dirty node pages are supposed to be issued during the
> > sequential data writes, there-in well-produced consecutive data bios 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 <jaegeuk.kim@xxxxxxxxxxx>
> > ---
> >  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 reasonable.
> > + */
> > +#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 on
segment.
But, somebody will be able to do later. :)

> 
> 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 = sbi->sb->s_bdev;
> >  	long nr_to_write = wbc->nr_to_write;
> >
> > -	if (wbc->for_kupdate)
> > -		return 0;
> > -
> > -	if (get_pages(sbi, F2FS_DIRTY_NODES) == 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 = 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-fsdevel" in
> > the body of a message to majordomo@xxxxxxxxxxxxxxx
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> >

-- 
Jaegeuk Kim
Samsung

Attachment: signature.asc
Description: This is a digitally signed message part


[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]
  Powered by Linux