Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 12 Jul 2016 03:16:27 +0200
From:      Jakub Klama <jakub.klama@uj.edu.pl>
To:        Paul Vixie <paul@redbarn.org>
Cc:        freebsd-virtualization@freebsd.org
Subject:   Re: [Differential] D7185: Add virtio-console support to bhyve
Message-ID:  <EB985B8F-1A88-4EE1-AEE6-622F117931A2@uj.edu.pl>
In-Reply-To: <57843C3D.80102@redbarn.org>
References:  <differential-rev-PHID-DREV-h346qsj6dfo524z3qnfy-req@FreeBSD.org> <5783D6FF.7010107@redbarn.org> <FCF5C7E6-2BCF-4729-BC2B-788E1FE74BCE@uj.edu.pl> <5783E2FE.1040309@redbarn.org> <EDFB1E4C-755F-4D2F-808C-E45A31C3EE2C@uj.edu.pl> <5783E64B.9010608@redbarn.org> <6B5AEBF8-98B0-4031-A3E3-A1EBC8B4B763@uj.edu.pl> <57841572.7060903@redbarn.org> <577FFDDF-7EC5-4143-AA1B-858BA8C3287F@uj.edu.pl> <57843C3D.80102@redbarn.org>

next in thread | previous in thread | raw e-mail | index | archive | help

> Wiadomo=C5=9B=C4=87 napisana przez Paul Vixie <paul@redbarn.org> w =
dniu 12.07.2016, o godz. 02:39:
>=20
> Jakub Klama wrote:
>=20
>> It doesn't speak any protocol. virtio-console is a pipe. it pushes
>> bytes back and forth. Name is indeed unfortunate, it should have
>> been called virtio-pipe, but virtio-console is how the virtio
>> specification calls it.
>=20
> if it's never going to appear as /dev/console or any other tty-like
> device to the guest, then i won't care what it looks like on the host.
> however, you said it could carry resize events, which leads me to
> believe that the name (vertio-console) is not wrong, and it is a tty =
to the guest, and in my view that means it should be a tty to the host.
>=20

Well, it *can* be a tty to the host, but doesn't need to be. Driver =
supports multiple ports, and every port can be marked as a "console" =
port. Linux guests create regular character devices for "normal" =
virtio-console ports and ttys for "console" ports. My code doesn't =
support "console" ports yet at all.

I agree that the console port should be a tty on the host. But there are =
some things to consider:
* There can be more than one - how do we receive resize events from =
every pty? polling? fork per pty?
* It doesn't necessarily need to be connected to bhyve process =
stdin/stdout
* If bhyve opens pty(s), how would it communicate ptsname() back to the =
user?

> please explain how your proposed addition to bhyve handles resize =
events but is not actually related to tty use by either the guest or =
host.
>=20

It doesn't, that's just not supported yet :)

>> If we were to use virtio-console as a system console, then using a
>> pseudo tty and forwarding pty resize notifications as resize control
>> events to the guest is totally fine and desired (at least as one of
>> the options). However, as I said, unix domain socket is perfect fit
>> for using is at a regular bidirectional pipe.
>=20
> if that pipe has resize events encoded in it, as you said earlier, =
then it has to have a protocol, and it is not just a bidirectional pipe.
>=20

Pipe itself doesn't have resize events. Resize events are transmitted =
out of band, in a separate control queue. That out of band communication =
is not visible to the unix domain socket consumer. It could be made =
visible in two ways: a) by implementing multiplexing in the unix domain =
socket protocol b) by using pseudo tty, connecting pty data stream to =
the pipe and handing resizes separately.

> please explain more about your use case. what will this device look =
like to the guest, and what application do you expect to have running on =
the host to talk to this unix domain socket?

We're using it in freenas-vm-tools, a "guest additions" package that =
would allow host-guest interactions, such as automatic mounting of the =
shared 9P storage when being added in the hypervisor GUI, synchronizing =
time, potentially also suspending the I/O while snapshotting the VM =
datasets, and so on. In the guest, virtio-console is visible as a =
regular character device (/dev/virtio-ports/org.freenas.vm-tools). On =
the host side, FreeNAS 10 middleware talks to it.

Jakub=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?EB985B8F-1A88-4EE1-AEE6-622F117931A2>