From: "Aneesh Kumar K. V" Subject: Re: [PATCH] ext4: group cache is added in ext4_mb_discard_preallocations() Date: Wed, 31 Mar 2010 00:07:14 +0530 Message-ID: <87wrwty7tx.fsf@linux.vnet.ibm.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: "Theodore Ts'o" , Andreas Dilger , Dave Kleikamp To: jing zhang , linux-ext4 , "zj.barak" Return-path: Received: from e23smtp02.au.ibm.com ([202.81.31.144]:40893 "EHLO e23smtp02.au.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751728Ab0C3ShX (ORCPT ); Tue, 30 Mar 2010 14:37:23 -0400 Received: from d23relay04.au.ibm.com (d23relay04.au.ibm.com [202.81.31.246]) by e23smtp02.au.ibm.com (8.14.3/8.13.1) with ESMTP id o2UIY1i2015833 for ; Wed, 31 Mar 2010 05:34:01 +1100 Received: from d23av04.au.ibm.com (d23av04.au.ibm.com [9.190.235.139]) by d23relay04.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id o2UIVDGe1151120 for ; Wed, 31 Mar 2010 05:31:13 +1100 Received: from d23av04.au.ibm.com (loopback [127.0.0.1]) by d23av04.au.ibm.com (8.14.3/8.13.1/NCO v10.0 AVout) with ESMTP id o2UIbKOH029694 for ; Wed, 31 Mar 2010 05:37:21 +1100 In-Reply-To: Sender: linux-ext4-owner@vger.kernel.org List-ID: On Tue, 30 Mar 2010 20:36:17 +0800, jing zhang wrote: > From: Jing Zhang > > Date: Tue Mar 30 20:35:22 2010 > > With the added cache, better group locality may be earned when > allocating blocks. > > Cc: Theodore Ts'o > Cc: Andreas Dilger > Cc: Dave Kleikamp > Cc: "Aneesh Kumar K. V" > Signed-off-by: Jing Zhang > > --- > > --- linux-2.6.32/fs/ext4/mballoc.c 2009-12-03 11:51:22.000000000 +0800 > +++ ext4_mm_leak/mballoc-13.c 2010-03-30 20:28:08.000000000 +0800 > @@ -4183,12 +4183,20 @@ static int ext4_mb_discard_preallocation > ext4_group_t i, ngroups = ext4_get_groups_count(sb); > int ret; > int freed = 0; > + static ext4_group_t grp_cache = 0; > > trace_ext4_mb_discard_preallocations(sb, needed); > - for (i = 0; i < ngroups && needed > 0; i++) { > - ret = ext4_mb_discard_group_preallocations(sb, i, needed); > + if (needed <= 0) > + return freed; > + for (i = 0; i < ngroups; i++) { > + if (grp_cache >= ngroups) > + grp_cache -= ngroups; > + ret = ext4_mb_discard_group_preallocations(sb, grp_cache, needed); > freed += ret; > needed -= ret; > + if (needed <= 0) > + break; > + grp_cache++; > } > > return freed; can you explain this further ? -aneesh