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

[Xen-changelog] [xen-unstable] xl: Add subcommand "xl sched-credit"

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] xl: Add subcommand "xl sched-credit"
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Tue, 04 May 2010 13:20:22 -0700
Delivery-date: Tue, 04 May 2010 13:22:34 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1272967772 -3600
# Node ID 3e5383b537c5d05634cabca0026a46037cd54067
# Parent  80aef59e8c8e86082e85338eea081d7deb112df7
xl: Add subcommand "xl sched-credit"

Signed-off-by: Yu Zhiguo <yuzg@xxxxxxxxxxxxxx>
Acked-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
---
 tools/libxl/libxl.c |   50 ++++++++++++++++++++++
 tools/libxl/libxl.h |   11 +++++
 tools/libxl/xl.c    |  114 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 175 insertions(+)

diff -r 80aef59e8c8e -r 3e5383b537c5 tools/libxl/libxl.c
--- a/tools/libxl/libxl.c       Tue May 04 11:07:06 2010 +0100
+++ b/tools/libxl/libxl.c       Tue May 04 11:09:32 2010 +0100
@@ -2474,3 +2474,53 @@ int libxl_get_sched_id(struct libxl_ctx 
         return ret;
     return sched;
 }
+
+int libxl_sched_credit_domain_get(struct libxl_ctx *ctx, uint32_t domid, 
struct libxl_sched_credit *scinfo)
+{
+    struct xen_domctl_sched_credit sdom;
+    int rc;
+
+    rc = xc_sched_credit_domain_get(ctx->xch, domid, &sdom);
+    if (rc != 0)
+        return rc;
+
+    scinfo->weight = sdom.weight;
+    scinfo->cap = sdom.cap;
+
+    return 0;
+}
+
+int libxl_sched_credit_domain_set(struct libxl_ctx *ctx, uint32_t domid, 
struct libxl_sched_credit *scinfo)
+{
+    struct xen_domctl_sched_credit sdom;
+    xc_domaininfo_t domaininfo;
+    int rc;
+
+    rc = xc_domain_getinfolist(ctx->xch, domid, 1, &domaininfo);
+    if (rc != 1 || domaininfo.domain != domid)
+        return rc;
+
+
+    if (scinfo->weight < 1 || scinfo->weight > 65535) {
+        XL_LOG_ERRNOVAL(ctx, XL_LOG_ERROR, rc,
+            "Cpu weight out of range, valid values are within range from 1 to 
65535");
+        return -1;
+    }
+
+    if (scinfo->cap < 0 || scinfo->cap > (domaininfo.max_vcpu_id + 1) * 100) {
+        XL_LOG_ERRNOVAL(ctx, XL_LOG_ERROR, rc,
+            "Cpu cap out of range, valid range is from 0 to %d for specified 
number of vcpus",
+            ((domaininfo.max_vcpu_id + 1) * 100));
+        return -1;
+    }
+
+    sdom.weight = scinfo->weight;
+    sdom.cap = scinfo->cap;
+
+    rc = xc_sched_credit_domain_set(ctx->xch, domid, &sdom);
+    if (rc != 0)
+        return rc;
+
+    return 0;
+}
+
diff -r 80aef59e8c8e -r 3e5383b537c5 tools/libxl/libxl.h
--- a/tools/libxl/libxl.h       Tue May 04 11:07:06 2010 +0100
+++ b/tools/libxl/libxl.h       Tue May 04 11:09:32 2010 +0100
@@ -459,5 +459,16 @@ int libxl_set_vcpucount(struct libxl_ctx
 int libxl_set_vcpucount(struct libxl_ctx *ctx, uint32_t domid, uint32_t count);
 
 int libxl_get_sched_id(struct libxl_ctx *ctx);
+
+
+struct libxl_sched_credit {
+    int weight;
+    int cap;
+};
+
+int libxl_sched_credit_domain_get(struct libxl_ctx *ctx, uint32_t domid,
+                                  struct libxl_sched_credit *scinfo);
+int libxl_sched_credit_domain_set(struct libxl_ctx *ctx, uint32_t domid,
+                                  struct libxl_sched_credit *scinfo);
 #endif /* LIBXL_H */
 
diff -r 80aef59e8c8e -r 3e5383b537c5 tools/libxl/xl.c
--- a/tools/libxl/xl.c  Tue May 04 11:07:06 2010 +0100
+++ b/tools/libxl/xl.c  Tue May 04 11:09:32 2010 +0100
@@ -1107,6 +1107,7 @@ static void help(char *command)
         printf(" vcpu-list                     list the VCPUs for all/some 
domains.\n\n");
         printf(" vcpu-pin                      Set which CPUs a VCPU can 
use.\n\n");
         printf(" vcpu-set                      Set the number of active VCPUs 
allowed for the domain.\n\n");
+        printf(" sched-credit                  Get/set credit scheduler 
parameters.\n\n");
     } else if(!strcmp(command, "create")) {
         printf("Usage: xl create <ConfigFile> [options] [vars]\n\n");
         printf("Create a domain based on <ConfigFile>.\n\n");
@@ -1193,6 +1194,12 @@ static void help(char *command)
     } else if (!strcmp(command, "vcpu-set")) {
         printf("Usage: xl vcpu-set <Domain> <vCPUs>\n\n");
         printf("Set the number of active VCPUs for allowed for the 
domain.\n\n");
+    } else if (!strcmp(command, "sched-credit")) {
+        printf("Usage: xl sched-credit [-d <Domain> 
[-w[=WEIGHT]|-c[=CAP]]]\n\n");
+        printf("Get/set credit scheduler parameters.\n");
+        printf("  -d DOMAIN, --domain=DOMAIN     Domain to modify\n");
+        printf("  -w WEIGHT, --weight=WEIGHT     Weight (int)\n");
+        printf("  -c CAP, --cap=CAP              Cap (int)\n");
     }
 }
 
@@ -2754,6 +2761,111 @@ void main_info(int argc, char **argv)
     }
 
     info(verbose);
+    exit(0);
+}
+
+int sched_credit_domain_get(int domid, struct libxl_sched_credit *scinfo)
+{
+    int rc;
+
+    rc = libxl_sched_credit_domain_get(&ctx, domid, scinfo);
+    if (rc)
+        fprintf(stderr, "libxl_sched_credit_domain_get failed.\n");
+    
+    return rc;
+}
+
+int sched_credit_domain_set(int domid, struct libxl_sched_credit *scinfo)
+{
+    int rc;
+
+    rc = libxl_sched_credit_domain_set(&ctx, domid, scinfo);
+    if (rc)
+        fprintf(stderr, "libxl_sched_credit_domain_set failed.\n");
+
+    return rc;
+}
+
+void sched_credit_domain_output(int domid, struct libxl_sched_credit *scinfo)
+{
+    printf("%-33s %4d %6d %4d\n",
+        libxl_domid_to_name(&ctx, domid),
+        domid,
+        scinfo->weight,
+        scinfo->cap);
+}
+
+void main_sched_credit(int argc, char **argv)
+{
+    struct libxl_dominfo *info;
+    struct libxl_sched_credit scinfo;
+    int nb_domain, i;
+    char *dom = NULL;
+    int weight = 256, cap = 0, opt_w = 0, opt_c = 0;
+    int opt, rc;
+
+    while ((opt = getopt(argc, argv, "hd:w:c:")) != -1) {
+        switch (opt) {
+        case 'd':
+            dom = optarg;
+            break;
+        case 'w':
+            weight = strtol(optarg, NULL, 10);
+            opt_w = 1;
+            break;
+        case 'c':
+            cap = strtol(optarg, NULL, 10);
+            opt_c = 1;
+            break;
+        case 'h':
+            help("sched-credit");
+            exit(0);
+        default:
+            fprintf(stderr, "option `%c' not supported.\n", opt);
+            break;
+        }
+    }
+
+    if (!dom && (opt_w || opt_c)) {
+        fprintf(stderr, "Must specify a domain.\n");
+        exit(1);
+    }
+
+    if (!dom) { /* list all domain's credit scheduler info */
+        info = libxl_list_domain(&ctx, &nb_domain);
+        if (!info) {
+            fprintf(stderr, "libxl_domain_infolist failed.\n");
+            exit(1);
+        }
+
+        printf("%-33s %4s %6s %4s\n", "Name", "ID", "Weight", "Cap");
+        for (i = 0; i < nb_domain; i++) {
+            rc = sched_credit_domain_get(info[i].domid, &scinfo);
+            if (rc)
+                exit(-rc);
+            sched_credit_domain_output(info[i].domid, &scinfo);
+        }
+    } else {
+        find_domain(dom);
+
+        rc = sched_credit_domain_get(domid, &scinfo);
+        if (rc)
+            exit(-rc);
+
+        if (!opt_w && !opt_c) { /* output credit scheduler info */
+            printf("%-33s %4s %6s %4s\n", "Name", "ID", "Weight", "Cap");
+            sched_credit_domain_output(domid, &scinfo);
+        } else { /* set credit scheduler paramaters */
+            if (opt_w)
+                scinfo.weight = weight;
+            if (opt_c)
+                scinfo.cap = cap;
+            rc = sched_credit_domain_set(domid, &scinfo);
+            if (rc)
+                exit(-rc);
+        }
+    }
+
     exit(0);
 }
 
@@ -2819,6 +2931,8 @@ int main(int argc, char **argv)
         main_vcpuset(argc - 1, argv + 1);
     } else if (!strcmp(argv[1], "info")) {
         main_info(argc - 1, argv + 1);
+    } else if (!strcmp(argv[1], "sched-credit")) {
+        main_sched_credit(argc - 1, argv + 1);
     } else if (!strcmp(argv[1], "help")) {
         if (argc > 2)
             help(argv[2]);

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] xl: Add subcommand "xl sched-credit", Xen patchbot-unstable <=