On Mon, Jul 18, 2016 at 11:21:18PM +0900, Namhyung Kim wrote: > On Mon, Jul 18, 2016 at 11:03:53AM +0100, Stefan Hajnoczi wrote: > > On Mon, Jul 18, 2016 at 01:37:40PM +0900, Namhyung Kim wrote: > > > From: Namhyung Kim <namhyung@xxxxxxxxx> > > > > > > Add virtio pstore device to allow kernel log files saved on the host. > > > It will save the log files on the directory given by pstore device > > > option. > > > > > > $ qemu-system-x86_64 -device virtio-pstore,directory=dir-xx ... > > > > > > (guest) # echo c > /proc/sysrq-trigger > > > > > > $ ls dir-xx > > > dmesg-0.enc.z dmesg-1.enc.z > > > > > > The log files are usually compressed using zlib. Users can see the log > > > messages directly on the host or on the guest (using pstore filesystem). > > > > The implementation is synchronous (i.e. can pause guest code execution), > > does not handle write errors, and does not limit the amount of data the > > guest can write. This is sufficient for ad-hoc debugging and usage with > > trusted guests. > > > > If you want this to be available in environments where the guest isn't > > trusted then there must be a limit on how much the guest can write or > > some kind of log rotation. > > Right. The synchronous IO is required by the pstore subsystem > implementation AFAIK (it uses a single psinfo->buf in the loop). The pstore subsystem in Linux may be synchronous but the QEMU device emulation does not have to be synchronous. Synchronous device emulation means that no other vcpu or QEMU main loop processing can occur while device emulation is blocked in a syscall. This can make the QEMU monitor unavailable for libvirt and management tools. The guest can experience jitter since vcpus freeze if they vmexit while device emulation is blocked (it holds the QEMU global mutex and prevents other QEMU threads from making progress). You could use include/io.h for asynchronous I/O (qio_channel_add_watch()). Stefan
Attachment:
signature.asc
Description: PGP signature