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-46210: use nice to work around forkhelpers waitpid

To: xen-api <xen-api@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-API] [PATCH] CA-46210: use nice to work around forkhelpers waitpid race
From: Marcus Granado <marcus.granado@xxxxxxxxxx>
Date: Thu, 30 Sep 2010 16:53:10 +0100
Delivery-date: Thu, 30 Sep 2010 08:54:21 -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
User-agent: Mercurial-patchbomb/1.4.3
 stdext/gzip.ml |  25 ++++++++++++-------------
 1 files changed, 12 insertions(+), 13 deletions(-)


# HG changeset patch
# User Marcus Granado <marcus.granado@xxxxxxxxxx>
# Date 1285861669 -3600
# Node ID 74ad0713ac392aace8acbabc4b4a9e05a0279896
# Parent  7245d00318f6fb778486bc5f99d8c6ac0cb896a1
CA-46210: use nice to work around forkhelpers waitpid race

Signed-off-by: Marcus Granado <marcus.granado@xxxxxxxxxxxxx>

diff -r 7245d00318f6 -r 74ad0713ac39 stdext/gzip.ml
--- a/stdext/gzip.ml
+++ b/stdext/gzip.ml
@@ -28,19 +28,18 @@
   | Active  (** we provide a function which writes into the compressor and a 
fd output *)
   | Passive (** we provide an fd input and a function which reads from the 
compressor *)
 
-(* renice/ionice the pid with lowest priority so that it doesn't *)
-(* use up all cpu resources in dom0 *)
-let lower_priority pid =
-  let pid=Printf.sprintf "%d" (Forkhelpers.getpid pid) in
-  (* renice 19 -p pid *)
-  let renice="/usr/bin/renice" in
-  let renice_args = ["19";"-p";pid] in
-  let _=Forkhelpers.execute_command_get_output renice renice_args in
-  (* ionice -c 3 [idle] -p pid *)
+(* start cmd with lowest priority so that it doesn't 
+   use up all cpu resources in dom0 
+*)
+let lower_priority cmd args =
   let ionice="/usr/bin/ionice" in
-  let ionice_args = ["-c";"3";"-p";pid] in
-  let _=Forkhelpers.execute_command_get_output ionice ionice_args in
-  ()
+  let ionice_args=["-c";"3"] in (*io idle*)
+  let nice="/bin/nice" in
+  let nice_args=["-n";"19"] in (*lowest priority*)
+  let extra_args=nice_args@[ionice]@ionice_args in
+  let new_cmd=nice in
+  let new_args=extra_args@[cmd]@args in
+  (new_cmd,new_args)
 
 (** Runs a zcat process which is either:
     i) a compressor; or (ii) a decompressor
@@ -69,11 +68,11 @@
               Some zcat_in,                               (* output goes into 
the pipe+fn *) 
               zcat_in,                                    (* we close this now 
*)
               zcat_out in                                 (* close this before 
waitpid *)
+        let (gzip,args)=lower_priority gzip args in
         let pid = Forkhelpers.safe_close_and_exec stdin stdout None [] gzip 
args in
         close close_now;
    finally
      (fun () -> 
-       (try lower_priority pid with _->()); (* lowest priority to gzip *)
        f close_later
      )
           (fun () ->

Attachment: xen-api-libs.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-46210: use nice to work around forkhelpers waitpid race, Marcus Granado <=