Aha -- so that's where the glitch was coming from!
Thanks for fixing that one...
Cheers,
Dave
> -----Original Message-----
> From: xen-api-bounces@xxxxxxxxxxxxxxxxxxx [mailto:xen-api-
> bounces@xxxxxxxxxxxxxxxxxxx] On Behalf Of Jonathan Knowles
> Sent: 16 February 2010 14:49
> To: xen-api@xxxxxxxxxxxxxxxxxxx
> Subject: [Xen-API] [PATCH] [CA-34383] Ignore updates to memory metrics
> originating from paused domains
>
> # HG changeset patch
> # User Jonathan Knowles <jonathan.knowles@xxxxxxxxxxxxx> # Date
> 1266331473 0 # Node ID 8ba058e6fc217b2347d2ac5ffe3607d6181e81a0
> # Parent afb8db20d991aadbe5dc0ec908f5fa3f66059e5b
> [CA-34383] Ignore updates to memory metrics originating from paused
> domains.
> Memory metrics updates from paused domains appear to serve no useful
> purpose.
> Moreover, such updates can actually cause undesirable discontinuities
> in the observed values of memory_actual during VM migrate operations.
>
> Signed-off-by: Jonathan Knowles <jonathan.knowles@xxxxxxxxxxxxx>
> Acked-by: Jonathan Ludlam <Jonathan.Ludlam@xxxxxxxxxxxxx>
>
> diff -r afb8db20d991 -r 8ba058e6fc21 ocaml/xapi/monitor.ml
> --- a/ocaml/xapi/monitor.ml Fri Feb 12 12:42:04 2010 +0000
> +++ b/ocaml/xapi/monitor.ml Tue Feb 16 14:44:33 2010 +0000
> @@ -436,6 +436,11 @@
> let domains = Xc.domain_getinfolist xc 0 in
> let timestamp = Unix.gettimeofday() in
> let my_rebooting_vms = StringSet.fold (fun uuid acc ->
> uuid::acc) !rebooting_vms [] in
> + let uuid_of_domain d =
> + Uuid.to_string (Uuid.uuid_of_int_array
> (d.Xc.handle)) in
> + let domain_paused d = d.Xc.paused in
> + let my_paused_domain_uuids =
> + List.map uuid_of_domain (List.filter
> domain_paused domains) in
> let (vifs,pifs) = try update_netdev domains with e -> (debug
> "Exception in update_netdev(). Defaulting value for vifs/pifs: %s"
> (Printexc.to_string e); ([],[])) in
> let (vcpus,uuids,domids) = update_vcpus xc domains in
> Xapi_guest_agent.sync_cache domids; @@ -450,7 +455,7 @@
> handle_exn "update_pcpus" (fun ()->update_pcpus xc) [];
> handle_exn "update_vbds" (fun ()->update_vbds domains) [];
> handle_exn "update_loadavg" (fun ()-> [ update_loadavg () ]) [];
> - handle_exn "update_memory" (fun ()->update_memory __context xc
> domains) []],uuids,pifs,timestamp,my_rebooting_vms)
> + handle_exn "update_memory" (fun ()->update_memory __context xc
> +domains) []],uuids,pifs,timestamp,my_rebooting_vms,
> +my_paused_domain_uuids)
> )
> )
>
> @@ -458,9 +463,9 @@
> let do_monitor __context xc =
> Stats.time_this "monitor"
> (fun () ->
> - let (stats,uuids,pifs,timestamp,my_rebooting_vms) =
> read_all_dom0_stats __context in
> + let (stats,uuids,pifs,timestamp,my_rebooting_vms,my_paused_vms)
> =
> + read_all_dom0_stats __context in
> Monitor_self.go __context;
> - Monitor_rrds.update_rrds ~__context timestamp stats uuids pifs
> my_rebooting_vms)
> + Monitor_rrds.update_rrds ~__context timestamp stats uuids pifs
> + my_rebooting_vms my_paused_vms)
>
> let _loop __context xc =
> while true
> diff -r afb8db20d991 -r 8ba058e6fc21 ocaml/xapi/monitor_rrds.ml
> --- a/ocaml/xapi/monitor_rrds.ml Fri Feb 12 12:42:04 2010 +0000
> +++ b/ocaml/xapi/monitor_rrds.ml Tue Feb 16 14:44:33 2010 +0000
> @@ -600,7 +600,7 @@
> * domain has gone and we stream the RRD to the master. We also have a
> * list of the currently rebooting VMs to ensure we don't accidentally
> * archive the RRD *)
> -let update_rrds ~__context timestamp dss uuids pifs rebooting_vms =
> +let update_rrds ~__context timestamp dss uuids pifs rebooting_vms
> +paused_vms =
> (* Here we do the synchronising between the dom0 view of the world
> and our Hashtbl. By the end of this execute block, the Hashtbl
> correctly represents the world *)
> @@ -653,14 +653,19 @@
> in
> (* Check whether the memory ds has changed since last
> update *)
> let last_values = Rrd.get_last_ds_values rrd in
> - let changed =
> - try
> - let old_mem = List.assoc "memory" last_values in
> - let cur_mem_ds = List.find (fun ds -> ds.ds_name =
> "memory") dss in
> - let cur_mem = cur_mem_ds.ds_value in
> - cur_mem <> old_mem
> - with _ -> true
> - in
> + (* CA-34383:
> + * Memory updates from paused domains serve no useful
> purpose.
> + * During a migrate such updates can also cause undesirable
> + * discontinuities in the observed value of memory_actual.
> + * Hence we ignore changes from paused domains:
> + *)
> + let changed = not (List.mem vm_uuid paused_vms) &&
> + begin try
> + let old_mem = List.assoc "memory" last_values
> in
> + let cur_mem_ds = List.find (fun ds ->
> ds.ds_name = "memory") dss in
> + let cur_mem = cur_mem_ds.ds_value in
> + cur_mem <> old_mem
> + with _ -> true end in
> if changed then
> dirty_memory := StringSet.add vm_uuid !dirty_memory;
>
> 2 files changed, 22 insertions(+), 12 deletions(-)
> ocaml/xapi/monitor.ml | 11 ++++++++---
> ocaml/xapi/monitor_rrds.ml | 23 ++++++++++++++---------
>
_______________________________________________
xen-api mailing list
xen-api@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/mailman/listinfo/xen-api
|