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