From: Meng Xu <mengxu@cis.upenn.edu>
To: xen-devel@lists.xen.org
Cc: george.dunlap@eu.citrix.com, dario.faggioli@citrix.com,
ian.jackson@eu.citrix.com, xumengpanda@gmail.com,
Meng Xu <mengxu@cis.upenn.edu>,
wei.liu@citrix.com
Subject: [PATCH v2 3/5] xl: enable per-VCPU extratime flag for RTDS
Date: Fri, 1 Sep 2017 11:58:50 -0400 [thread overview]
Message-ID: <1504281532-3766-4-git-send-email-mengxu@cis.upenn.edu> (raw)
In-Reply-To: <1504281532-3766-1-git-send-email-mengxu@cis.upenn.edu>
Change main_sched_rtds and related output functions to support
per-VCPU extratime flag.
Signed-off-by: Meng Xu <mengxu@cis.upenn.edu>
---
Changes from v1
No change because we agree on using -e 0/1 option to
set if a vcpu will get extra time or not
Changes from RFC v1
Changes work_conserving flag to extratime flag
---
tools/xl/xl_cmdtable.c | 3 ++-
tools/xl/xl_sched.c | 56 ++++++++++++++++++++++++++++++++++----------------
2 files changed, 40 insertions(+), 19 deletions(-)
---
tools/xl/xl_cmdtable.c | 3 ++-
tools/xl/xl_sched.c | 56 ++++++++++++++++++++++++++++++++++----------------
2 files changed, 40 insertions(+), 19 deletions(-)
diff --git a/tools/xl/xl_cmdtable.c b/tools/xl/xl_cmdtable.c
index ba0159d..1b03d44 100644
--- a/tools/xl/xl_cmdtable.c
+++ b/tools/xl/xl_cmdtable.c
@@ -272,12 +272,13 @@ struct cmd_spec cmd_table[] = {
{ "sched-rtds",
&main_sched_rtds, 0, 1,
"Get/set rtds scheduler parameters",
- "[-d <Domain> [-v[=VCPUID/all]] [-p[=PERIOD]] [-b[=BUDGET]]]",
+ "[-d <Domain> [-v[=VCPUID/all]] [-p[=PERIOD]] [-b[=BUDGET]] [-e[=EXTRATIME]]]",
"-d DOMAIN, --domain=DOMAIN Domain to modify\n"
"-v VCPUID/all, --vcpuid=VCPUID/all VCPU to modify or output;\n"
" Using '-v all' to modify/output all vcpus\n"
"-p PERIOD, --period=PERIOD Period (us)\n"
"-b BUDGET, --budget=BUDGET Budget (us)\n"
+ "-e EXTRATIME, --extratime=EXTRATIME EXTRATIME (1=yes, 0=no)\n"
},
{ "domid",
&main_domid, 0, 0,
diff --git a/tools/xl/xl_sched.c b/tools/xl/xl_sched.c
index 85722fe..5138012 100644
--- a/tools/xl/xl_sched.c
+++ b/tools/xl/xl_sched.c
@@ -251,7 +251,7 @@ static int sched_rtds_domain_output(
libxl_domain_sched_params scinfo;
if (domid < 0) {
- printf("%-33s %4s %9s %9s\n", "Name", "ID", "Period", "Budget");
+ printf("%-33s %4s %9s %9s %10s\n", "Name", "ID", "Period", "Budget", "Extra time");
return 0;
}
@@ -262,11 +262,12 @@ static int sched_rtds_domain_output(
}
domname = libxl_domid_to_name(ctx, domid);
- printf("%-33s %4d %9d %9d\n",
+ printf("%-33s %4d %9d %9d %10s\n",
domname,
domid,
scinfo.period,
- scinfo.budget);
+ scinfo.budget,
+ scinfo.extratime ? "yes" : "no");
free(domname);
libxl_domain_sched_params_dispose(&scinfo);
return 0;
@@ -279,8 +280,8 @@ static int sched_rtds_vcpu_output(int domid, libxl_vcpu_sched_params *scinfo)
int i;
if (domid < 0) {
- printf("%-33s %4s %4s %9s %9s\n", "Name", "ID",
- "VCPU", "Period", "Budget");
+ printf("%-33s %4s %4s %9s %9s %10s\n", "Name", "ID",
+ "VCPU", "Period", "Budget", "Extra time");
return 0;
}
@@ -290,12 +291,13 @@ static int sched_rtds_vcpu_output(int domid, libxl_vcpu_sched_params *scinfo)
domname = libxl_domid_to_name(ctx, domid);
for ( i = 0; i < scinfo->num_vcpus; i++ ) {
- printf("%-33s %4d %4d %9"PRIu32" %9"PRIu32"\n",
+ printf("%-33s %4d %4d %9"PRIu32" %9"PRIu32" %10s\n",
domname,
domid,
scinfo->vcpus[i].vcpuid,
scinfo->vcpus[i].period,
- scinfo->vcpus[i].budget);
+ scinfo->vcpus[i].budget,
+ scinfo->vcpus[i].extratime ? "yes" : "no");
}
free(domname);
return 0;
@@ -309,8 +311,8 @@ static int sched_rtds_vcpu_output_all(int domid,
int i;
if (domid < 0) {
- printf("%-33s %4s %4s %9s %9s\n", "Name", "ID",
- "VCPU", "Period", "Budget");
+ printf("%-33s %4s %4s %9s %9s %10s\n", "Name", "ID",
+ "VCPU", "Period", "Budget", "Extra time");
return 0;
}
@@ -321,12 +323,13 @@ static int sched_rtds_vcpu_output_all(int domid,
domname = libxl_domid_to_name(ctx, domid);
for ( i = 0; i < scinfo->num_vcpus; i++ ) {
- printf("%-33s %4d %4d %9"PRIu32" %9"PRIu32"\n",
+ printf("%-33s %4d %4d %9"PRIu32" %9"PRIu32" %10s\n",
domname,
domid,
scinfo->vcpus[i].vcpuid,
scinfo->vcpus[i].period,
- scinfo->vcpus[i].budget);
+ scinfo->vcpus[i].budget,
+ scinfo->vcpus[i].extratime ? "yes" : "no");
}
free(domname);
return 0;
@@ -702,14 +705,18 @@ int main_sched_rtds(int argc, char **argv)
int *vcpus = (int *)xmalloc(sizeof(int)); /* IDs of VCPUs that change */
int *periods = (int *)xmalloc(sizeof(int)); /* period is in microsecond */
int *budgets = (int *)xmalloc(sizeof(int)); /* budget is in microsecond */
+ bool *extratimes = (bool *)xmalloc(sizeof(bool)); /* extratime is bool */
int v_size = 1; /* size of vcpus array */
int p_size = 1; /* size of periods array */
int b_size = 1; /* size of budgets array */
+ int e_size = 1; /* size of extratimes array */
int v_index = 0; /* index in vcpus array */
int p_index =0; /* index in periods array */
int b_index =0; /* index for in budgets array */
+ int e_index = 0; /* index in extratimes array */
bool opt_p = false;
bool opt_b = false;
+ bool opt_e = false;
bool opt_v = false;
bool opt_all = false; /* output per-dom parameters */
int opt, i, rc, r;
@@ -717,12 +724,13 @@ int main_sched_rtds(int argc, char **argv)
{"domain", 1, 0, 'd'},
{"period", 1, 0, 'p'},
{"budget", 1, 0, 'b'},
+ {"extratime", 1, 0, 'e'},
{"vcpuid",1, 0, 'v'},
{"cpupool", 1, 0, 'c'},
COMMON_LONG_OPTS
};
- SWITCH_FOREACH_OPT(opt, "d:p:b:v:c", opts, "sched-rtds", 0) {
+ SWITCH_FOREACH_OPT(opt, "d:p:b:e:v:c", opts, "sched-rtds", 0) {
case 'd':
dom = optarg;
break;
@@ -746,6 +754,14 @@ int main_sched_rtds(int argc, char **argv)
budgets[b_index++] = strtol(optarg, NULL, 10);
opt_b = 1;
break;
+ case 'e':
+ if (e_index >= e_size) { /* extratime array is full */
+ e_size *= 2;
+ extratimes = xrealloc(extratimes, e_size);
+ }
+ extratimes[e_index++] = strtol(optarg, NULL, 10);
+ opt_e = 1;
+ break;
case 'v':
if (!strcmp(optarg, "all")) { /* get or set all vcpus of a domain */
opt_all = 1;
@@ -763,18 +779,18 @@ int main_sched_rtds(int argc, char **argv)
break;
}
- if (cpupool && (dom || opt_p || opt_b || opt_v || opt_all)) {
+ if (cpupool && (dom || opt_p || opt_b || opt_e || opt_v || opt_all)) {
fprintf(stderr, "Specifying a cpupool is not allowed with "
"other options.\n");
r = EXIT_FAILURE;
goto out;
}
- if (!dom && (opt_p || opt_b || opt_v)) {
+ if (!dom && (opt_p || opt_b || opt_e || opt_v)) {
fprintf(stderr, "Missing parameters.\n");
r = EXIT_FAILURE;
goto out;
}
- if (dom && !opt_v && !opt_all && (opt_p || opt_b)) {
+ if (dom && !opt_v && !opt_all && (opt_p || opt_b || opt_e)) {
fprintf(stderr, "Must specify VCPU.\n");
r = EXIT_FAILURE;
goto out;
@@ -785,8 +801,9 @@ int main_sched_rtds(int argc, char **argv)
goto out;
}
if (((v_index > b_index) && opt_b) || ((v_index > p_index) && opt_p)
- || p_index != b_index) {
- fprintf(stderr, "Incorrect number of period and budget\n");
+ || ((v_index > e_index) && opt_e) || p_index != b_index
+ || p_index != e_index || b_index != e_index ) {
+ fprintf(stderr, "Incorrect number of period, budget and extratime\n");
r = EXIT_FAILURE;
goto out;
}
@@ -820,7 +837,7 @@ int main_sched_rtds(int argc, char **argv)
r = EXIT_FAILURE;
goto out;
}
- } else if (!opt_p && !opt_b) {
+ } else if (!opt_p && !opt_b && !opt_e) {
/* get per-vcpu rtds scheduling parameters */
libxl_vcpu_sched_params scinfo;
libxl_vcpu_sched_params_init(&scinfo);
@@ -852,6 +869,7 @@ int main_sched_rtds(int argc, char **argv)
scinfo.vcpus[i].vcpuid = vcpus[i];
scinfo.vcpus[i].period = periods[i];
scinfo.vcpus[i].budget = budgets[i];
+ scinfo.vcpus[i].extratime = extratimes[i] ? 1 : 0;
}
rc = sched_vcpu_set(domid, &scinfo);
} else { /* set params for all vcpus */
@@ -860,6 +878,7 @@ int main_sched_rtds(int argc, char **argv)
xmalloc(sizeof(libxl_sched_params));
scinfo.vcpus[0].period = periods[0];
scinfo.vcpus[0].budget = budgets[0];
+ scinfo.vcpus[0].extratime = extratimes[0] ? 1 : 0;
rc = sched_vcpu_set_all(domid, &scinfo);
}
@@ -876,6 +895,7 @@ out:
free(vcpus);
free(periods);
free(budgets);
+ free(extratimes);
return r;
}
--
1.9.1
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
next prev parent reply other threads:[~2017-09-01 15:58 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-01 15:58 [PATCH v2 0/5] Towards work-conserving RTDS Meng Xu
2017-09-01 15:58 ` [PATCH v2 1/5] xen:rtds: towards work conserving RTDS Meng Xu
2017-09-14 1:06 ` Dario Faggioli
2017-09-15 15:38 ` Meng Xu
2017-09-01 15:58 ` [PATCH v2 2/5] libxl: enable per-VCPU extratime flag for RTDS Meng Xu
2017-09-01 16:03 ` Meng Xu
2017-09-14 0:16 ` Dario Faggioli
2017-09-15 16:01 ` Meng Xu
2017-09-19 9:23 ` Dario Faggioli
2017-10-09 16:08 ` Meng Xu
2017-09-14 0:12 ` Dario Faggioli
2017-09-01 15:58 ` Meng Xu [this message]
2017-09-14 0:51 ` [PATCH v2 3/5] xl: " Dario Faggioli
2017-10-09 16:13 ` Meng Xu
2017-10-09 17:19 ` Dario Faggioli
2017-09-14 0:58 ` Dario Faggioli
2017-09-01 15:58 ` [PATCH v2 4/5] xentrace: " Meng Xu
2017-09-14 0:55 ` Dario Faggioli
2017-09-01 15:58 ` [PATCH v2 5/5] docs: " Meng Xu
2017-09-14 0:59 ` Dario Faggioli
2017-09-13 10:28 ` [PATCH v2 0/5] Towards work-conserving RTDS Wei Liu
2017-09-13 10:42 ` Dario Faggioli
2017-10-02 14:38 ` Andrii Anisov
2017-10-02 17:04 ` Dario Faggioli
2017-10-02 19:18 ` Meng Xu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1504281532-3766-4-git-send-email-mengxu@cis.upenn.edu \
--to=mengxu@cis.upenn.edu \
--cc=dario.faggioli@citrix.com \
--cc=george.dunlap@eu.citrix.com \
--cc=ian.jackson@eu.citrix.com \
--cc=wei.liu@citrix.com \
--cc=xen-devel@lists.xen.org \
--cc=xumengpanda@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).