qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [QAPI+QGA 3/3] QEMU Guest Agent (virtagent) v6


From: Zhi Yong Wu
Subject: Re: [Qemu-devel] [QAPI+QGA 3/3] QEMU Guest Agent (virtagent) v6
Date: Thu, 14 Jul 2011 21:53:29 +0800

On Thu, Jul 14, 2011 at 8:55 PM, Luiz Capitulino <address@hidden> wrote:
> On Thu, 14 Jul 2011 10:53:51 +0800
> Zhi Yong Wu <address@hidden> wrote:
>
>> HI, Michael,
>>
>> On Tue, Jul 5, 2011 at 9:21 PM, Michael Roth <address@hidden> wrote:
>> > This is Set 3/3 of the QAPI+QGA patchsets.
>> >
>> > These patches apply on top of qapi-backport-set2-v5, and can also be 
>> > obtained from:
>> > git://repo.or.cz/qemu/mdroth.git qapi-backport-set3-v6
>> >
>> > (Set1+2 are a backport of some of the QAPI-related work from Anthony's
>> > glib tree. The main goal is to get the basic code generation 
>> > infrastructure in
>> > place so that it can be used by the guest agent to implement a QMP-like 
>> > guest
>> > interface, and so that future work regarding the QMP conversion to QAPI 
>> > can be
>> > decoupled from the infrastructure bits. Set3 is the Qemu Guest Agent
>> > (virtagent), rebased on the new code QAPI code generation infrastructure. 
>> > This
>> > is the first user of QAPI, QMP will follow.)
>> > ___
>> >
>> > CHANGES SINCE V5:
>> >  - switched to using qemu malloc/list functions where possible
>> >  - removed unused proxy_path field in struct GAState
>> >  - pid file now opened write-only, removed lockf() in favor of O_EXCL, 
>> > added SIGINT/SIGTERM signal handlers to handle cleanup
>> >  - cleaned up error-handling, switched to asserts where appropriate, 
>> > removed unecessary gotos and NULL checks for qemu_free()/qobject_decref()
>> >  - refactored send_payload() using helper functions
>> >  - fixed improper handling of pidfile fd==0
>> >  - changed guest-shutdown's "shutdown_mode" param to "mode"
>> >  - switched to using kernel-generated FDs for guest-file-open rather than 
>> > an autoincrement value
>> >  - add maximum chunk size of guest-file-read/guest-file-write
>> >  - added checks to avoid guest-file-write from writing data beyond the 
>> > provided data buffer
>> >  - made logging best-effort, removed handling of failures to log as errors
>> >  - guest-shutdown exec errors now logged to guest syslog, clarified 
>> > shutdown's asynchronous, no gauruntee nature in schema.
>> >
>> > CHANGES SINCE V4:
>> >  - Removed timeout mechanism via worker thread/pthread_cancel due to 
>> > potential memory leak. Will re-introduce guest-side timeout support in 
>> > future version.
>> >  - Fixed up fsfreeze code to use enums specified within the guest agent's 
>> > qapi schema.
>> >  - Fixed memory leak due to a log statement, and added missing cleanup 
>> > functions for heap-allocated g_error objects.
>> >  - Made "mode" param to guest-file-open optional, defaults to "r" 
>> > (read-only)
>> >
>> > CHANGES SINCE V3:
>> >  - Fixed error-handling issues in fsfreeze commands leading to certain 
>> > mounted directories causing freeze/thaw operations to fail
>> >  - Added cleanup hook to thaw filesystems on graceful guest agent exit
>> >  - Removed unused enum values and added additional details to schema 
>> > documentation
>> >  - Fixed build issue that was missed due to deprecated files in source 
>> > tree, removed unused includes
>> >
>> > CHANGES SINCE V2:
>> >  - Rebased on new QAPI code generation framework
>> >  - Dropped ability for QMP to act as a proxy for the guest agent, will be 
>> > added when new QMP server is backported from Anthony's glib tree
>> >  - Replaced negotiation/control events with a simple 2-way handshake 
>> > implemented by a standard RPC (guest-sync)
>> >  - Removed enforcement of "pristine" sessions, state is now 
>> > global/persistant across multiple clients/connections
>> >  - Fixed segfault in logging code
>> >  - Added Jes' filesystem freeze patches
>> >  - General cleanups
>> >
>> > CHANGES SINCE V1:
>> >  - Added guest agent worker thread to execute RPCs in the guest. With this 
>> > in place we have a reliable timeout mechanism for hung commands, currently 
>> > set at 30 seconds.
>> >  - Add framework for registering init/cleanup routines for stateful RPCs 
>> > to clean up after themselves after a timeout.
>> >  - Added the following RPCs: guest-file-{open,close,read,write,seek}, 
>> > guest-shutdown, guest-info, and removed stubs for guest-view-file (now 
>> > deprecated)
>> >  - Added GUEST_AGENT_UP/GUEST_AGENT_DOWN QMP events
>> >  - Switched to a TCP-style host-initiated 3-way handshake for channel 
>> > negotiation, this simplifies client negotiation/interaction over the wire
>> >  - Added configurable log level/log file/pid file options for guest agent
>> >  - Various fixes for bugs/memory leaks and checkpatch.pl fixups
>> >
>> > ISSUES/TODOS:
>> >  - Add unit tests for guest agent wire protocol
>> >
>> > OVERVIEW
>> >
>> > For a better overview of what these patches are meant to accomplish, 
>> > please reference the RFC for virtagent:
>> >
>> > http://comments.gmane.org/gmane.comp.emulators.qemu/96096
>> >
>> > These patches integrate the previous virtagent guest agent work directly 
>> > in QAPI/QMP to leverage it's auto-generated marshalling code. This has 
>> > numerous benefits:
>> >
>> >  - addresses previous concerns over relying on external libraries to 
>> > handle data encapsulation
>> >  - reduces the need for manual unmarshalling of requests/responses, which 
>> > makes adding new RPCs much safer/less error-prone, as well as cutting down 
>> > on redundant code
>> >  - QAPI documentation aligns completely with guest-side RPC implementation
>> >  - is Just Better (TM)
>> >
>> > BUILD/USAGE
>> >
>> > build:
>> >  ./configure --target-list=x86_64-softmmu
>> >  make
>> >  make qemu-ga #should be built on|for target guest
>> >
>> > start guest:
>> >  qemu \
>> >  -drive file=/home/mdroth/vm/rhel6_64_base.raw,snapshot=off,if=virtio \
>> >  -net nic,model=virtio,macaddr=52:54:00:12:34:00 \
>> >  -net tap,script=/etc/qemu-ifup \
>> >  -vnc :1 -m 1024 --enable-kvm \
>> >  -chardev socket,path=/tmp/qga.sock,server,nowait,id=qga \
>> >  -device virtio-serial \
>> >  -device virtserialport,chardev=qga,name=qga"
>> >
>> > use guest agent:
>> >  ./qemu-ga -h
>> >  ./qemu-ga -c virtio-serial -p /dev/virtio-ports/qga
>> Is the above command "./qemu-ga" issued on guest teminal or hypervisor 
>> teminal?
>
> In the guest.

Can we make it work similiar as a linux service? It may is more
convenient to use.

address@hidden ~]# service qemu-ga start/stop/status/restart

address@hidden ~]# chkconfig qemu-ga on/off

>
>>
>> >
>> > start/use qmp:
>> > address@hidden:~$ sudo socat unix-connect:/tmp/qga.sock readline
>> >  {"execute":"guest-sync", "arguments":{"id":1234}}
>> >  {"return": 1234}
>> >
>> >  {"execute":"guest-info"}
>> >  {"return": {}}
>> >
>> >  {"execute": "guest-info"}
>> >  {"return": {"version": "1.0"}}
>> >
>> >  {"execute":"guest-file-open", 
>> > "arguments":{"filepath":"/tmp/testqga","mode":"w+"}}
>> >  {"return": 0}
>> >  {"execute":"guest-file-write", 
>> > "arguments":{"filehandle":0,"data_b64":"aGVsbG8gd29ybGQhCg==","count":13}} 
>> > // writes "hello world!\n"
>> >  {"return": {"count": 13, "eof": false}}
>> >
>> >  {"execute":"guest-file-open", 
>> > "arguments":{"filepath":"/tmp/testqga","mode":"r"}}
>> >  {"return": 1}
>> >  {"execute":"guest-file-read", "arguments":{"filehandle":1,"count":1024}}
>> >  {"return": {"buf": "aGVsbG8gd29ybGQhCg==", "count": 13, "eof": true}}
>> >  {"execute":"guest-file-close","arguments":{"filehandle":1}}
>> >  {"return": {}}
>> >
>> >  Makefile                        |   22 +-
>> >  configure                       |    1 +
>> >  qapi-schema-guest.json          |  202 +++++++++++++
>> >  qemu-ga.c                       |  631 
>> > +++++++++++++++++++++++++++++++++++++++
>> >  qerror.c                        |    4 +
>> >  qerror.h                        |    3 +
>> >  qga/guest-agent-command-state.c |   73 +++++
>> >  qga/guest-agent-commands.c      |  522 ++++++++++++++++++++++++++++++++
>> >  qga/guest-agent-core.h          |   30 ++
>> >  9 files changed, 1483 insertions(+), 5 deletions(-)
>> >
>> >
>> >
>
>



-- 
Regards,

Zhi Yong Wu



reply via email to

[Prev in Thread] Current Thread [Next in Thread]