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-api

[Xen-API] [PATCH] [CA-41286] Fixes a memory accounting error in the sque

To: xen-api@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-API] [PATCH] [CA-41286] Fixes a memory accounting error in the squeezing code
From: Jonathan Knowles <jonathan.knowles@xxxxxxxxxxxxx>
Date: Wed, 19 May 2010 11:52:10 +0100
Delivery-date: Wed, 19 May 2010 03:52:49 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-api-request@lists.xensource.com?subject=help>
List-id: Discussion of API issues surrounding Xen <xen-api.lists.xensource.com>
List-post: <mailto:xen-api@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-api>, <mailto:xen-api-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-api>, <mailto:xen-api-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-api-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Jonathan Knowles <jonathan.knowles@xxxxxxxxxxxxx>
# Date 1274266211 -3600
# Node ID 9d1433fc3d5e2f9b449b4026c3fd3cbe60e08b8b
# Parent  282bf26c12147e28cf8c95562e8dbc3c85cf056f
[CA-41286] Fixes a memory accounting error in the squeezing code.

When calculating an upper bound for the memory usage of an HVM domain with no 
balloon driver, the squeezing code would double-count (inappropriately) the 
shadow memory area.
This caused the squeezing algorithm to underestimate the amount of usable 
memory of any host running one or more HVM domains without balloon drivers.
This change removes the double-counting error, and also fixes a bug that caused 
the squeezer to add (inappropriately) the shadow memory size to Xen maxmem.

Signed-off-by: Jonathan Knowles <jonathan.knowles@xxxxxxxxxxxxx>
Acked-by: Dave Scott <dave.scott@xxxxxxxxxxxxx>

diff -r 282bf26c1214 -r 9d1433fc3d5e ocaml/xenops/squeeze_xen.ml
--- a/ocaml/xenops/squeeze_xen.ml       Tue May 18 15:10:52 2010 +0100
+++ b/ocaml/xenops/squeeze_xen.ml       Wed May 19 11:50:11 2010 +0100
@@ -262,6 +262,12 @@
                        (fun di ->
                                try
                                        let memory_actual_kib = Xc.pages_to_kib 
(Int64.of_nativeint di.Xc.total_memory_pages) in
+                                       let memory_shadow_kib =
+                                               if di.Xc.hvm_guest then
+                                                       try
+                                                               
Memory.kib_of_mib (Int64.of_int (Xc.shadow_allocation_get xc di.Xc.domid))
+                                                       with _ -> 0L
+                                               else 0L in
                                        (* dom0 is special for some reason *)
                                        let memory_max_kib = if di.Xc.domid = 0 
then 0L else Xc.pages_to_kib (Int64.of_nativeint di.Xc.max_memory_pages) in
                                        (* Misc other stuff appears in 
max_memory_pages *)
@@ -308,18 +314,15 @@
                                           "initial-reservation". *)
                                        if not can_balloon then begin
                                                let initial_reservation_kib = 
Domain.get_initial_reservation cnx di.Xc.domid in
-                                               (* memory_actual_kib is memory 
which xen has accounted to this domain. We bump this up to
-                                                  the "initial-reservation" 
and compute how much memory to subtract from the host's free
-                                                  memory *)
-                                               let unaccounted_kib = max 0L 
(Int64.sub initial_reservation_kib memory_actual_kib) in
+                                               let unaccounted_kib = max 0L
+                                                       
(initial_reservation_kib -* memory_actual_kib -* memory_shadow_kib) in
                                                reserved_kib := Int64.add 
!reserved_kib unaccounted_kib;
-
                                                [ { domain with Squeeze.
-                                                     dynamic_min_kib = 
initial_reservation_kib;
-                                                     dynamic_max_kib = 
initial_reservation_kib;
-                                                     target_kib = 
initial_reservation_kib;
-                                                     memory_actual_kib = max 
memory_actual_kib initial_reservation_kib;
-                                                 } ]
+                                                       dynamic_min_kib   = 
memory_max_kib;
+                                                       dynamic_max_kib   = 
memory_max_kib;
+                                                       target_kib        = 
memory_max_kib;
+                                                       memory_actual_kib = 
memory_max_kib;
+                                               } ]
                                        end else begin
 
                                                let target_kib = 
Domain.get_target cnx di.Xc.domid in
1 file changed, 13 insertions(+), 10 deletions(-)
ocaml/xenops/squeeze_xen.ml |   23 +++++++++++++----------


Attachment: xen-api.hg.patch
Description: Text Data

_______________________________________________
xen-api mailing list
xen-api@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/mailman/listinfo/xen-api
<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-API] [PATCH] [CA-41286] Fixes a memory accounting error in the squeezing code, Jonathan Knowles <=