From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by dpdk.org (Postfix) with ESMTP id 3346C2A5F for ; Wed, 28 Oct 2015 22:12:29 +0100 (CET) Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (Postfix) with ESMTPS id 8B2AE33A8B6; Wed, 28 Oct 2015 21:12:28 +0000 (UTC) Received: from redhat.com (ovpn-116-32.ams2.redhat.com [10.36.116.32]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with SMTP id t9SLCQHL027877; Wed, 28 Oct 2015 17:12:26 -0400 Date: Wed, 28 Oct 2015 23:12:25 +0200 From: "Michael S. Tsirkin" To: Flavio Leitner Message-ID: <20151028230324-mutt-send-email-mst@redhat.com> References: <1445399294-18826-1-git-send-email-yuanhan.liu@linux.intel.com> <1445399294-18826-5-git-send-email-yuanhan.liu@linux.intel.com> <20151021133043-mutt-send-email-mst@redhat.com> <20151021124815.GG3115@yliu-dev.sh.intel.com> <20151021172336-mutt-send-email-mst@redhat.com> <20151022094955.GR3115@yliu-dev.sh.intel.com> <20151022142141-mutt-send-email-mst@redhat.com> <20151024023408.GA7182@x240.home> <20151024204401-mutt-send-email-mst@redhat.com> <20151028203041.GB22208@x240.home> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20151028203041.GB22208@x240.home> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 Cc: dev@dpdk.org, marcel@redhat.com Subject: Re: [dpdk-dev] [PATCH v7 4/8] vhost: rxtx: use queue id instead of constant ring index X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 28 Oct 2015 21:12:29 -0000 On Wed, Oct 28, 2015 at 06:30:41PM -0200, Flavio Leitner wrote: > On Sat, Oct 24, 2015 at 08:47:10PM +0300, Michael S. Tsirkin wrote: > > On Sat, Oct 24, 2015 at 12:34:08AM -0200, Flavio Leitner wrote: > > > On Thu, Oct 22, 2015 at 02:32:31PM +0300, Michael S. Tsirkin wrote: > > > > On Thu, Oct 22, 2015 at 05:49:55PM +0800, Yuanhan Liu wrote: > > > > > On Wed, Oct 21, 2015 at 05:26:18PM +0300, Michael S. Tsirkin wrote: > > > > > > On Wed, Oct 21, 2015 at 08:48:15PM +0800, Yuanhan Liu wrote: > > > > > > > > Please note that for virtio devices, guest is supposed to > > > > > > > > control the placement of incoming packets in RX queues. > > > > > > > > > > > > > > I may not follow you. > > > > > > > > > > > > > > Enqueuing packets to a RX queue is done at vhost lib, outside the > > > > > > > guest, how could the guest take the control here? > > > > > > > > > > > > > > --yliu > > > > > > > > > > > > vhost should do what guest told it to. > > > > > > > > > > > > See virtio spec: > > > > > > 5.1.6.5.5 Automatic receive steering in multiqueue mode > > > > > > > > > > Spec says: > > > > > > > > > > After the driver transmitted a packet of a flow on transmitqX, > > > > > the device SHOULD cause incoming packets for that flow to be > > > > > steered to receiveqX. > > > > > > > > > > > > > > > Michael, I still have no idea how vhost could know the flow even > > > > > after discussion with Huawei. Could you be more specific about > > > > > this? Say, how could guest know that? And how could guest tell > > > > > vhost which RX is gonna to use? > > > > > > > > > > Thanks. > > > > > > > > > > --yliu > > > > > > > > I don't really understand the question. > > > > > > > > When guests transmits a packet, it makes a decision > > > > about the flow to use, and maps that to a tx/rx pair of queues. > > > > > > > > It sends packets out on the tx queue and expects device to > > > > return packets from the same flow on the rx queue. > > > > > > Why? I can understand that there should be a mapping between > > > flows and queues in a way that there is no re-ordering, but > > > I can't see the relation of receiving a flow with a TX queue. > > > > > > fbl > > > > That's the way virtio chose to program the rx steering logic. > > > > It's low overhead (no special commands), and > > works well for TCP when user is an endpoint since rx and tx > > for tcp are generally tied (because of ack handling). > > > > We can discuss other ways, e.g. special commands for guests to > > program steering. > > We'd have to first see some data showing the current scheme > > is problematic somehow. > > The issue is that the restriction imposes operations to be done in the > data path. For instance, Open vSwitch has N number of threads to manage > X RX queues. We distribute them in round-robin fashion. So, the thread > polling one RX queue will do all the packet processing and push it to the > TX queue of the other device (vhost-user or not) using the same 'id'. > > Doing so we can avoid locking between threads and TX queues and any other > extra computation while still keeping the packet ordering/distribution fine. > > However, if vhost-user has to send packets according with guest mapping, > it will require locking between queues and additional operations to select > the appropriate queue. Those actions will cause performance issues. You only need to send updates if guest moves a flow to another queue. This is very rare since guest must avoid reordering. Oh and you don't have to have locking. Just update the table and make the target pick up the new value at leasure, worst case a packet ends up in the wrong queue. > I see no real benefit from enforcing the guest mapping outside to > justify all the computation cost, so my suggestion is to change the > spec to suggest that behavior, but not to require that to be compliant. > > Does that make sense? > > Thanks, > fbl It's not a question of what the spec says, it's a question of the quality of implementation: guest needs to be able to balance load between CPUs serving the queues, this means it needs a way to control steering. IMO having dpdk control it makes no sense in the scenario. This is different from dpdk sending packets to real NIC queues which all operate in parallel. -- MST