[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [Xen-API] [PATCH] [CA-34383] Ignore updates to memory metrics originating from paused domains
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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |