All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH V3 net-next 0/5] xen-net{back, front}: Multiple transmit and receive queues
@ 2014-02-14 17:35 ` Andrew J. Bennieston
  0 siblings, 0 replies; 20+ messages in thread
From: Andrew J. Bennieston @ 2014-02-14 17:35 UTC (permalink / raw)
  To: xen-devel; +Cc: netdev, paul.durrant, wei.liu2, ian.campbell



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.
 - Patch 5 documents the XenStore keys required for the new feature
   in include/xen/interface/io/netif.h

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

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.

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.

Note that queue selection is a decision by the transmitting system about
which queue to use for a particular packet. In general, the algorithm
may differ between the frontend and the backend with no adverse effects.

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.



V3:
- Further indentation and style fixups

V2:
- Rebase onto net-next
- Change queue->number to queue->id
- Add atomic operations around the small number of stats variables that
  are not queue-specific or per-cpu
- Fixup formatting and style issues
- XenStore protocol changes documented in netif.h
- Default max. number of queues to num_online_cpus()
- Check requested number of queues does not exceed maximum

--
Andrew J. Bennieston

^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2014-02-17 11:10 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-02-14 17:35 [PATCH V3 net-next 0/5] xen-net{back, front}: Multiple transmit and receive queues Andrew J. Bennieston
2014-02-14 17:35 ` Andrew J. Bennieston
2014-02-14 17:35 ` [PATCH V3 net-next 1/5] xen-netback: Factor queue-specific data into queue struct Andrew J. Bennieston
2014-02-14 17:35   ` Andrew J. Bennieston
2014-02-14 17:35 ` [PATCH V3 net-next 2/5] xen-netback: Add support for multiple queues Andrew J. Bennieston
2014-02-14 17:35   ` Andrew J. Bennieston
2014-02-14 17:35 ` [PATCH V3 net-next 3/5] xen-netfront: Factor queue-specific data into queue struct Andrew J. Bennieston
2014-02-14 17:35   ` Andrew J. Bennieston
2014-02-14 18:04   ` David Vrabel
2014-02-14 18:04   ` [Xen-devel] " David Vrabel
2014-02-17 11:10     ` Andrew Bennieston
2014-02-17 11:10     ` Andrew Bennieston
2014-02-14 17:35 ` [PATCH V3 net-next 4/5] xen-netfront: Add support for multiple queues Andrew J. Bennieston
2014-02-14 17:35   ` Andrew J. Bennieston
2014-02-14 18:11   ` [Xen-devel] " David Vrabel
2014-02-14 18:11   ` David Vrabel
2014-02-14 17:35 ` [PATCH V3 net-next 5/5] xen-net{back, front}: Document multi-queue feature in netif.h Andrew J. Bennieston
2014-02-14 17:35   ` Andrew J. Bennieston
2014-02-14 18:23   ` [Xen-devel] " David Vrabel
2014-02-14 18:23   ` David Vrabel

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.