From: Andrew Bennieston <andrew.bennieston@citrix.com>
To: Paul Durrant <Paul.Durrant@citrix.com>,
"xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Cc: Wei Liu <wei.liu2@citrix.com>, Ian Campbell <Ian.Campbell@citrix.com>
Subject: Re: [PATCH RFC 0/4]: xen-net{back, front}: Multiple transmit and receive queues
Date: Thu, 16 Jan 2014 10:27:16 +0000 [thread overview]
Message-ID: <52D7B404.9080007@citrix.com> (raw)
In-Reply-To: <9AAE0902D5BC7E449B7C8E4E778ABCD0208D6E@AMSPEX01CL01.citrite.net>
Subject: Re: [PATCH RFC 0/4]: xen-net{back,front}: Multiple transmit
and receive queues To: Paul Durrant
<Paul.Durrant@citrix.com>,"xen-devel@lists.xenproject.org"
<xen-devel@lists.xenproject.org> Cc: Ian Campbell
<Ian.Campbell@citrix.com>,Wei Liu <wei.liu2@citrix.com> Bcc:
-=-=-=-=-=-=-=-=-=# Don't remove this line #=-=-=-=-=-=-=-=-=- On
16/01/14 10:04, Paul Durrant wrote:
>> -----Original Message----- From: Andrew J. Bennieston
>> [mailto:andrew.bennieston@citrix.com] Sent: 15 January 2014 16:23 To:
>> xen-devel@lists.xenproject.org Cc: Ian Campbell; Wei Liu; Paul
>> Durrant Subject: [PATCH RFC 0/4]: xen-net{back,front}: Multiple
>> transmit and receive queues
>>
>> This patch series implements multiple transmit and receive queues
>> (i.e. multiple shared rings) for the xen virtual network interfaces.
>>
>> The series is split up as follows: - Patches 1 and 3 factor out the
>> queue-specific data for netback and netfront respectively, and modify
>> the rest of the code to use these as appropriate. - Patches 2 and 4
>> introduce new XenStore keys to negotiate and use multiple shared
>> rings and event channels, and code to connect these as appropriate.
>>
>> All other transmit and receive processing remains unchanged, i.e.
>> there is a kthread per queue and a NAPI context per queue.
>>
>> The performance of these patches has been analysed in detail, with
>> results available at:
>>
>> http://wiki.xenproject.org/wiki/Xen-netback_and_xen-netfront_multi-
>> queue_performance_testing
>>
>
> Nice numbers!
>
>> To summarise: * Using multiple queues allows a VM to transmit at line
>> rate on a 10 Gbit/s NIC, compared with a maximum aggregate throughput
>> of 6 Gbit/s with a single queue. * For intra-host VM--VM traffic,
>> eight queues provide 171% of the throughput of a single queue; almost
>> 12 Gbit/s instead of 6 Gbit/s. * There is a corresponding increase
>> in total CPU usage, i.e. this is a scaling out over available
>> resources, not an efficiency improvement. * Results depend on the
>> availability of sufficient CPUs, as well as the distribution of
>> interrupts and the distribution of TCP streams across the queues.
>>
>> One open issue is how to deal with the tx_credit data for rate
>> limiting. This used to exist on a per-VIF basis, and these patches
>> move it to per-queue to avoid contention on concurrent access to the
>> tx_credit data from multiple threads. This has the side effect of
>> breaking the tx_credit accounting across the VIF as a whole. I cannot
>> see a situation in which people would want to use both rate limiting
>> and a high-performance multi-queue mode, but if this is problematic
>> then it can be brought back to the VIF level, with appropriate
>> protection. Obviously, it continues to work identically in the case
>> where there is only one queue.
>>
>> Queue selection is currently achieved via an L4 hash on the packet
>> (i.e. TCP src/dst port, IP src/dst address) and is not negotiated
>> between the frontend and backend, since only one option exists.
>> Future patches to support other frontends (particularly Windows) will
>> need to add some capability to negotiate not only the hash algorithm
>> selection, but also allow the frontend to specify some parameters to
>> this.
>>
>
> Yes, Windows RSS stipulates a Toeplitz hash and specifies a hash key
> and mapping table. There's further awkwardness in the need to pass the
> actual hash value to the frontend too - but we could use an 'extra'
> seg for that, analogous to passing the GSO mss value through.
Yes, I was hoping we might be able to play tricks like that when it came
to implementing Toeplitz support.
Andrew
>
> Paul
>
>> Queue-specific XenStore entries for ring references and event
>> channels are stored hierarchically, i.e. under .../queue-N/... where
>> N varies from 0 to one less than the requested number of queues
>> (inclusive). If only one queue is requested, it falls back to the
>> flat structure where the ring references and event channels are
>> written at the same level as other vif information.
>>
>> -- Andrew J. Bennieston
prev parent reply other threads:[~2014-01-16 10:27 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-15 16:23 [PATCH RFC 0/4]: xen-net{back, front}: Multiple transmit and receive queues Andrew J. Bennieston
2014-01-15 16:23 ` [PATCH RFC 1/4] xen-netback: Factor queue-specific data into queue struct Andrew J. Bennieston
2014-01-16 0:17 ` Wei Liu
2014-01-16 9:54 ` Andrew Bennieston
2014-01-16 11:33 ` Wei Liu
2014-01-16 11:55 ` Andrew Bennieston
2014-01-16 10:23 ` Paul Durrant
2014-01-16 10:38 ` Andrew Bennieston
2014-01-16 11:03 ` Paul Durrant
2014-01-16 11:06 ` Andrew Bennieston
2014-01-15 16:23 ` [PATCH RFC 2/4] xen-netback: Add support for multiple queues Andrew J. Bennieston
2014-01-16 0:18 ` Wei Liu
2014-01-16 10:04 ` Andrew Bennieston
2014-01-16 10:28 ` Paul Durrant
2014-01-16 10:40 ` Andrew Bennieston
2014-01-15 16:23 ` [PATCH RFC 3/4] xen-netfront: Factor queue-specific data into queue struct Andrew J. Bennieston
2014-01-16 0:25 ` Wei Liu
2014-01-16 10:08 ` Andrew Bennieston
2014-01-15 16:23 ` [PATCH RFC 4/4] xen-netfront: Add support for multiple queues Andrew J. Bennieston
2014-01-16 0:27 ` Wei Liu
2014-01-16 10:24 ` Andrew Bennieston
2014-01-16 10:39 ` David Vrabel
2014-01-16 10:41 ` Andrew Bennieston
2014-01-16 11:04 ` David Vrabel
2014-01-16 11:44 ` Wei Liu
2014-01-24 18:05 ` Konrad Rzeszutek Wilk
2014-01-27 10:26 ` Andrew Bennieston
2014-01-16 0:13 ` [PATCH RFC 0/4]: xen-net{back, front}: Multiple transmit and receive queues Wei Liu
2014-01-16 9:36 ` Andrew Bennieston
2014-01-16 10:04 ` Paul Durrant
2014-01-16 10:27 ` Andrew Bennieston [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=52D7B404.9080007@citrix.com \
--to=andrew.bennieston@citrix.com \
--cc=Ian.Campbell@citrix.com \
--cc=Paul.Durrant@citrix.com \
--cc=wei.liu2@citrix.com \
--cc=xen-devel@lists.xenproject.org \
/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.