[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] libvirt, libxl and QDISKs
Ian Campbell wrote: > On Thu, 2013-04-25 at 14:22 +0100, Dave Scott wrote: > >> On 25/04/13 13:43, Ian Campbell wrote: >> >>> On Thu, 2013-04-25 at 13:12 +0100, Dave Scott wrote: >>> >>>> On 25/04/13 12:57, Ian Campbell wrote: >>>> >>>>> On Thu, 2013-04-25 at 12:55 +0100, Stefano Stabellini wrote: >>>>> >>>>> >>>>>> Right, but going back to the original question: if we have in our hands >>>>>> something that is not vhd, raw or qcow and blktap2 is available, >>>>>> should we really try to pass it to it? >>>>>> >>>>> That's not quite the original question because in that case it was raw, >>>>> at least as far as the libxl interface is concerned. >>>>> >>>>> >>>>>> We do know that blktap2 only handles qcow, qcow2, raw and vhd (and the >>>>>> implementation of the first two formats is too buggy to be used). >>>>>> >>>>>> Thus I think that the answer is pretty obvious here: we should try with >>>>>> QEMU, whose supported format list is way wider. >>>>>> >>>>> Which I think we do, we only try and use blktap for raw and vhd. >>>>> >>>> As well as the disk format dimension (vhd, qcow2 etc) there's also the >>>> network disk access protocol (iSCSI, ceph/RBD, sheepdog?). Although both >>>> blktap/tapdisk can handle raw, alas all the interesting (perhaps I'm >>>> showing my bias here ;-) disk access protocols are in qemu. So if we >>>> default to blktap/tapdisk we can only handle raw *files*, whereas if we >>>> default to qemu we can also do these new fancy things as well. >>>> >>> Remind me why you can't specify backend=qdisk explicitly? Does libvirt >>> not propagate anything like that? >>> >> I'll give this a go tomorrow when I'm not at the mercy of dodgy wifi :-) >> From my reading of the libvirt code it does allow the selection of a >> driverName from the set "tap" "tap2" "file" and "phy". >> > > In libxl the choices are phy, tap and qdisk. There's no file nor any > distinction between tap and tap2. I expect the libxl libvirt driver is > trying to make things easier for people migrating from xend (which is > to be applauded). > Right. 'file' is mapped to backend 'tap' and format 'raw'. In fact, I should just post the code here for review :). For a bit of context, l_disk is libvirt's definition, and x_disk is libxl's. Comments on this mapping welcome, keeping in mind Ian's point about migrating from xend. if (l_disk->driverName) { if (STREQ(l_disk->driverName, "tap") || STREQ(l_disk->driverName, "tap2")) { switch (l_disk->format) { case VIR_STORAGE_FILE_QCOW: x_disk->format = LIBXL_DISK_FORMAT_QCOW; x_disk->backend = LIBXL_DISK_BACKEND_QDISK; break; case VIR_STORAGE_FILE_QCOW2: x_disk->format = LIBXL_DISK_FORMAT_QCOW2; x_disk->backend = LIBXL_DISK_BACKEND_QDISK; break; case VIR_STORAGE_FILE_VHD: x_disk->format = LIBXL_DISK_FORMAT_VHD; x_disk->backend = LIBXL_DISK_BACKEND_TAP; break; case VIR_STORAGE_FILE_NONE: /* No subtype specified, default to raw/tap */ case VIR_STORAGE_FILE_RAW: x_disk->format = LIBXL_DISK_FORMAT_RAW; x_disk->backend = LIBXL_DISK_BACKEND_TAP; break; default: virReportError(VIR_ERR_INTERNAL_ERROR, _("libxenlight does not support disk driver %s"), virStorageFileFormatTypeToString(l_disk->format)); return -1; } } else if (STREQ(l_disk->driverName, "file")) { x_disk->format = LIBXL_DISK_FORMAT_RAW; x_disk->backend = LIBXL_DISK_BACKEND_TAP; } else if (STREQ(l_disk->driverName, "phy")) { x_disk->format = LIBXL_DISK_FORMAT_RAW; x_disk->backend = LIBXL_DISK_BACKEND_PHY; } else { virReportError(VIR_ERR_INTERNAL_ERROR, _("libxenlight does not support disk driver %s"), l_disk->driverName); return -1; } } else { /* * If driverName is not specified, default to raw as per * xl-disk-configuration.txt in the xen documentation and let * libxl pick a suitable backend. */ x_disk->format = LIBXL_DISK_FORMAT_RAW; x_disk->backend = LIBXL_DISK_BACKEND_UNKNOWN; } > >> It looks like we could define a "qdisk" driverName. >> > > Yes, I think this would work. WRT to your comment below it looks like > other libvirt drivers call this driver "qemu". > IMO, we should just extend the above to map driverName 'qemu' to backend 'qdisk'. But what about the formats? I though qdisk could handle all of them, particularly with qemu-upstream, even vmdk? > >> Actually this reminds me of a general concern I had: I worry that people >> who choose to use libvirt will likely use all the default options, and >> not customise their code too much for a specific hypervisor. After all, >> if they wanted to customise their code for xen they would just use libxl >> and use the richer interface. I think we ought to make sure as much >> stuff just works by default as possible. In my ideal world it would be >> possible to take a simple libvirt domain configuration (perhaps one >> which used to run on kvm) and run it on xen, transparently benefiting >> from xen features such as driver domains (and automatic blktap/qemu >> selection?). I think if the domain XML requires too much tweaking then >> people will just not use the features or may give up altogether. >> > > This would be ideal, I seem to remember hearing that disk configuration > was something which libvirt didn't abstract, tending to just expose > underlying configuration strings of the underlying toolstack. So this is > one area where you actually have to change things when you migrate > between hypervisors or they won't work at all. > For the most part, that is true, unless you were using a minimal configuration and letting the individual hypervisor driver choose defaults. It would probably work with raw images and no driver element defined, e.g. <disk type='file' device='disk'> <source file='/path/to/disk.raw'/> <target dev='hda' bus='ide/> </disk> Regards, Jim _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |