qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Jamie Lokier <jamie@shareable.org>
To: Amit Shah <amit.shah@redhat.com>
Cc: kvm@vger.kernel.org, Rusty Russell <rusty@rustcorp.com.au>,
	"Richard W.M. Jones" <rjones@redhat.com>,
	qemu-devel@nongnu.org, virtualization@lists.linux-foundation.org
Subject: Re: [Qemu-devel] Re: virtio-serial: An interface for host-guest communication
Date: Thu, 6 Aug 2009 18:37:40 +0100	[thread overview]
Message-ID: <20090806173740.GA1178@shareable.org> (raw)
In-Reply-To: <20090806140404.GA12083@amit-x200.redhat.com>

Amit Shah wrote:
> On (Thu) Aug 06 2009 [08:58:01], Anthony Liguori wrote:
> > Amit Shah wrote:
> >> On (Thu) Aug 06 2009 [08:29:40], Anthony Liguori wrote:
> >>   
> >>> Amit Shah wrote:
> >>>     
> >>>> Sure; but there's been no resistance from anyone from including the
> >>>> virtio-serial device driver so maybe we don't need to discuss that.
> >>>>         
> >>> There certainly is from me.  The userspace interface is not 
> >>> reasonable  for guest applications to use.
> >>>     
> >>
> >> One example that would readily come to mind is dbus. A daemon running on
> >> the guest that reads data off the port and interacts with the desktop by
> >> appropriate dbus commands. All that's needed is a stream of bytes and
> >> virtio-serial provides just that.
> >>   
> >
> > dbus runs as an unprivileged user, how does dbus know which  
> > virtio-serial port to open and who sets the permissions on that port?
> 
> The permission part can be handled by package maintainers and sysadmins
> via udev policies.
> 
> So all data destined for dbus consumption gets to a daemon and that
> daemon then sends it over to dbus.

virtio-serial is nice, easy, simple and versatile.  We like that; it
should stay that way.

dbus isn't a good match for this.

dbus is not intended for communication between hosts, by design.

It depends on per-app configuration files in
/etc/dbus/{session,system}.d/, which are expected to match the
installed services.

For this, the guest's files in /etc/dbus/ would have to match the QEMU
host host services in detail.  dbus doesn't have a good mechanism for
copying with version skew between both of them, because normally
everything resides on the same machine and the config and service are
updated at the same time.  This is hard to guarantee with a VM.

Apart from dbus, hard-coded meanings of small N in /dev/vmchN are
asking for trouble.  It is bound to break when widely deployed and
guest/host configs don't match.  It also doesn't fit comfortably when
you have, say, bob and alice both logged in with desktops on separate
VTs.  Clashes are inevitable, as third-party apps pick N values for
themselves then get distributed - unless N values can be large
(/dev/vmch44324 == kernelstats...).

Sysadmins shouldn't have to hand-configure each app, and shouldn't
have to repair clashes in defaults.  Just Work is better.

virtio-serial is nice.  The only ugly part is _finding_ the right
/dev/vmchN.

Fortunately, _any_ out-of-band id string or id number makes it perfect.

An option to specify PCI vendor/product ids in the QEMU host
configuration is good enough.

An option to specify one or more id strings is nicer.

Finally, Anthony hit on an interesting idea with USB.  Emulating USB
sucks.  But USB's _descriptors_ are quite effective, and the USB basic
protocol is quite reasonable too.

Descriptors are just a binary blob in a particular format, which
describe a device and also say what it supports, and what standard
interfaces can be used with it too.  Bluetooth is similar; they might
even use the same byte format, I'm not sure.

All the code for parsing USB descriptors is already present in guest
kernels, and the code for making appropriate device nodes and
launching apps is already in udev.  libusb also allows devices to be
used without a kernel driver, and is cross-platform.  There are plenty
of examples of creating USB descriptors in QEMU, and may be the code
can be reused.

The only down side of USB is that emulating it sucks :-)  That's mainly
due to the host controllers, and the way interrupts use polling.

So here's a couple of ideas:

   - virtio-usb, using virtio instead of a hardware USB host
     controller.  That would provide all the features of USB
     naturally, like hotplug, device binding, access from userspace,
     but with high performance, low overhead, and no interrupt polling.

     You'd even have the option of cross-platform guest apps, as well
     as working on all Linux versions, by emulating a host controller
     when the guest doesn't have virtio-usb.

     As a bonus, existing USB support would be accelerated.

   - virtio-serial providing a binary id blob, whose format is the
     same as USB descriptors.  Reuse the guest's USB parsing and
     binding to find and identify, but the actual device functionality
     would just be a byte pipe.

     That might be simple, as all it involves is a blob passed to the
     guest from QEMU.  QEMU would build the id blob, maybe reusing
     existing USB code, and the guest would parse the blob as it
     already does for USB devices, with udev creating devices as it
     already does.

-- Jamie

  reply	other threads:[~2009-08-06 17:37 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-07-27 18:04 [Qemu-devel] virtio-serial: An interface for host-guest communication Amit Shah
2009-07-27 18:04 ` [Qemu-devel] [PATCH 1/1] virtio_serial: A char device for simple guest <-> host communication Amit Shah
2009-07-27 18:04   ` [Qemu-devel] [PATCH 1/3] virtio-serial: virtio device for simple host <-> guest communication Amit Shah
2009-07-27 18:04     ` [Qemu-devel] [PATCH 2/3] vnc: add a is_vnc_active() helper Amit Shah
2009-07-27 18:04       ` [Qemu-devel] [PATCH 3/3] virtio-serial: vnc: support for sending / receiving guest clipboard Amit Shah
2009-08-05  0:03   ` [Qemu-devel] Re: [PATCH 1/1] virtio_serial: A char device for simple guest <-> host communication Rusty Russell
2009-08-05  5:12     ` Amit Shah
2009-08-05  9:58     ` Amit Shah
2009-07-27 20:22 ` [Qemu-devel] Re: virtio-serial: An interface for host-guest communication Anthony Liguori
2009-07-27 20:32   ` Daniel P. Berrange
2009-07-27 20:37     ` Anthony Liguori
2009-07-27 20:46     ` Jamie Lokier
2009-07-27 23:44       ` Anthony Liguori
2009-07-28 10:36         ` Amit Shah
     [not found]           ` <4A6F0048.1000103@codemonkey.ws>
2009-07-29  7:44             ` Amit Shah
2009-07-29  7:48               ` Gleb Natapov
2009-08-05 18:00                 ` Jamie Lokier
     [not found]         ` <20090728140029.GA16067@amd.home.annexia.org>
2009-07-28 14:48           ` Anthony Liguori
2009-07-28 14:55             ` Richard W.M. Jones
2009-07-28 15:00               ` Anthony Liguori
2009-08-03 19:57           ` Anthony Liguori
2009-08-05 17:57             ` Jamie Lokier
2009-08-05 18:00               ` Anthony Liguori
2009-08-06 10:38                 ` Amit Shah
2009-08-06 13:29                   ` Anthony Liguori
2009-08-06 13:41                     ` Amit Shah
2009-08-06 13:58                       ` Anthony Liguori
2009-08-06 14:04                         ` Amit Shah
2009-08-06 17:37                           ` Jamie Lokier [this message]
2009-08-07  6:38                             ` Amit Shah
2009-08-07 14:14                               ` Anthony Liguori
2009-08-10  6:55                                 ` Amit Shah
2009-08-10  9:47                                   ` Gerd Hoffmann
2009-08-10 13:02                                     ` Anthony Liguori
2009-08-10 14:02                                       ` Gerd Hoffmann
2009-08-10 14:20                                         ` Anthony Liguori
2009-08-10 15:34                                           ` Gerd Hoffmann
2009-08-10 16:59                                             ` Anthony Liguori
2009-08-10 17:27                                               ` Anthony Liguori
2009-08-12 18:27                                               ` Paul Brook
2009-08-14  8:15                                               ` Amit Shah
2009-08-14 13:29                                                 ` Anthony Liguori
2009-08-14 13:41                                                   ` Amit Shah
2009-08-20 13:42                                                   ` Amit Shah
2009-08-20 14:25                                                     ` Daniel P. Berrange
2009-08-20 14:38                                                       ` Amit Shah
2009-08-20 14:42                                                         ` Amit Shah
2009-08-14 13:49                                                 ` Gerd Hoffmann
2009-08-14 16:25                                                   ` Anthony Liguori
2009-08-20  7:31                                                     ` Rusty Russell
2009-08-20  7:44                                                       ` Gerd Hoffmann
2009-08-20  7:55                                                         ` Amit Shah
2009-08-20 17:10                                                           ` Jamie Lokier
2009-08-25 12:43                                                         ` Rusty Russell
2009-08-25 13:00                                                           ` Gerd Hoffmann
2009-08-10 14:20                                         ` Anthony Liguori
2009-08-10 23:09                                     ` Rusty Russell
2009-08-11  0:16                                       ` Anthony Liguori
2009-08-10 14:27                                   ` Anthony Liguori
2009-08-10 15:57                                     ` Gerd Hoffmann
2009-08-06 10:35               ` Amit Shah
2009-08-05 18:32             ` Richard W.M. Jones

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=20090806173740.GA1178@shareable.org \
    --to=jamie@shareable.org \
    --cc=amit.shah@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=qemu-devel@nongnu.org \
    --cc=rjones@redhat.com \
    --cc=rusty@rustcorp.com.au \
    --cc=virtualization@lists.linux-foundation.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).