From mboxrd@z Thu Jan 1 00:00:00 1970 From: Steven Whitehouse Date: Wed, 15 May 2013 11:04:11 +0100 Subject: [Cluster-devel] [GFS2 PATCH] GFS2: Use single-block reservations for directories In-Reply-To: <727125292.4568955.1368551069023.JavaMail.root@redhat.com> References: <727125292.4568955.1368551069023.JavaMail.root@redhat.com> Message-ID: <1368612251.2732.15.camel@menhir> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Hi, Now in the -nmw tree. Thanks, Steve. On Tue, 2013-05-14 at 13:04 -0400, Bob Peterson wrote: > Hi, > > This patch changes the multi-block allocation code, such that > directory inodes only get a single block reserved in the bitmap. > That way, the bitmaps are more tightly packed together, and there > are fewer spans of free blocks for in-use block reservations. > This means it takes less time to find a free span of blocks in the > bitmap, which speeds things up. This increases the performance of > some workloads by almost 2X. In Nate's mockup.py script (which does > (1) create dir, (2) create dir in dir, (3) create file in that dir) > the test executes in 23 steps rather than 43 steps, a 47% > performance improvement. > > Regards, > > Bob Peterson > Red Hat File Systems > > Signed-off-by: Bob Peterson > --- > diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c > index 0c5a575..5232525 100644 > --- a/fs/gfs2/rgrp.c > +++ b/fs/gfs2/rgrp.c > @@ -1401,9 +1401,14 @@ static void rg_mblk_search(struct gfs2_rgrpd *rgd, struct gfs2_inode *ip, > u32 extlen; > u32 free_blocks = rgd->rd_free_clone - rgd->rd_reserved; > int ret; > + struct inode *inode = &ip->i_inode; > > - extlen = max_t(u32, atomic_read(&rs->rs_sizehint), requested); > - extlen = clamp(extlen, RGRP_RSRV_MINBLKS, free_blocks); > + if (S_ISDIR(inode->i_mode)) > + extlen = 1; > + else { > + extlen = max_t(u32, atomic_read(&rs->rs_sizehint), requested); > + extlen = clamp(extlen, RGRP_RSRV_MINBLKS, free_blocks); > + } > if ((rgd->rd_free_clone < rgd->rd_reserved) || (free_blocks < extlen)) > return; > >