WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] [PATCH] libxl: use named options for tsc_mode

To: "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: Re: [Xen-devel] [PATCH] libxl: use named options for tsc_mode
From: Ian Campbell <Ian.Campbell@xxxxxxxxxx>
Date: Thu, 10 Nov 2011 11:44:16 +0000
Cc: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
Delivery-date: Thu, 10 Nov 2011 03:52:44 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <bc79b560aafa1e4dc42a.1320922519@xxxxxxxxxxxxxxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Organization: Citrix Systems, Inc.
References: <bc79b560aafa1e4dc42a.1320922519@xxxxxxxxxxxxxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
On Thu, 2011-11-10 at 10:55 +0000, Ian Campbell wrote:
> # HG changeset patch
> # User Ian Campbell <ian.campbell@xxxxxxxxxx>
> # Date 1320922479 0
> # Node ID bc79b560aafa1e4dc42af00e6a326dc651b5636a
> # Parent  460b507e15f864dd6712f5040e36538d6e076ae4
> libxl: use named options for tsc_mode.
> 
> It seems that this knob is expoerted from the hypervisor as a raw
> integer (no symbolic names) documented in xen/include/asm-x86. Propagating 
> that
> all the way to the end user is hardly friendly (it's bad enough in the
> hypercall interface).

I've just seen docs/misc/tscmode.txt which is actually a pretty
comprehensive explanation of what's going on so the above is
unwarranted. I'll update this patch to include a reference in the
xl-domain-config.

> 
> Add an enum at the libxl level with a hopefully descriptive set of names.
> Deprecate the use of an integer in xl cfg files.

I think the naming at the libxl level is still useful even if the values
are documented.

Ian.

> 
> Signed-off-by: Ian Campbell
> 
> diff -r 460b507e15f8 -r bc79b560aafa docs/user/xl-domain-config.markdown
> --- a/docs/user/xl-domain-config.markdown     Thu Nov 10 10:18:29 2011 +0000
> +++ b/docs/user/xl-domain-config.markdown     Thu Nov 10 10:54:39 2011 +0000
> @@ -1,4 +1,4 @@
> - # xl Domain Configuration
> +# xl Domain Configuration
>  
>  To create a VM (a domain in Xen terminology, sometimes called a guest)
>  with xl requires the provision of a domain config file.  Typically
> @@ -338,6 +338,29 @@ accept the defaults for these options wh
>     extensions (e.g. Windows XP compatibility mode on more modern
>     Windows OS).
>  
> +### Guest Virtual Time Controls
> +
> + * `tsc_mode="MODE"`: Specifies how the TSC (Time Stamp Counter)
> +   should be provided to the guest (X86 only). Specifying this option as a 
> number
> +   is deprecated. Options are:
> +
> +   * `"default"`: guest rdtsc/p executed natively when monotonicity
> +     can be guaranteed and emulated otherwise (with frequency scaled
> +     if necessary).
> +
> +   * `"always_emulate"`: guest rdtsc/p always emulated at 1GHz (kernel
> +     and user).
> +
> +   * `"native"`: guest rdtsc always executed natively (no
> +     monotonicity/frequency guarantees); guest rdtscp emulated at
> +     native frequency if unsupported by h/w, else executed natively.
> +
> +   * `"native_paravirt"`: same as `native`, except xen manages TSC_AUX
> +      register so guest can determine when a restore/migration has
> +      occurred and assumes guest obtains/uses pvclock-like mechanism
> +      to adjust for monotonicity and frequency changes.
> +
> +
>  ### Support for Paravirtualisation of HVM Guests
>  
>  The following options allow Paravirtualised features (such as devices)
> @@ -546,9 +569,6 @@ certainly belong in a more appropriate s
>     enables certain other features which are incompatible with
>     migration (currently certain TSC modes XXX ?).
>  
> - * `tsc_mode=VALUE`: Specifies how the TSC (Time Stamp Counter) should
> -   be provided to the guest.  XXX ???
> -
>   * `pci_msitranslate=BOOLEAN`: XXX
>  
>   * `pci_power_mgmt=BOOLEAN`: XXX
> diff -r 460b507e15f8 -r bc79b560aafa tools/libxl/libxl_dom.c
> --- a/tools/libxl/libxl_dom.c Thu Nov 10 10:18:29 2011 +0000
> +++ b/tools/libxl/libxl_dom.c Thu Nov 10 10:54:39 2011 +0000
> @@ -73,12 +73,29 @@ int libxl__build_pre(libxl__gc *gc, uint
>                libxl_domain_build_info *info, libxl__domain_build_state 
> *state)
>  {
>      libxl_ctx *ctx = libxl__gc_owner(gc);
> +    int tsc_mode;
>      xc_domain_max_vcpus(ctx->xch, domid, info->max_vcpus);
>      xc_domain_setmaxmem(ctx->xch, domid, info->target_memkb + 
> LIBXL_MAXMEM_CONSTANT);
>      if (info->type == LIBXL_DOMAIN_TYPE_PV)
>          xc_domain_set_memmap_limit(ctx->xch, domid,
>                  (info->max_memkb + info->u.pv.slack_memkb));
> -    xc_domain_set_tsc_info(ctx->xch, domid, info->tsc_mode, 0, 0, 0);
> +    switch (info->tsc_mode) {
> +    case LIBXL_TSC_MODE_DEFAULT:
> +        tsc_mode = 0;
> +        break;
> +    case LIBXL_TSC_MODE_ALWAYS_EMULATE:
> +        tsc_mode = 1;
> +        break;
> +    case LIBXL_TSC_MODE_NATIVE:
> +        tsc_mode = 2;
> +        break;
> +    case LIBXL_TSC_MODE_NATIVE_PARAVIRT:
> +        tsc_mode = 3;
> +        break;
> +    default:
> +        abort();
> +    }
> +    xc_domain_set_tsc_info(ctx->xch, domid, tsc_mode, 0, 0, 0);
>      if ( info->disable_migrate )
>          xc_domain_disable_migrate(ctx->xch, domid);
>  
> diff -r 460b507e15f8 -r bc79b560aafa tools/libxl/libxl_types.idl
> --- a/tools/libxl/libxl_types.idl     Thu Nov 10 10:18:29 2011 +0000
> +++ b/tools/libxl/libxl_types.idl     Thu Nov 10 10:54:39 2011 +0000
> @@ -85,6 +85,13 @@ libxl_button = Enumeration("button", [
>      (2, "SLEEP"),
>      ])
>  
> +libxl_tsc_mode = Enumeration("tsc_mode", [
> +    (0, "default"),
> +    (1, "always_emulate"),
> +    (2, "native"),
> +    (3, "native_paravirt"),
> +    ])
> +
>  #
>  # Complex libxl types
>  #
> @@ -154,7 +161,7 @@ libxl_domain_create_info = Struct("domai
>  libxl_domain_build_info = Struct("domain_build_info",[
>      ("max_vcpus",       integer),
>      ("cur_vcpus",       integer),
> -    ("tsc_mode",        integer),
> +    ("tsc_mode",        libxl_tsc_mode),
>      ("max_memkb",       uint32),
>      ("target_memkb",    uint32),
>      ("video_memkb",     uint32),
> diff -r 460b507e15f8 -r bc79b560aafa tools/libxl/xl_cmdimpl.c
> --- a/tools/libxl/xl_cmdimpl.c        Thu Nov 10 10:18:29 2011 +0000
> +++ b/tools/libxl/xl_cmdimpl.c        Thu Nov 10 10:54:39 2011 +0000
> @@ -328,7 +328,7 @@ static void printf_info(int domid,
>  
>      printf("\t(build_info)\n");
>      printf("\t(max_vcpus %d)\n", b_info->max_vcpus);
> -    printf("\t(tsc_mode %d)\n", b_info->tsc_mode);
> +    printf("\t(tsc_mode %s)\n", libxl_tsc_mode_to_string(b_info->tsc_mode));
>      printf("\t(max_memkb %d)\n", b_info->max_memkb);
>      printf("\t(target_memkb %d)\n", b_info->target_memkb);
>      printf("\t(nomigrate %d)\n", b_info->disable_migrate);
> @@ -662,8 +662,23 @@ static void parse_config_data(const char
>      if (!xlu_cfg_get_long (config, "nomigrate", &l, 0))
>          b_info->disable_migrate = l;
>  
> -    if (!xlu_cfg_get_long(config, "tsc_mode", &l, 0))
> +    if (!xlu_cfg_get_long(config, "tsc_mode", &l, 1)) {
> +        fprintf(stderr, "WARNING: specifying \"tsc_mode\" as an integer is 
> deprecated. "
> +                "Please use the named parameter variant.\n");
> +        if (l < LIBXL_TSC_MODE_DEFAULT ||
> +            l > LIBXL_TSC_MODE_NATIVE_PARAVIRT) {
> +            fprintf(stderr, "ERROR: invalid value %ld for \"tsc_mode\"\n", 
> l);
> +            exit (1);
> +        }
>          b_info->tsc_mode = l;
> +    } else if (!xlu_cfg_get_string(config, "tsc_mode", &buf, 0)) {
> +        fprintf(stderr, "got a tsc mode string: \"%s\"\n", buf);
> +        if (libxl_tsc_mode_from_string(buf, &b_info->tsc_mode)) {
> +            fprintf(stderr, "ERROR: invalid value \"%s\" for \"tsc_mode\"\n",
> +                    buf);
> +            exit (1);
> +        }
> +    }
>  
>      if (!xlu_cfg_get_long (config, "videoram", &l, 0))
>          b_info->video_memkb = l * 1024;
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

<Prev in Thread] Current Thread [Next in Thread>