This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
Home Products Support Community News


[Xen-devel] Problem with xenconsole

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] Problem with xenconsole
From: Christoph Egger <Christoph.Egger@xxxxxxx>
Date: Tue, 19 Aug 2008 17:54:40 +0200
Delivery-date: Tue, 19 Aug 2008 08:55:38 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: KMail/1.9.7


Something strange is going on with the xenconsole:

There is no console output on the first domain I connect to.
Connecting to any further domain shows console output.
This impacts both PV and HVM guests (latter one only
if serial console is configured).

Console input is working so you can work blindly on it
(or connect via ssh :)

How to reproduce:

Boot your Xen machine, make sure xend is running.

Launch some guests and connect to the console with:

xm create -c <guest-config>


xm create <guest-config>
xm console <domid>

*My* understanding how xenconsole works:

xenconsoled opens one tty for each launched domU via openpty().
xenconsoled tells xenstored which pty (e.g. /dev/pts/3) is
used for that domU.
The masterfd will be used for console input/output.
It writes anything read from the ring-buffer into
the pty (= console output) and writes anything read from the pty
into the ring-buffer (= console input).
xenconsoled multiplexes the console ring-buffer content to the different
domUs ptys.

When the user connects to the console, the xenconsole client
runs. It queries xenstored which pty to use for that domU.
It uses select() to wait for any input from stdin or any output
from the pty becoming available.
When the user types something on the keyboard, xenconsole reads
this from stdin and writes this into the pty and returns
back to select().
When output from the pty is available, xenconsole reads it
from the pty and writes this to stdout.

What I figured out or what is going wrong:

I ktraced xenconsoled, launched a guest
and connected to its console.

In the ktrace I saw, xenconsoled (= daemon)
actually receives the console output
and writes into the pty.

I also ktraced xenconsole (= client) and I also put some debug 
fprintf(stderr, ...) into xenconsole to noticed, select() reacts as
expected on console input.
But: On the first guest I connect to, select() does not notice when
an output is available. That is why no console output is there and
why you can work blindly on the guest.
On any further guest you connect to, select() actually does notice
when an output is available and xenconsole writes this to stdout.

Anyone have seen this, too? I suspect there's some
terminal initialization missing in xensonsoled (daemon) but
I'm stuck there.


AMD Saxony, Dresden, Germany
Operating System Research Center

Legal Information:
AMD Saxony Limited Liability Company & Co. KG
Sitz (Geschäftsanschrift):
   Wilschdorfer Landstr. 101, 01109 Dresden, Deutschland
Registergericht Dresden: HRA 4896
vertretungsberechtigter Komplementär:
   AMD Saxony LLC (Sitz Wilmington, Delaware, USA)
Geschäftsführer der AMD Saxony LLC:
   Dr. Hans-R. Deppe, Thomas McCoy

Xen-devel mailing list

<Prev in Thread] Current Thread [Next in Thread>