Port-xen archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Xen 3.3: Xenconsole on domain id 1




Hi,

Something strange is going on with the xenconsole:

There is no console output if domain id is "1".
This impacts both PV and HVM guests (latter one only
if serial console is configured).

Console output is there if domain id is anything else
than "1".

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 and xenbackendd
are running.

Launch your first guest and connect to the console with:

xm create -c <guest-config>

or

xm create <guest-config>
xm console 1


How xenconsole is supposed to work:

Interaction between Dom0 and the DomU happens through
a console ring-buffer, each entry can hold max. 512 chars.

The ring-buffer frontend is in the DomU, the ring-buffer
backend in the Dom0.
xenstored runs in the Dom0 and holds the information how to
access the ring-buffer.

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 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 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 fromt 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 the first guest (= domain id 1)
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 and I also put some debug fprintf(stderr, ...)
into xenconsole to noticed, select() reacts as expected on
console input.
But: If domain id is "1", 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.
If domain id is != "1", select() actually does notice when an output
is available and xenconsole writes this to stdout.



Open questions:

Why does select() not notice when the domU pty change? And why
only on domain id  "1" ?

Is there a (hidden) relation between select() and Xen-kernel code ?

select(), openpty() and ptyfs are supposed to work ?



Where I need help:

I need help to answer to open questions. :)



Christoph


Home | Main Index | Thread Index | Old Index