Re: 48 bit ext3 testing

Avantika Mathur LTC <[email protected]>
Newsgroups gmane.comp.file-systems.ext2.devel
Message-ID <[email protected]>
Mingming Cao wrote:
> On Tue, 2006-07-18 at 11:09 -0700, Avantika Mathur LTC wrote:
>   
>> Hi,
>>
>> I have been testing the performance of the 48 bit patch set.
>> As I had mentioned in an earlier ext3 interlock call, I've seen major 
>> regression on tiobench for random and sequential writes.  The regression 
>> occurs when mounting with extents, for greater than 1 thread.  These 
>> results are on both an x86 and ppc64 machines.
>>     
>
>
> The regression seems related to file fragmentation, which makes me
> suspect that reservation feature is not turn on. I think I find why:
> preciously the reservation window structure is statistically declared in
> the in-core ext3 inode itself. Then later we changed it to dynamically:
> allocating memory for reservation window only when the first time an
> inode needs new blocks.
>
> For the extent block allocation interface: ext3_ext_get_blocks(), we
> seems missing this reservation window strucutre initialzation, thus why
> reservation is not being turned on and result in file fragmentation.
>
> Attached is a trival fix.
>
>   
I ran tiobench with this fix, mounted with extents, and did not get any 
regression.  Looks like the missing reservation window initialization 
was the problem

Thanks!
Avantika
> ---
>
>  linux-2.6.17-git13-ming/fs/ext3/extents.c |    6 ++++++
>  1 files changed, 6 insertions(+)
>
> diff -puN fs/ext3/extents.c~ext3-extent-init-rsv-window fs/ext3/extents.c
> --- linux-2.6.17-git13/fs/ext3/extents.c~ext3-extent-init-rsv-window	2006-07-27 19:55:59.586566092 -0700
> +++ linux-2.6.17-git13-ming/fs/ext3/extents.c	2006-07-27 20:07:33.370303760 -0700
> @@ -1931,6 +1931,12 @@ int ext3_ext_get_blocks(handle_t *handle
>  		ext3_ext_put_gap_in_cache(inode, path, iblock);
>  		goto out2;
>  	}
> +	/*
> +         * Okay, we need to do block allocation.  Lazily initialize the block
> +         * allocation info here if necessary
> +        */
> +	if (S_ISREG(inode->i_mode) && (!EXT3_I(inode)->i_block_alloc_info))
> +		ext3_init_block_alloc_info(inode);
>  
>  	/* allocate new block */
>  	goal = ext3_ext_find_goal(inode, path, iblock);
>
> _
>
>
>   
---
Avantika Mathur
IBM Linux Technology Center
503-578-3484
[email protected]


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.