Subject: Re: [RFC PATCH v3 00/17] virtual-bus

From: Nikola Ciprich <[email-masked]>
Date: Mon, 11 May 2009 13:37:31 +0200

Hi Gregory,

I'd like to try Your vbus patches, but compiling 2.6.30-rc2 (or 2.6.30-rc5) fails
with following error:
drivers/vbus/proxy/kvm-guest-vbus: struct pci_device_id is 32 bytes.  The last of 1 is:
0xda 0x11 0x00 0x00 0x00 0x20 0x00 0x00 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
FATAL: drivers/vbus/proxy/kvm-guest-vbus: struct pci_device_id is not terminated with a NULL entry!

Do You have any idea on what might be wrong?
thanks a lot in advance...
BR
nik

On Tue, Apr 21, 2009 at 02:34:16PM -0400, Gregory Haskins wrote:
> RFC: Virtual-Bus (applies to v2.6.30-rc2)
> ----------------------
> 
> Virtual-Bus is a Linux-kernel based virtual IO resource container technology.
> It allows you to declare virtualized device models directly within a host
> kernel that can be uniformly accessed from a variety of environments, such
> as KVM, userspace, lguest, Xen, etc. The goal is to reduce overhead while
> still preserving proper isolation to achieve maximum throughput and latency
> from your IO subsystem. It is installed on the host and configured using
> simple filesystem operations like "mkdir" to create a new container, "ln -s"
> to associate a device with a container, and "echo" to configure the device
> thanks to integration with configfs/sysfs. Therefore, managing a virtual-bus
> does not require special userspace tools.
> 
> Why would we want this?
> ----------------------
> 
> We believe that a combination of in-kernel models, coupled with optimizations
> in various areas such as reducing the number of context switches and executing
> the algorithms in parallel on modern multicore CPUs will result in the best
> possible IO performance for technologies such as virtualization.  This
> facility aims to provide the framework for building such constructs in
> in software in the most efficient way we believe is possible.
> 
> Preliminary Results:
> -----------------------
> 
> As a test, we wrote a virtual-ethernet backend and a Linux driver
> (called venet) and tested the setup with v2.6.29 on two 8-core x86_64
> boxes with Chelsio T3 10GE connected back to back via cross over.
> We measured bare-metal performance, as well as a kvm guest (running the
> same kernel) connected to the T3 via a linux-bridge+tap configuration with
> a 1500 MTU.  The results are as follows:
> 
> Bare metal       : tput = 4078Mb/s, round-trip = 25593pps (39us rtt)
> Virtio-net (PCI) : tput = 4003Mb/s, round-trip = 320pps (3125us rtt)
> Venet      (VBUS): tput = 4050Mb/s, round-trip = 15255 (65us rtt)
> 
> When we jump to 9000 byte MTU, the situation looks similar
> 
> Bare metal       : tput = 9717Mb/s, round-trip = 30396pps (33us rtt)
> Virtio-net (PCI) : tput = 4578Mb/s, round-trip = 249pps (4016us rtt)
> Venet      (VBUS): tput = 5802Mb/s, round-trip = 15127 (66us rtt)
> 
> Note that to be fair, part of the latency response from virtio-pci is due to
> the way that the driver/backend coalesces packets, and not a true limitation
> of the userspace path as the results may imply.  Anthony Liguori is already
> looking into improving this based on the results we presented here, and is
> making good headway.
> 
> Also note that as of v2, we support a virtio-vbus transport, and therefore
> will soon be able to compare "Virtio-net (VBUS)" as an additional target in
> the near future once we have developed a virtio-net backend for the host.
> This virtio-net(pci) to virtio-net(vbus) comparison is probably more
> interesting than comparing to Venet as it would be more apples to apples.
> Also it would be nice to only need one PV driver per IO subsystem in the
> long term.
> 
> Changes v2->v3:
> ------------------
> 
> *) VBUS now renders as a PCI/MSI device instead of via cpuid/dynirq
> *) Dropped dynirq (replaced with MSI facility)
> *) Dropped "reset" patch in favor of more reliably detecting reset via BUSOPEN
> *) Incorporated more review feedback from Stephen Hemminger on vbus-enet
>  driver
> *) Added support for setting the guests MAC during host config (Pat Mullaney)
> *) Cleaned up documentation per feedback from Ben Hutchings
> *) Numerous small tweaks to clean up things like warnings, comments, etc.
>    (Alex Tsariounov, Greg Haskins)
> *) Fixed Kconfig dependency problem with virtio-vbus with feedback from
>    Peter Morreale.
> 
> Changes v1->v2:
> 
> *) Incorporated review feedback from Stephen Hemminger on vbus-enet driver
> *) Added support for connecting to vbus devices from userspace
> *) Added support for a virtio-vbus transport to allow virtio drivers to
>    work with vbus (needs testing and backend models).
> 
> Todo:
> *) Beef up the userspace event channel ABI to support different event types
> *) Add memory-registration support
> *) Develop some virtio backend devices.
> *) Support ethtool_ops for venet.
> *) Convert from MSI to MSIX to truely support multiple vectors
> 
> ---------------------------------------
> 
> For more details, please see our Wiki at 
> 
> http://developer.novell.com/wiki/index.php/Virtual-bus
> 
> 
> 
> 
> 
> ---
> 
> Gregory Haskins (16):
>       virtio: add a vbus transport
>       vbus: add a userspace connector
>       kvm: Add guest-side support for VBUS
>       kvm: Add VBUS support to the host
>       venettap: add scatter-gather support
>       venet: add scatter-gather support
>       venet-tap: Adds a "venet" compatible "tap" device to VBUS
>       net: Add vbus_enet driver
>       venet: add the ABI definitions for an 802.x packet interface
>       ioq: add vbus helpers
>       ioq: Add basic definitions for a shared-memory, lockless queue
>       vbus: add a "vbus-proxy" bus model for vbus_driver objects
>       vbus: add bus-registration notifiers
>       vbus: add connection-client helper infrastructure
>       vbus: add virtual-bus definitions
>       shm-signal: shared-memory signals
> 
> Patrick Mullaney (1):
>       venet-tap: add the ability to set the client's mac address via sysfs
> 
> 
>  Documentation/vbus.txt           |  385 +++++++++
>  arch/x86/Kconfig                 |   11 
>  arch/x86/include/asm/kvm_para.h  |    1 
>  arch/x86/kvm/Kconfig             |    9 
>  arch/x86/kvm/Makefile            |    3 
>  arch/x86/kvm/x86.c               |    6 
>  arch/x86/kvm/x86.h               |   12 
>  drivers/Makefile                 |    2 
>  drivers/net/Kconfig              |   13 
>  drivers/net/Makefile             |    1 
>  drivers/net/vbus-enet.c          |  898 +++++++++++++++++++++
>  drivers/vbus/devices/Kconfig     |   17 
>  drivers/vbus/devices/Makefile    |    1 
>  drivers/vbus/devices/venet-tap.c | 1641 ++++++++++++++++++++++++++++++++++++++
>  drivers/vbus/proxy/Makefile      |    2 
>  drivers/vbus/proxy/kvm.c         |  751 +++++++++++++++++
>  drivers/virtio/Kconfig           |   15 
>  drivers/virtio/Makefile          |    1 
>  drivers/virtio/virtio_vbus.c     |  496 +++++++++++
>  fs/proc/base.c                   |   96 ++
>  include/linux/ioq.h              |  410 +++++++++
>  include/linux/kvm.h              |    7 
>  include/linux/kvm_host.h         |   26 +
>  include/linux/kvm_para.h         |   58 +
>  include/linux/sched.h            |    4 
>  include/linux/shm_signal.h       |  188 ++++
>  include/linux/vbus.h             |  166 ++++
>  include/linux/vbus_client.h      |  115 +++
>  include/linux/vbus_device.h      |  424 ++++++++++
>  include/linux/vbus_driver.h      |   80 ++
>  include/linux/vbus_userspace.h   |   48 +
>  include/linux/venet.h            |   82 ++
>  include/linux/virtio_vbus.h      |  163 ++++
>  kernel/Makefile                  |    1 
>  kernel/exit.c                    |    2 
>  kernel/fork.c                    |    2 
>  kernel/vbus/Kconfig              |   56 +
>  kernel/vbus/Makefile             |   11 
>  kernel/vbus/attribute.c          |   52 +
>  kernel/vbus/client.c             |  543 +++++++++++++
>  kernel/vbus/config.c             |  275 ++++++
>  kernel/vbus/core.c               |  626 ++++++++++++++
>  kernel/vbus/devclass.c           |  124 +++
>  kernel/vbus/map.c                |   72 ++
>  kernel/vbus/map.h                |   41 +
>  kernel/vbus/proxy.c              |  216 +++++
>  kernel/vbus/shm-ioq.c            |   89 ++
>  kernel/vbus/userspace-client.c   |  485 +++++++++++
>  kernel/vbus/vbus.h               |  117 +++
>  kernel/vbus/virtio.c             |  627 +++++++++++++++
>  lib/Kconfig                      |   21 
>  lib/Makefile                     |    2 
>  lib/ioq.c                        |  298 +++++++
>  lib/shm_signal.c                 |  186 ++++
>  virt/kvm/kvm_main.c              |   10 
>  virt/kvm/vbus.c                  | 1392 ++++++++++++++++++++++++++++++++
>  56 files changed, 11380 insertions(+), 0 deletions(-)
>  create mode 100644 Documentation/vbus.txt
>  create mode 100644 drivers/net/vbus-enet.c
>  create mode 100644 drivers/vbus/devices/Kconfig
>  create mode 100644 drivers/vbus/devices/Makefile
>  create mode 100644 drivers/vbus/devices/venet-tap.c
>  create mode 100644 drivers/vbus/proxy/Makefile
>  create mode 100644 drivers/vbus/proxy/kvm.c
>  create mode 100644 drivers/virtio/virtio_vbus.c
>  create mode 100644 include/linux/ioq.h
>  create mode 100644 include/linux/shm_signal.h
>  create mode 100644 include/linux/vbus.h
>  create mode 100644 include/linux/vbus_client.h
>  create mode 100644 include/linux/vbus_device.h
>  create mode 100644 include/linux/vbus_driver.h
>  create mode 100644 include/linux/vbus_userspace.h
>  create mode 100644 include/linux/venet.h
>  create mode 100644 include/linux/virtio_vbus.h
>  create mode 100644 kernel/vbus/Kconfig
>  create mode 100644 kernel/vbus/Makefile
>  create mode 100644 kernel/vbus/attribute.c
>  create mode 100644 kernel/vbus/client.c
>  create mode 100644 kernel/vbus/config.c
>  create mode 100644 kernel/vbus/core.c
>  create mode 100644 kernel/vbus/devclass.c
>  create mode 100644 kernel/vbus/map.c
>  create mode 100644 kernel/vbus/map.h
>  create mode 100644 kernel/vbus/proxy.c
>  create mode 100644 kernel/vbus/shm-ioq.c
>  create mode 100644 kernel/vbus/userspace-client.c
>  create mode 100644 kernel/vbus/vbus.h
>  create mode 100644 kernel/vbus/virtio.c
>  create mode 100644 lib/ioq.c
>  create mode 100644 lib/shm_signal.c
>  create mode 100644 virt/kvm/vbus.c
> 
> -- 
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email-masked]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
> 

-- 
-------------------------------------
Nikola CIPRICH
LinuxBox.cz, s.r.o.
28. rijna 168, 709 01 Ostrava

tel.:   +420 596 603 142
fax:    +420 596 621 273
mobil:  +420 777 093 799

www.linuxbox.cz

mobil servis: +420 737 238 656
email servis: [email-masked]
-------------------------------------