Re: [PATCH] libext2fs: readahead for meta_bg

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

 



On Feb 20, 2017, at 3:03 AM, Artem Blagodarenko <artem.blagodarenko@xxxxxxxxx> wrote:
> 
> From: Alexey Lyashkov <alexey.lyashkov@xxxxxxxxxxx>
> 
> There are ~37k of random IOs with meta_bg option on 300T target.
> Debugfs requires 20 minutes to be started. Enabling readahead for
> group blocks metadata save time dramatically. Only 12s to start.
> 
> Signed-off-by: Alexey Lyashkov <alexey.lyashkov@xxxxxxxxxxx>

This patch looks good by itself.

Reviewed-by: Andreas Dilger <adilger@xxxxxxxxx>
----

On a related note, I've been wondering if it would make sense to have
a second patch that *only* does the readahead of the group descriptor blocks
in ext2fs_open2(), and move io_channel_read_blk64() to ext2fs_group_desc()
when the group descriptor blocks are actually accessed the first time?  This
would allow tools like tune2fs, debugfs, dumpe2fs, etc. that may not access
group descriptors to load _much_ faster than if it loads all of the bitmaps
synchronously at filesystem open time.  Even if they _do_ access the GDT it
will at least allow the prefetch more time to run in the background, and the
GDT swabbing happen incrementally upon access rather than all at the start.

A quick look through lib/ext2fs looks like ext2fs_group_desc() is used for
the majority of group descriptor accesses, but there are a few places that
access fs->group_desc directly.  The ext2fs_group_desc() code could check
whether the group descriptor is all-zero (ext2fs_open2() should be changed
to use ext2fs_get_array_zero(..., &fs->group_desc)) and if so read the whole
descriptor block into the array and optionally swab it.

Cheers, Andreas

> ---
> lib/ext2fs/openfs.c |    6 ++++++
> 1 files changed, 6 insertions(+), 0 deletions(-)
> 
> diff --git a/lib/ext2fs/openfs.c b/lib/ext2fs/openfs.c
> index ba501e6..f158b0a 100644
> --- a/lib/ext2fs/openfs.c
> +++ b/lib/ext2fs/openfs.c
> @@ -399,6 +399,12 @@ errcode_t ext2fs_open2(const char *name, const char *io_options,
> #endif
> 		dest += fs->blocksize*first_meta_bg;
> 	}
> +
> +	for (i = first_meta_bg ; i < fs->desc_blocks; i++) {
> +		blk = ext2fs_descriptor_block_loc2(fs, group_block, i);
> +		io_channel_cache_readahead(fs->io, blk, 1);
> +	}
> +
> 	for (i=first_meta_bg ; i < fs->desc_blocks; i++) {
> 		blk = ext2fs_descriptor_block_loc2(fs, group_block, i);
> 		retval = io_channel_read_blk64(fs->io, blk, 1, dest);
> --
> 1.7.1
> 


Cheers, Andreas





Attachment: signature.asc
Description: Message signed with OpenPGP


[Index of Archives]     [Reiser Filesystem Development]     [Ceph FS]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite National Park]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]     [Linux Media]

  Powered by Linux