All of lore.kernel.org
 help / color / mirror / Atom feed
From: piaojun <piaojun@huawei.com>
To: bo.liu@linux.alibaba.com
Cc: virtio-fs@redhat.com
Subject: Re: [Virtio-fs] [PATCH] virtiofs: reduce lock contention on fpq->lock
Date: Thu, 1 Aug 2019 08:55:07 +0800	[thread overview]
Message-ID: <5D42386B.7090208@huawei.com> (raw)
In-Reply-To: <20190731174821.huiokivwch3ffglo@US-160370MP2.local>



On 2019/8/1 1:48, Liu Bo wrote:
> Hi Jun,
> 
> On Wed, Jul 31, 2019 at 08:05:03PM +0800, piaojun wrote:
>> Hi liubo,
>>
>> This change has already committed in rhvgoyal's branch:
>>
>> https://github.com/rhvgoyal/linux/tree/virtio-fs-dev-5.1
>>
> 
> Thanks for the link, the patch here does one more thing beyond Vivek's current
> code, i.e. the lock protection around req is also removed as it's not necessary.

Agreed, and it could save some CPU time.

Thanks,
Jun

> 
> thanks,
> -liubo
> 
>> Thanks,
>> Jun
>>
>> On 2019/7/30 13:51, Liu Bo wrote:
>>> Right now within virtio_fs_requests_done_work(), virtqueue is protected by
>>> both fsvq->lock and fpq->lock for processing both virtqueue and
>>> fpq->processing_list, however, it is fine for them to be protected
>>> separately.
>>>
>>> Also since %req has been removed from fpq->processing_list, no one except
>>> request_wait_answer() is looking at this %req and request_wait_answer()
>>> waits only on FINISH flag, it's OK to remove fpq->lock after %req is
>>> dropped from the list.
>>>
>>> Signed-off-by: Liu Bo <bo.liu@linux.alibaba.com>
>>> ---
>>>  fs/fuse/virtio_fs.c | 13 ++++++-------
>>>  1 file changed, 6 insertions(+), 7 deletions(-)
>>>
>>> diff --git a/fs/fuse/virtio_fs.c b/fs/fuse/virtio_fs.c
>>> index 9b3f2e9..d88bb6c 100644
>>> --- a/fs/fuse/virtio_fs.c
>>> +++ b/fs/fuse/virtio_fs.c
>>> @@ -347,21 +347,22 @@ static void virtio_fs_requests_done_work(struct work_struct *work)
>>>  
>>>  	/* Collect completed requests off the virtqueue */
>>>  	spin_lock(&fsvq->lock);
>>> -	/* grab fpq->lock as req is on fpq->processing list */
>>> -	spin_lock(&fpq->lock);
>>>  	do {
>>>  		unsigned len;
>>>  
>>>  		virtqueue_disable_cb(vq);
>>>  
>>>  		while ((req = virtqueue_get_buf(vq, &len)) != NULL) {
>>> +			/* grab fpq->lock as req is on fpq->processing list */
>>> +			spin_lock(&fpq->lock);
>>> +
>>>  			/* If !connected, req is freed by fuse_abort_conn. */
>>> -			if (fpq->connected) {
>>> +			if (fpq->connected)
>>>  				list_move_tail(&req->list, &reqs);
>>> -			}
>>> +
>>> +			spin_unlock(&fpq->lock);
>>>  		}
>>>  	} while (!virtqueue_enable_cb(vq) && likely(!virtqueue_is_broken(vq)));
>>> -	spin_unlock(&fpq->lock);
>>>  	spin_unlock(&fsvq->lock);
>>>  
>>>  	/* End requests */
>>> @@ -373,10 +374,8 @@ static void virtio_fs_requests_done_work(struct work_struct *work)
>>>  
>>>  		/* TODO zeroing? */
>>>  
>>> -		spin_lock(&fpq->lock);
>>>  		clear_bit(FR_SENT, &req->flags);
>>>  		list_del_init(&req->list);
>>> -		spin_unlock(&fpq->lock);
>>>  
>>>  		fuse_request_end(fc, req);
>>>  	}
>>>
> .
> 


      reply	other threads:[~2019-08-01  0:55 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-07-30  5:51 [Virtio-fs] [PATCH] virtiofs: reduce lock contention on fpq->lock Liu Bo
     [not found] ` <ceef880a-1b0d-c1a8-eb85-5c0bf4dfb023@huawei.com>
2019-07-31 17:48   ` Liu Bo
2019-08-01  0:55     ` piaojun [this message]

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=5D42386B.7090208@huawei.com \
    --to=piaojun@huawei.com \
    --cc=bo.liu@linux.alibaba.com \
    --cc=virtio-fs@redhat.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.