xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] xl: tsc_mode parameter in guest configuration file
@ 2010-03-29 12:35 Eric Chanudet
  2010-03-29 14:11 ` Dan Magenheimer
  0 siblings, 1 reply; 7+ messages in thread
From: Eric Chanudet @ 2010-03-29 12:35 UTC (permalink / raw)
  To: xen-devel

This patch handle tsc_mode argument in guest configuration file.

Acked-by: Vincent Hanquez <vincent.hanquez@eu.citrix.com>
Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>

diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
--- a/tools/libxl/libxl.h
+++ b/tools/libxl/libxl.h
@@ -74,6 +74,7 @@ typedef struct {
     int vpt_align;
     int max_vcpus;
     int cur_vcpus;
+    int tsc_mode;
     uint32_t max_memkb;
     uint32_t target_memkb;
     uint32_t video_memkb;
diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c
--- a/tools/libxl/libxl_dom.c
+++ b/tools/libxl/libxl_dom.c
@@ -176,7 +176,7 @@ int build_hvm(struct libxl_ctx *ctx, uin
     ret = hvm_build_set_params(ctx->xch, domid, info->u.hvm.apic,
info->u.hvm.acpi,
                                info->u.hvm.pae, info->u.hvm.nx,
info->u.hvm.viridian,
                                info->max_vcpus,
-                               state->store_port, &state->store_mfn);
+                               state->store_port, &state->store_mfn,
info->tsc_mode);
     if (ret) {
         XL_LOG_ERRNOVAL(ctx, XL_LOG_ERROR, ret, "hvm build set params failed");
         return ERROR_FAIL;
diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
--- a/tools/libxl/libxl_internal.h
+++ b/tools/libxl/libxl_internal.h
@@ -158,7 +158,7 @@ int libxl_device_pci_flr(struct libxl_ct
 /* from xenguest (helper */
 int hvm_build_set_params(int handle, uint32_t domid,
                          int apic, int acpi, int pae, int nx, int viridian,
-                         int vcpus, int store_evtchn, unsigned long
*store_mfn);
+                         int vcpus, int store_evtchn, unsigned long
*store_mfn, int tsc_mode);

 /* xl_exec */

diff --git a/tools/libxl/xenguest.c b/tools/libxl/xenguest.c
--- a/tools/libxl/xenguest.c
+++ b/tools/libxl/xenguest.c
@@ -20,7 +20,7 @@

 int hvm_build_set_params(int handle, uint32_t domid,
                          int apic, int acpi, int pae, int nx, int viridian,
-                         int vcpus, int store_evtchn, unsigned long *store_mfn)
+                         int vcpus, int store_evtchn, unsigned long
*store_mfn, int tsc_mode)
 {
     struct hvm_info_table *va_hvm;
     uint8_t *va_map, sum;
@@ -47,5 +47,6 @@ int hvm_build_set_params(int handle, uin
     xc_set_hvm_param(handle, domid, HVM_PARAM_VIRIDIAN, viridian);
 #endif
     xc_set_hvm_param(handle, domid, HVM_PARAM_STORE_EVTCHN, store_evtchn);
+    xc_domain_set_tsc_info(handle, domid, tsc_mode, 0, 0, 0);
     return 0;
 }
diff --git a/tools/libxl/xl.c b/tools/libxl/xl.c
--- a/tools/libxl/xl.c
+++ b/tools/libxl/xl.c
@@ -235,6 +235,7 @@ static void printf_info(libxl_domain_cre
     printf("hpet: %d\n", b_info->hpet);
     printf("vpt_align: %d\n", b_info->vpt_align);
     printf("max_vcpus: %d\n", b_info->max_vcpus);
+    printf("tsc_mode: %d\n", b_info->tsc_mode);
     printf("max_memkb: %d\n", b_info->max_memkb);
     printf("target_memkb: %d\n", b_info->target_memkb);
     printf("kernel: %s\n", b_info->kernel);
@@ -382,6 +383,9 @@ static void parse_config_file(const char
         b_info->target_memkb = b_info->max_memkb;
     }

+    if (!xlu_cfg_get_long(config, "tsc_mode", &l))
+        b_info->tsc_mode = l;
+
     if (!xlu_cfg_get_long (config, "shadow_memory", &l))
         b_info->shadow_memkb = l * 1024;


-- 
Eric CHANUDET
XenClient Team

^ permalink raw reply	[flat|nested] 7+ messages in thread

* RE: [PATCH] xl: tsc_mode parameter in guest configuration file
  2010-03-29 12:35 [PATCH] xl: tsc_mode parameter in guest configuration file Eric Chanudet
@ 2010-03-29 14:11 ` Dan Magenheimer
  2010-03-29 15:43   ` Vincent Hanquez
  2010-03-29 15:45   ` Eric Chanudet
  0 siblings, 2 replies; 7+ messages in thread
From: Dan Magenheimer @ 2010-03-29 14:11 UTC (permalink / raw)
  To: Eric Chanudet, xen-devel

Hi Eric --

Sorry I don't know my way around xl source, so just checking:

The tsc_mode parameter is important for both HVM and PV.
Looking through the patch, I see a lot of hvm changes.
Does the patch also handle PV tsc_mode?

Thanks,
Dan

> -----Original Message-----
> From: Eric Chanudet [mailto:eric.chanudet@citrix.com]
> Sent: Monday, March 29, 2010 6:35 AM
> To: xen-devel
> Subject: [Xen-devel] [PATCH] xl: tsc_mode parameter in guest
> configuration file
> 
> This patch handle tsc_mode argument in guest configuration file.
> 
> Acked-by: Vincent Hanquez <vincent.hanquez@eu.citrix.com>
> Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> 
> diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
> --- a/tools/libxl/libxl.h
> +++ b/tools/libxl/libxl.h
> @@ -74,6 +74,7 @@ typedef struct {
>      int vpt_align;
>      int max_vcpus;
>      int cur_vcpus;
> +    int tsc_mode;
>      uint32_t max_memkb;
>      uint32_t target_memkb;
>      uint32_t video_memkb;
> diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c
> --- a/tools/libxl/libxl_dom.c
> +++ b/tools/libxl/libxl_dom.c
> @@ -176,7 +176,7 @@ int build_hvm(struct libxl_ctx *ctx, uin
>      ret = hvm_build_set_params(ctx->xch, domid, info->u.hvm.apic,
> info->u.hvm.acpi,
>                                 info->u.hvm.pae, info->u.hvm.nx,
> info->u.hvm.viridian,
>                                 info->max_vcpus,
> -                               state->store_port, &state->store_mfn);
> +                               state->store_port, &state->store_mfn,
> info->tsc_mode);
>      if (ret) {
>          XL_LOG_ERRNOVAL(ctx, XL_LOG_ERROR, ret, "hvm build set params
> failed");
>          return ERROR_FAIL;
> diff --git a/tools/libxl/libxl_internal.h
> b/tools/libxl/libxl_internal.h
> --- a/tools/libxl/libxl_internal.h
> +++ b/tools/libxl/libxl_internal.h
> @@ -158,7 +158,7 @@ int libxl_device_pci_flr(struct libxl_ct
>  /* from xenguest (helper */
>  int hvm_build_set_params(int handle, uint32_t domid,
>                           int apic, int acpi, int pae, int nx, int
> viridian,
> -                         int vcpus, int store_evtchn, unsigned long
> *store_mfn);
> +                         int vcpus, int store_evtchn, unsigned long
> *store_mfn, int tsc_mode);
> 
>  /* xl_exec */
> 
> diff --git a/tools/libxl/xenguest.c b/tools/libxl/xenguest.c
> --- a/tools/libxl/xenguest.c
> +++ b/tools/libxl/xenguest.c
> @@ -20,7 +20,7 @@
> 
>  int hvm_build_set_params(int handle, uint32_t domid,
>                           int apic, int acpi, int pae, int nx, int
> viridian,
> -                         int vcpus, int store_evtchn, unsigned long
> *store_mfn)
> +                         int vcpus, int store_evtchn, unsigned long
> *store_mfn, int tsc_mode)
>  {
>      struct hvm_info_table *va_hvm;
>      uint8_t *va_map, sum;
> @@ -47,5 +47,6 @@ int hvm_build_set_params(int handle, uin
>      xc_set_hvm_param(handle, domid, HVM_PARAM_VIRIDIAN, viridian);
>  #endif
>      xc_set_hvm_param(handle, domid, HVM_PARAM_STORE_EVTCHN,
> store_evtchn);
> +    xc_domain_set_tsc_info(handle, domid, tsc_mode, 0, 0, 0);
>      return 0;
>  }
> diff --git a/tools/libxl/xl.c b/tools/libxl/xl.c
> --- a/tools/libxl/xl.c
> +++ b/tools/libxl/xl.c
> @@ -235,6 +235,7 @@ static void printf_info(libxl_domain_cre
>      printf("hpet: %d\n", b_info->hpet);
>      printf("vpt_align: %d\n", b_info->vpt_align);
>      printf("max_vcpus: %d\n", b_info->max_vcpus);
> +    printf("tsc_mode: %d\n", b_info->tsc_mode);
>      printf("max_memkb: %d\n", b_info->max_memkb);
>      printf("target_memkb: %d\n", b_info->target_memkb);
>      printf("kernel: %s\n", b_info->kernel);
> @@ -382,6 +383,9 @@ static void parse_config_file(const char
>          b_info->target_memkb = b_info->max_memkb;
>      }
> 
> +    if (!xlu_cfg_get_long(config, "tsc_mode", &l))
> +        b_info->tsc_mode = l;
> +
>      if (!xlu_cfg_get_long (config, "shadow_memory", &l))
>          b_info->shadow_memkb = l * 1024;
> 
> 
> --
> Eric CHANUDET
> XenClient Team
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] xl: tsc_mode parameter in guest configuration file
  2010-03-29 14:11 ` Dan Magenheimer
@ 2010-03-29 15:43   ` Vincent Hanquez
  2010-03-29 18:32     ` Eric Chanudet
  2010-03-29 15:45   ` Eric Chanudet
  1 sibling, 1 reply; 7+ messages in thread
From: Vincent Hanquez @ 2010-03-29 15:43 UTC (permalink / raw)
  To: Dan Magenheimer; +Cc: Eric Chanudet (Intern), xen-devel

On 29/03/10 15:11, Dan Magenheimer wrote:
> Hi Eric --
>
> Sorry I don't know my way around xl source, so just checking:
>
> The tsc_mode parameter is important for both HVM and PV.
> Looking through the patch, I see a lot of hvm changes.
> Does the patch also handle PV tsc_mode?
>    
Hi Dan,

I don't believe we ever did that, with seems wrong indeed. Thanks for 
pointing it out.

Eric, any chance you can move the tsc_mode call to build_pre (which is 
called by pv and hvm) and refresh the patch ?

Thanks,
-- 
Vincent

-- 
Vincent

^ permalink raw reply	[flat|nested] 7+ messages in thread

* RE: [PATCH] xl: tsc_mode parameter in guest configuration file
  2010-03-29 14:11 ` Dan Magenheimer
  2010-03-29 15:43   ` Vincent Hanquez
@ 2010-03-29 15:45   ` Eric Chanudet
  1 sibling, 0 replies; 7+ messages in thread
From: Eric Chanudet @ 2010-03-29 15:45 UTC (permalink / raw)
  To: Dan Magenheimer, xen-devel

On Mon, 2010-03-29 at 10:11 -0400, Dan Magenheimer wrote:
> The tsc_mode parameter is important for both HVM and PV.
> Looking through the patch, I see a lot of hvm changes.
> Does the patch also handle PV tsc_mode?

No, the tsc_mode parameter is ignored for PV guests in this patch.

-- 
Eric Chanudet
XenClient Team

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] xl: tsc_mode parameter in guest configuration file
  2010-03-29 15:43   ` Vincent Hanquez
@ 2010-03-29 18:32     ` Eric Chanudet
  2010-03-29 19:49       ` Dan Magenheimer
  0 siblings, 1 reply; 7+ messages in thread
From: Eric Chanudet @ 2010-03-29 18:32 UTC (permalink / raw)
  To: Vincent Hanquez, xen-devel; +Cc: Dan Magenheimer

On Mon, 2010-03-29 at 11:43 -0400, Vincent Hanquez wrote:
> I don't believe we ever did that, with seems wrong indeed. Thanks for 
> pointing it out.
> 
> Eric, any chance you can move the tsc_mode call to build_pre (which is 
> called by pv and hvm) and refresh the patch ?

Here is the new patch including these changes.

Acked-by: Vincent Hanquez <vincent.hanquez@eu.citrix.com>

diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
--- a/tools/libxl/libxl.h
+++ b/tools/libxl/libxl.h
@@ -74,6 +74,7 @@ typedef struct {
     int vpt_align;
     int max_vcpus;
     int cur_vcpus;
+    int tsc_mode;
     uint32_t max_memkb;
     uint32_t target_memkb;
     uint32_t video_memkb;
diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c
--- a/tools/libxl/libxl_dom.c
+++ b/tools/libxl/libxl_dom.c
@@ -72,6 +72,7 @@ int build_pre(struct libxl_ctx *ctx, uin
     xc_domain_set_memmap_limit(ctx->xch, domid, 
             (info->hvm) ? info->max_memkb : 
             (info->max_memkb + info->u.pv.slack_memkb));
+    xc_domain_set_tsc_info(ctx->xch, domid, info->tsc_mode, 0, 0, 0);
 
     if (info->hvm) {
         unsigned long shadow;
diff --git a/tools/libxl/xl.c b/tools/libxl/xl.c
--- a/tools/libxl/xl.c
+++ b/tools/libxl/xl.c
@@ -235,6 +235,7 @@ static void printf_info(libxl_domain_cre
     printf("hpet: %d\n", b_info->hpet);
     printf("vpt_align: %d\n", b_info->vpt_align);
     printf("max_vcpus: %d\n", b_info->max_vcpus);
+    printf("tsc_mode: %d\n", b_info->tsc_mode);
     printf("max_memkb: %d\n", b_info->max_memkb);
     printf("target_memkb: %d\n", b_info->target_memkb);
     printf("kernel: %s\n", b_info->kernel);
@@ -382,6 +383,9 @@ static void parse_config_file(const char
         b_info->target_memkb = b_info->max_memkb;
     }
 
+    if (!xlu_cfg_get_long(config, "tsc_mode", &l))
+        b_info->tsc_mode = l;
+
     if (!xlu_cfg_get_long (config, "shadow_memory", &l))
         b_info->shadow_memkb = l * 1024;
 

-- 
Eric Chanudet
XenClient Team

^ permalink raw reply	[flat|nested] 7+ messages in thread

* RE: [PATCH] xl: tsc_mode parameter in guest configuration file
  2010-03-29 18:32     ` Eric Chanudet
@ 2010-03-29 19:49       ` Dan Magenheimer
  2010-03-30  8:15         ` Vincent Hanquez
  0 siblings, 1 reply; 7+ messages in thread
From: Dan Magenheimer @ 2010-03-29 19:49 UTC (permalink / raw)
  To: eric.chanudet, Vincent Hanquez, xen-devel

Thanks Eric!

Sorry I didn't mention this earlier, but I just remembered it.

For some of the tsc_mode's to work properly, tsc_mode AND
additional tsc information must be preserved across a
save/restore/migration.  Also, the no_migrate config option has
an indirect impact on tsc_mode; with no_migrate specified
certain guests will be able to use tsc as their primary
clocksource, which can be much faster.  (IOW, implementing
no_migrate is not a requirement, but may be worthwhile.)

(See xen-4.0.hg/docs/misc/tscmode.txt for more info on
all of this.)

> -----Original Message-----
> From: Eric Chanudet [mailto:eric.chanudet@citrix.com]
> Sent: Monday, March 29, 2010 12:32 PM
> To: Vincent Hanquez; xen-devel
> Cc: Dan Magenheimer
> Subject: Re: [Xen-devel] [PATCH] xl: tsc_mode parameter in guest
> configuration file
> 
> On Mon, 2010-03-29 at 11:43 -0400, Vincent Hanquez wrote:
> > I don't believe we ever did that, with seems wrong indeed. Thanks for
> > pointing it out.
> >
> > Eric, any chance you can move the tsc_mode call to build_pre (which
> is
> > called by pv and hvm) and refresh the patch ?
> 
> Here is the new patch including these changes.
> 
> Acked-by: Vincent Hanquez <vincent.hanquez@eu.citrix.com>
> 
> diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
> --- a/tools/libxl/libxl.h
> +++ b/tools/libxl/libxl.h
> @@ -74,6 +74,7 @@ typedef struct {
>      int vpt_align;
>      int max_vcpus;
>      int cur_vcpus;
> +    int tsc_mode;
>      uint32_t max_memkb;
>      uint32_t target_memkb;
>      uint32_t video_memkb;
> diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c
> --- a/tools/libxl/libxl_dom.c
> +++ b/tools/libxl/libxl_dom.c
> @@ -72,6 +72,7 @@ int build_pre(struct libxl_ctx *ctx, uin
>      xc_domain_set_memmap_limit(ctx->xch, domid,
>              (info->hvm) ? info->max_memkb :
>              (info->max_memkb + info->u.pv.slack_memkb));
> +    xc_domain_set_tsc_info(ctx->xch, domid, info->tsc_mode, 0, 0, 0);
> 
>      if (info->hvm) {
>          unsigned long shadow;
> diff --git a/tools/libxl/xl.c b/tools/libxl/xl.c
> --- a/tools/libxl/xl.c
> +++ b/tools/libxl/xl.c
> @@ -235,6 +235,7 @@ static void printf_info(libxl_domain_cre
>      printf("hpet: %d\n", b_info->hpet);
>      printf("vpt_align: %d\n", b_info->vpt_align);
>      printf("max_vcpus: %d\n", b_info->max_vcpus);
> +    printf("tsc_mode: %d\n", b_info->tsc_mode);
>      printf("max_memkb: %d\n", b_info->max_memkb);
>      printf("target_memkb: %d\n", b_info->target_memkb);
>      printf("kernel: %s\n", b_info->kernel);
> @@ -382,6 +383,9 @@ static void parse_config_file(const char
>          b_info->target_memkb = b_info->max_memkb;
>      }
> 
> +    if (!xlu_cfg_get_long(config, "tsc_mode", &l))
> +        b_info->tsc_mode = l;
> +
>      if (!xlu_cfg_get_long (config, "shadow_memory", &l))
>          b_info->shadow_memkb = l * 1024;
> 
> 
> --
> Eric Chanudet
> XenClient Team
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH] xl: tsc_mode parameter in guest configuration file
  2010-03-29 19:49       ` Dan Magenheimer
@ 2010-03-30  8:15         ` Vincent Hanquez
  0 siblings, 0 replies; 7+ messages in thread
From: Vincent Hanquez @ 2010-03-30  8:15 UTC (permalink / raw)
  To: Dan Magenheimer; +Cc: Eric Chanudet (Intern), xen-devel

On 29/03/10 20:49, Dan Magenheimer wrote:
> Thanks Eric!
>
> Sorry I didn't mention this earlier, but I just remembered it.
>
> For some of the tsc_mode's to work properly, tsc_mode AND
> additional tsc information must be preserved across a
> save/restore/migration.  Also, the no_migrate config option has
> an indirect impact on tsc_mode; with no_migrate specified
> certain guests will be able to use tsc as their primary
> clocksource, which can be much faster.  (IOW, implementing
> no_migrate is not a requirement, but may be worthwhile.)

it seems that the tsc information are automatically save by xenguest 
saving code, and embedded in the save image.

-- 
Vincent

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2010-03-30  8:15 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-03-29 12:35 [PATCH] xl: tsc_mode parameter in guest configuration file Eric Chanudet
2010-03-29 14:11 ` Dan Magenheimer
2010-03-29 15:43   ` Vincent Hanquez
2010-03-29 18:32     ` Eric Chanudet
2010-03-29 19:49       ` Dan Magenheimer
2010-03-30  8:15         ` Vincent Hanquez
2010-03-29 15:45   ` Eric Chanudet

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).