All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jaegeuk Kim <jaegeuk@kernel.org>
To: Huang Ying <ying.huang@intel.com>
Cc: huang ying <huang.ying.caritas@gmail.com>,
	Changman Lee <cm224.lee@samsung.com>,
	linux-f2fs-devel@lists.sourceforge.net,
	LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH -v2] f2fs: Remove lock from check_valid_map
Date: Tue, 9 Sep 2014 00:41:02 -0700	[thread overview]
Message-ID: <20140909074102.GA493@jaegeuk-mac02.hsd1.ca.comcast.net> (raw)
In-Reply-To: <1410241426.732.378.camel@yhuang-dev>

On Tue, Sep 09, 2014 at 01:43:46PM +0800, Huang Ying wrote:
> On Mon, 2014-09-08 at 22:13 -0700, Jaegeuk Kim wrote:
> > Hi Huang,
> > 
> > On Mon, Sep 08, 2014 at 03:36:35PM +0800, huang ying wrote:
> > > Hi, Jaegeuk,
> > > 
> > > On Mon, Sep 8, 2014 at 11:50 AM, Jaegeuk Kim <jaegeuk@kernel.org> wrote:
> > > 
> > > > Hi,
> > > >
> > > > On Sun, Sep 07, 2014 at 11:38:30AM +0800, Huang Ying wrote:
> > > > > Only one bit is read in check_valid_map, holding a lock to do that
> > > > > doesn't help anything except decreasing performance.
> > > > >
> > > > > Signed-off-by: Huang, Ying <ying.huang@intel.com>
> > > > > ---
> > > > >
> > > > > v2: Fixed a build warning.
> > > > >
> > > > > ---
> > > > >  fs/f2fs/gc.c |    3 ---
> > > > >  1 file changed, 3 deletions(-)
> > > > >
> > > > > --- a/fs/f2fs/gc.c
> > > > > +++ b/fs/f2fs/gc.c
> > > > > @@ -378,14 +378,11 @@ static void put_gc_inode(struct list_hea
> > > > >  static int check_valid_map(struct f2fs_sb_info *sbi,
> > > > >                               unsigned int segno, int offset)
> > > > >  {
> > > > > -     struct sit_info *sit_i = SIT_I(sbi);
> > > > >       struct seg_entry *sentry;
> > > > >       int ret;
> > > > >
> > > > > -     mutex_lock(&sit_i->sentry_lock);
> > > > >       sentry = get_seg_entry(sbi, segno);
> > > > >       ret = f2fs_test_bit(offset, sentry->cur_valid_map);
> > > > > -     mutex_unlock(&sit_i->sentry_lock);
> > > > >       return ret;
> > > >
> > > > The f2fs_test_bit is not atomic, so I'm not sure this is a good approach.
> > > > How about introducing rw_semaphore?
> > > >
> > > 
> > > IMO, f2fs_test_bit just read a global variable (a byte in cur_valid_map),
> > > then check its value. The byte may be changed in another CPU concurrently.
> > > But even protected with a mutex, it can be changed in another CPU
> > > immediately after mutex_unlock.  So mutex does not help  here.  Here we
> > > just read a global variable, not read/modify/write, so, we don't need
> > > atomic too.
> > 
> > Hmm. This is a pretty hard corner case to allow the mutex removal under the
> > following assumption.
> > 
> > 1. All the sit entries are cached in a global array, which means that it never
> > happens that any sit entry pointers are changed.
> > 
> > 2. I agree that f2fs_gc tries to conduct the cleaning with best effort, and
> > it triggers again when it detects there is something to do more.
> > So, check_valid_bitmap doesn't need to make a precise decision.
> > 
> > But, what I concern is the consistent policy to use such the mutex.
> > If we break the rule, it becomes harder to debug potential bugs.
> 
> Yes.  We definitely need a rule.  But I suggest to make a small tweak to
> the rule.

I don't think there is enough reason that we should take a small tweak while
breaking the locking policy. It's related to neither performance issue nor a
bug case.

Even if f2fs suffers from lock contention here, I think we need to bet on
rw_semaphore to satisfy the rule and performance at the same time.

Thanks,

> If we just read one variable with fixed address, we need not
> to use a mutex to protect that.
> 
> > Anyway, have you been facing with such the lock contention?
> 
> No, I just review the code and thinks the mutex is not necessary.
> 
> Best Regards,
> Huang, Ying

  reply	other threads:[~2014-09-09  7:41 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-07  3:05 [PATCH] f2fs: Remove lock from check_valid_map Huang Ying
2014-09-07  3:05 ` Huang Ying
2014-09-07  3:38 ` [PATCH -v2] " Huang Ying
2014-09-07  3:38   ` Huang Ying
2014-09-08  3:50   ` Jaegeuk Kim
2014-09-08  3:50     ` Jaegeuk Kim
     [not found]     ` <CAC=cRTOdvOp=zBT986SqGXC2+iRxGzSgKdFYzTQjbAamYsGVsg@mail.gmail.com>
2014-09-09  5:13       ` Jaegeuk Kim
2014-09-09  5:13         ` Jaegeuk Kim
2014-09-09  5:43         ` Huang Ying
2014-09-09  5:43           ` Huang Ying
2014-09-09  7:41           ` Jaegeuk Kim [this message]
2014-09-09  8:04             ` Huang Ying

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140909074102.GA493@jaegeuk-mac02.hsd1.ca.comcast.net \
    --to=jaegeuk@kernel.org \
    --cc=cm224.lee@samsung.com \
    --cc=huang.ying.caritas@gmail.com \
    --cc=linux-f2fs-devel@lists.sourceforge.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ying.huang@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.