From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751943AbdI1HSy (ORCPT ); Thu, 28 Sep 2017 03:18:54 -0400 Received: from mx1.redhat.com ([209.132.183.28]:16858 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750794AbdI1HSx (ORCPT ); Thu, 28 Sep 2017 03:18:53 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 06CD5344DB2 Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx04.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=jasowang@redhat.com Subject: Re: [PATCH net-next RFC 2/5] vhost: introduce helper to prefetch desc index To: "Michael S. Tsirkin" Cc: virtualization@lists.linux-foundation.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org References: <1506067355-5771-1-git-send-email-jasowang@redhat.com> <1506067355-5771-3-git-send-email-jasowang@redhat.com> <20170926221435-mutt-send-email-mst@kernel.org> <17e9c3a9-7759-a674-bc00-414eabfed118@redhat.com> <20170928012906-mutt-send-email-mst@kernel.org> From: Jason Wang Message-ID: <502eb735-3aea-3799-1f92-87697d4ef198@redhat.com> Date: Thu, 28 Sep 2017 15:18:45 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.3.0 MIME-Version: 1.0 In-Reply-To: <20170928012906-mutt-send-email-mst@kernel.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Thu, 28 Sep 2017 07:18:53 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2017年09月28日 06:57, Michael S. Tsirkin wrote: > On Wed, Sep 27, 2017 at 08:35:47AM +0800, Jason Wang wrote: >> >> On 2017年09月27日 03:19, Michael S. Tsirkin wrote: >>> On Fri, Sep 22, 2017 at 04:02:32PM +0800, Jason Wang wrote: >>>> This patch introduces vhost_prefetch_desc_indices() which could batch >>>> descriptor indices fetching and used ring updating. This intends to >>>> reduce the cache misses of indices fetching and updating and reduce >>>> cache line bounce when virtqueue is almost full. copy_to_user() was >>>> used in order to benefit from modern cpus that support fast string >>>> copy. Batched virtqueue processing will be the first user. >>>> >>>> Signed-off-by: Jason Wang >>>> --- >>>> drivers/vhost/vhost.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++ >>>> drivers/vhost/vhost.h | 3 +++ >>>> 2 files changed, 58 insertions(+) >>>> >>>> diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c >>>> index f87ec75..8424166d 100644 >>>> --- a/drivers/vhost/vhost.c >>>> +++ b/drivers/vhost/vhost.c >>>> @@ -2437,6 +2437,61 @@ struct vhost_msg_node *vhost_dequeue_msg(struct vhost_dev *dev, >>>> } >>>> EXPORT_SYMBOL_GPL(vhost_dequeue_msg); >>>> +int vhost_prefetch_desc_indices(struct vhost_virtqueue *vq, >>>> + struct vring_used_elem *heads, >>>> + u16 num, bool used_update) >>> why do you need to combine used update with prefetch? >> For better performance > > Why is sticking a branch in there better than requesting the update > conditionally from the caller? Ok, I get your point, I can split the two functions. > > > >> and I believe we don't care about the overhead when >> we meet errors in tx. > That's a separate question, I do not really understand how > you can fetch a descriptor and update the used ring at the same > time. This allows the guest to overwrite the buffer. > I might be misunderstanding what is going on here though. We don't update used idx, so guest can't overwrite the buffer I think? Thanks