[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2] libxl: Add AHCI support for upstream qemu
On Tue, 23 Jun 2015, Fabio Fantoni wrote: > Usage: > ahci=0|1 (default=0) > > If enabled adds ich9 disk controller in ahci mode and uses it with > upstream qemu to emulate disks instead of ide. > It doesn't support cdroms which still using ide (cdroms will use > "-device ide-cd" as new qemu parameter) > Ahci requires new qemu parameter but for now other emulated disks cases > remains with old ones (I did it in other patch, not needed by this one) > I did it as libxl parameter disabled by default to avoid possible > problems: > - with save/restore/migration (restoring with ahci a domU that was with > ide instead) > - windows < 8 without pv drivers (a registry key change is needed for > AHCI<->IDE change FWIK to avoid possible blue screen) > - windows XP or older that many not support ahci by default. > Setting AHCI with libxl parameter and default to disabled seems the best > solution. > AHCI increase hvm domUs boot performance. On linux hvm domU I saw up to > only 20% of the previous total boot time, whereas boot time decrease a > lot on W7 domUs for most of boots I have done. Small difference in boot > time compared to ide mode on W8 and newer (probably other xen > improvements or fixes are needed not ahci related) > > Signed-off-by: Fabio Fantoni <fabio.fantoni@xxxxxxx> Acked-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> > > Changes in v2: > - libxl_dm.c: small code style fix > - added vbd-interface.txt changes > --- > docs/man/xl.cfg.pod.5 | 9 +++++++++ > docs/misc/vbd-interface.txt | 5 +++-- > tools/libxl/libxl.h | 10 ++++++++++ > tools/libxl/libxl_create.c | 1 + > tools/libxl/libxl_dm.c | 10 +++++++++- > tools/libxl/libxl_types.idl | 1 + > tools/libxl/xl_cmdimpl.c | 1 + > 7 files changed, 34 insertions(+), 3 deletions(-) > > diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5 > index a3e0e2e..7e16123 100644 > --- a/docs/man/xl.cfg.pod.5 > +++ b/docs/man/xl.cfg.pod.5 > @@ -904,6 +904,15 @@ default is B<cd>. > > =back > > +=item B<ahci=[0|1]> > + > +If enabled adds ich9 disk controller in ahci mode and uses it with > +upstream qemu to emulate disks instead of ide. It decrease boot time but > +may be not supported by default in windows xp and older windows. > +The default is disabled (0). > + > +=back > + > =head3 Paging > > The following options control the mechanisms used to virtualise guest > diff --git a/docs/misc/vbd-interface.txt b/docs/misc/vbd-interface.txt > index f873db0..afb6846 100644 > --- a/docs/misc/vbd-interface.txt > +++ b/docs/misc/vbd-interface.txt > @@ -3,18 +3,19 @@ Xen guest interface > > A Xen guest can be provided with block devices. These are always > provided as Xen VBDs; for HVM guests they may also be provided as > -emulated IDE or SCSI disks. > +emulated IDE, AHCI or SCSI disks. > > The abstract interface involves specifying, for each block device: > > * Nominal disk type: Xen virtual disk (aka xvd*, the default); SCSI > - (sd*); IDE (hd*). > + (sd*); IDE or AHCI (hd*). > > For HVM guests, each whole-disk hd* and and sd* device is made > available _both_ via emulated IDE resp. SCSI controller, _and_ as a > Xen VBD. The HVM guest is entitled to assume that the IDE or SCSI > disks available via the emulated IDE controller target the same > underlying devices as the corresponding Xen VBD (ie, multipath). > + In hd* case with ahci=1, disk will be AHCI via emulated ich9 controller. > > For PV guests every device is made available to the guest only as a > Xen VBD. For these domains the type is advisory, for use by the > diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h > index 0a7913b..6a3677d 100644 > --- a/tools/libxl/libxl.h > +++ b/tools/libxl/libxl.h > @@ -596,6 +596,16 @@ typedef struct libxl__ctx libxl_ctx; > #define LIBXL_HAVE_SPICE_STREAMINGVIDEO 1 > > /* > + * LIBXL_HAVE_AHCI > + * > + * If defined, then the u.hvm structure will contain a boolean type: > + * ahci. This value defines if ahci support is present. > + * > + * If this is not defined, the ahci support is ignored. > + */ > +#define LIBXL_HAVE_AHCI 1 > + > +/* > * LIBXL_HAVE_DOMAIN_CREATE_RESTORE_PARAMS 1 > * > * If this is defined, libxl_domain_create_restore()'s API has changed to > diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c > index 86384d2..8ca2481 100644 > --- a/tools/libxl/libxl_create.c > +++ b/tools/libxl/libxl_create.c > @@ -331,6 +331,7 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc, > libxl_defbool_setdefault(&b_info->u.hvm.nested_hvm, false); > libxl_defbool_setdefault(&b_info->u.hvm.usb, false); > libxl_defbool_setdefault(&b_info->u.hvm.xen_platform_pci, true); > + libxl_defbool_setdefault(&b_info->u.hvm.ahci, false); > > libxl_defbool_setdefault(&b_info->u.hvm.spice.enable, false); > if (!libxl_defbool_val(b_info->u.hvm.spice.enable) && > diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c > index 33f9ce6..9216028 100644 > --- a/tools/libxl/libxl_dm.c > +++ b/tools/libxl/libxl_dm.c > @@ -818,6 +818,8 @@ static int libxl__build_device_model_args_new(libxl__gc > *gc, > flexarray_append(dm_args, libxl__sprintf(gc, "%"PRId64, ram_size)); > > if (b_info->type == LIBXL_DOMAIN_TYPE_HVM) { > + if (libxl_defbool_val(b_info->u.hvm.ahci)) > + flexarray_append_pair(dm_args, "-device", "ahci,id=ahci0"); > for (i = 0; i < num_disks; i++) { > int disk, part; > int dev_number = > @@ -872,7 +874,13 @@ static int libxl__build_device_model_args_new(libxl__gc > *gc, > drive = libxl__sprintf > (gc, > "file=%s,if=scsi,bus=0,unit=%d,format=%s,cache=writeback", > pdev_path, disk, format); > - else if (disk < 4) > + else if (disk < 6 && libxl_defbool_val(b_info->u.hvm.ahci)) { > + flexarray_vappend(dm_args, "-drive", > + > GCSPRINTF("file=%s,if=none,id=ahcidisk-%d,format=%s,cache=writeback", > + pdev_path, disk, format), "-device", > GCSPRINTF("ide-hd,bus=ahci0.%d,unit=0,drive=ahcidisk-%d", > + disk, disk), NULL); > + continue; > + } else if (disk < 4) > drive = libxl__sprintf > (gc, > "file=%s,if=ide,index=%d,media=disk,format=%s,cache=writeback", > pdev_path, disk, format); > diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl > index 23f27d4..f107689 100644 > --- a/tools/libxl/libxl_types.idl > +++ b/tools/libxl/libxl_types.idl > @@ -439,6 +439,7 @@ libxl_domain_build_info = Struct("domain_build_info",[ > ("nested_hvm", libxl_defbool), > ("smbios_firmware", string), > ("acpi_firmware", string), > + ("ahci", libxl_defbool), > ("nographic", libxl_defbool), > ("vga", > libxl_vga_interface_info), > ("vnc", libxl_vnc_info), > diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c > index c858068..74b473e 100644 > --- a/tools/libxl/xl_cmdimpl.c > +++ b/tools/libxl/xl_cmdimpl.c > @@ -2216,6 +2216,7 @@ skip_vfb: > xlu_cfg_replace_string (config, "soundhw", &b_info->u.hvm.soundhw, > 0); > xlu_cfg_get_defbool(config, "xen_platform_pci", > &b_info->u.hvm.xen_platform_pci, 0); > + xlu_cfg_get_defbool(config, "ahci", &b_info->u.hvm.ahci, 0); > > if(b_info->u.hvm.vnc.listen > && b_info->u.hvm.vnc.display > -- > 1.9.1 > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |