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

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

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH] libxl: use named options for tsc_mode
From: Ian Campbell <ian.campbell@xxxxxxxxxx>
Date: Thu, 10 Nov 2011 10:55:19 +0000
Cc: ian.jackson@xxxxxxxxxx
Delivery-date: Thu, 10 Nov 2011 02:56:06 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
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>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mercurial-patchbomb/1.6.4
# 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).

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

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

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