[libvirt] Add driver support for Native Linux KVM Tool
Osier Yang
jyang at redhat.com
Fri Nov 11 11:30:19 UTC 2011
Sorry, I missed the title. :(
Osier
On 11/11/2011 07:56 PM, Osier Yang wrote:
> Hi, all
>
> This is a basic implementation of libvirt Native Linux KVM
> Tool driver. Note that this is just made with my own interest
> and spare time, it's not an endorsement/effort by Red Hat,
> and it isn't supported by Red Hat officially.
>
> Basically, the driver is designed as *stateful*, as KVM tool
> doesn't maintain any info about the guest except a socket which
> for its own IPC. And it's implemented by using KVM tool binary,
> which is name "kvm" currently, along with cgroup controllers
> "cpuacct", and "memory" support. And as one of KVM tool's
> pricinple is to allow both the non-root and root user to play with.
> The driver is designed to support root and non-root too, just
> like QEMU does. Example of the connection URI:
>
> virsh -c kvmtool:///system
> virsh -c kvmtool:///session
> virsh -c kvmtool+unix:///system
> virsh -c kvmtool+unix:///session
>
> The implementation can support more or less than 15 virsh commands
> currently, including basic domain cycle operations (define/undefine,
> start/destroy, suspend/resume, console, setmem, schedinfo, dumpxml,
> ,autostart, dominfo, etc.)
>
> About the domain configuration:
> * "kernel": must be specified as KVM tool only support boots
> from the kernel currently (no integration with BIOS app yet).
>
> * "disk": only virtio bus is supported, and device type must be 'disk'.
>
> * "serial/console": only one console is supported, of type serial or
> virtio (can extend to support multiple console as long as kvm tool
> supports, libvirt already supported mutiple console, see upstream
> commit 0873b688c).
>
> * "p9fs": only support specifying the source dir, and mount tag, only
> type of 'mount' is supported.
>
> * "memballoon": only virtio is supported, and there is no way
> to config the addr.
>
> * Multiple "disk" and "p9fs" is supported.
>
> * Graphics and network are not supported, will explain below.
>
> Please see "[PATCH 7/8]" for an example of the domain config. (which
> contains all the XMLs supported by current implementation).
>
> The problems of Native Linux KVM Tool from libvirt p.o.v:
>
> * Some destros package "qemu-kvm" as "kvm", also "kvm" is a long
> established name for "KVM" itself, so naming the project as
> "kvm" might be not a good idea. I assume it will be named
> as "kvmtool" in this implementation, never mind this if you
> don't like that, it can be updated easily. :-)
>
> * It still doesn't have an official package yet, even no "make install".
> means we have no way to check the dependancy and do the checking
> when 'configure'. I assume it will be installed as "/usr/bin/kvmtool"
> in this implementation. This is the main reason which can prevents
> upstream libvirt accepting the patches I guess.
>
> * Lacks of options for user's configuration, such as "-vnc", there
> is no option for user to configure the properties for the "vnc",
> such as the port. It hides things, doesn't provide ways to query
> the properties too, this causes problems for libvirt to add the
> vnc support, as vnc clients such as virt-manager, virt-viewer,
> have no way to connect the guest. Even vncviewer can't.
>
> * KVM tool manages the network completely itself (with DHCP support?),
> no way to configure, except specify the modes (user|tap|none). I
> have not test it yet, but it should need explicit script to setup
> the network rules(e.g. NAT) for the guest access outside world.
> Anyway, there is no way for libvirt to control the guest network.
>
> * There is a gap about the domain status between KVM tool and libvirt,
> it's caused by KVM tool unlink()s the guest socket when user exits
> from console (both text and graphic), but libvirt still think the
> guest is running.
>
> * KVM tool uses $HOME/.kvm_tool as the state dir, and no way to configure,
> I made a small patch to allow KVM tool accept a ENV variable,
> which is "KVM_STATE_DIR", it's used across the driver. I made a
> simple patch against kvm tool to let the whole patches work. See
> "[PATCH] kvm tools.....". As generally we want the state dir of
> a driver can be "/var/run/libvirt/kvmtool/..." for root user or
> "$HOME/.libvirt/kvmtool/run" for non-root user.
>
> * kvmtoolGetVersion is just broken now, as what "./kvm version" returns
> is something like "3.0.rc5.873.gb73216", however, libvirt wants things
> like "2.6.40.6-0". This might be not a problem as long as KVM tool
> has a official package.
>
> * console connection is implemented by setup ptys in libvirt, stdout/stderr
> of kvm tool process is redirected to the master pty, and libvirt connects
> to the slave pty. This works fine now, but it might be better if kvm
> tool could provide more advanced console mechanisms. Just like QEMU
> does?
>
> * Not much ways existed yet for external apps or user to query the guest
> informations. But this might be changed soon per KVM tool grows up
> quickly.
>
> * It will be quite desireable if kvm tool could report the capabilities,
> of which is lacked by QEMU forever (seems so), it causes much pain for
> upper layer mgmt apps. See the RFC by Daniel Berrange in QEMU list
> for more details:
>
> http://lists.nongnu.org/archive/html/qemu-devel/2010-06/msg00921.html
>
> As a conclusion, it seems to me that KVM tool dosesn't consider too much
> about the interface for upper layer management tools, (generally, upper
> layer apps will want good interface to set/get), which might be no good
> for KVM tool future development.
>
> Thoughts, and opinions? Thanks.
>
> [PATCH 1/7] kvmtool: Add configure support
> [PATCH] kvm tools: Introduce an ENV variable for the state dir
> [PATCH 2/7] kvmtool: Add documents
> [PATCH 3/7] kvmtool: Add new enums and error codes for the driver
> [PATCH 4/7] kvmtool: Add hook support for kvmtool domain
> [PATCH 5/7] kvmtool: Add new domain type
> [PATCH 6/7] conf: Set source type of the stub console
> [PATCH 7/7] kvmtool: Implementation for kvm tool driver
>
> Regards,
> Osier
>
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
More information about the libvir-list
mailing list