[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH 15/24] xl: allow to set the ratelimit value online for Credit2



On 17/08/16 18:19, Dario Faggioli wrote:
> Last part of the wiring necessary for allowing to
> change the value of the ratelimit_us parameter online,
> for Credit2 (like it is already for Credit1).
> 
> Signed-off-by: Dario Faggioli <dario.faggioli@xxxxxxxxxx>
> ---
> Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
> Cc: Wei Liu <wei.liu2@xxxxxxxxxx>
> Cc: George Dunlap <george.dunlap@xxxxxxxxxxxxx>
> ---
>  docs/man/xl.pod.1.in      |    9 ++++
>  tools/libxl/xl_cmdimpl.c  |   91 
> +++++++++++++++++++++++++++++++++++++--------
>  tools/libxl/xl_cmdtable.c |    2 +
>  3 files changed, 86 insertions(+), 16 deletions(-)
> 
> diff --git a/docs/man/xl.pod.1.in b/docs/man/xl.pod.1.in
> index 1adf322..013591b 100644
> --- a/docs/man/xl.pod.1.in
> +++ b/docs/man/xl.pod.1.in
> @@ -1089,6 +1089,15 @@ to 65535 and the default is 256.
>  
>  Restrict output to domains in the specified cpupool.
>  
> +=item B<-s>, B<--schedparam>
> +
> +Specify to list or set pool-wide scheduler parameters.
> +
> +=item B<-r RLIMIT>, B<--ratelimit_us=RLIMIT>
> +
> +Attempts to limit the rate of context switching. It is basically the same
> +as B<--ratelimit_us> in B<sched-credit>
> +

This is a bit of a strange interface, but it follows suit with what the
credit1 command does, so:

Reviewed-by: George Dunlap <george.dunlap@xxxxxxxxxx>

>  =back
>  
>  =item B<sched-rtds> [I<OPTIONS>]
> diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
> index 7f961e3..5bdeda8 100644
> --- a/tools/libxl/xl_cmdimpl.c
> +++ b/tools/libxl/xl_cmdimpl.c
> @@ -6452,8 +6452,29 @@ static int sched_credit_pool_output(uint32_t poolid)
>      return 0;
>  }
>  
> -static int sched_credit2_domain_output(
> -    int domid)
> +static int sched_credit2_params_set(int poolid,
> +                                    libxl_sched_credit2_params *scinfo)
> +{
> +    if (libxl_sched_credit2_params_set(ctx, poolid, scinfo)) {
> +        fprintf(stderr, "libxl_sched_credit2_params_set failed.\n");
> +        return 1;
> +    }
> +
> +    return 0;
> +}
> +
> +static int sched_credit2_params_get(int poolid,
> +                                    libxl_sched_credit2_params *scinfo)
> +{
> +    if (libxl_sched_credit2_params_get(ctx, poolid, scinfo)) {
> +        fprintf(stderr, "libxl_sched_credit2_params_get failed.\n");
> +        return 1;
> +    }
> +
> +    return 0;
> +}
> +
> +static int sched_credit2_domain_output(int domid)
>  {
>      char *domname;
>      libxl_domain_sched_params scinfo;
> @@ -6478,6 +6499,22 @@ static int sched_credit2_domain_output(
>      return 0;
>  }
>  
> +static int sched_credit2_pool_output(uint32_t poolid)
> +{
> +    libxl_sched_credit2_params scparam;
> +    char *poolname = libxl_cpupoolid_to_name(ctx, poolid);
> +
> +    if (sched_credit2_params_get(poolid, &scparam))
> +        printf("Cpupool %s: [sched params unavailable]\n", poolname);
> +    else
> +        printf("Cpupool %s: ratelimit=%dus\n",
> +               poolname, scparam.ratelimit_us);
> +
> +    free(poolname);
> +
> +    return 0;
> +}
> +
>  static int sched_rtds_domain_output(
>      int domid)
>  {
> @@ -6577,17 +6614,6 @@ static int sched_rtds_pool_output(uint32_t poolid)
>      return 0;
>  }
>  
> -static int sched_default_pool_output(uint32_t poolid)
> -{
> -    char *poolname;
> -
> -    poolname = libxl_cpupoolid_to_name(ctx, poolid);
> -    printf("Cpupool %s:\n",
> -           poolname);
> -    free(poolname);
> -    return 0;
> -}
> -
>  static int sched_domain_output(libxl_scheduler sched, int (*output)(int),
>                                 int (*pooloutput)(uint32_t), const char 
> *cpupool)
>  {
> @@ -6833,17 +6859,22 @@ int main_sched_credit2(int argc, char **argv)
>  {
>      const char *dom = NULL;
>      const char *cpupool = NULL;
> +    int ratelimit = 0;
>      int weight = 256;
> +    bool opt_s = false;
> +    bool opt_r = false;
>      bool opt_w = false;
>      int opt, rc;
>      static struct option opts[] = {
>          {"domain", 1, 0, 'd'},
>          {"weight", 1, 0, 'w'},
> +        {"schedparam", 0, 0, 's'},
> +        {"ratelimit_us", 1, 0, 'r'},
>          {"cpupool", 1, 0, 'p'},
>          COMMON_LONG_OPTS
>      };
>  
> -    SWITCH_FOREACH_OPT(opt, "d:w:p:", opts, "sched-credit2", 0) {
> +    SWITCH_FOREACH_OPT(opt, "d:w:p:r:s", opts, "sched-credit2", 0) {
>      case 'd':
>          dom = optarg;
>          break;
> @@ -6851,6 +6882,13 @@ int main_sched_credit2(int argc, char **argv)
>          weight = strtol(optarg, NULL, 10);
>          opt_w = true;
>          break;
> +    case 's':
> +        opt_s = true;
> +        break;
> +    case 'r':
> +        ratelimit = strtol(optarg, NULL, 10);
> +        opt_r = true;
> +        break;
>      case 'p':
>          cpupool = optarg;
>          break;
> @@ -6866,10 +6904,31 @@ int main_sched_credit2(int argc, char **argv)
>          return EXIT_FAILURE;
>      }
>  
> -    if (!dom) { /* list all domain's credit scheduler info */
> +    if (opt_s) {
> +        libxl_sched_credit2_params scparam;
> +        uint32_t poolid = 0;
> +
> +        if (cpupool) {
> +            if (libxl_cpupool_qualifier_to_cpupoolid(ctx, cpupool,
> +                                                     &poolid, NULL) ||
> +                !libxl_cpupoolid_is_valid(ctx, poolid)) {
> +                fprintf(stderr, "unknown cpupool \'%s\'\n", cpupool);
> +                return EXIT_FAILURE;
> +            }
> +        }
> +
> +        if (!opt_r) { /* Output scheduling parameters */
> +            if (sched_credit2_pool_output(poolid))
> +                return EXIT_FAILURE;
> +        } else {      /* Set scheduling parameters (so far, just ratelimit) 
> */
> +            scparam.ratelimit_us = ratelimit;
> +            if (sched_credit2_params_set(poolid, &scparam))
> +                return EXIT_FAILURE;
> +        }
> +    } else if (!dom) { /* list all domain's credit scheduler info */
>          if (sched_domain_output(LIBXL_SCHEDULER_CREDIT2,
>                                  sched_credit2_domain_output,
> -                                sched_default_pool_output,
> +                                sched_credit2_pool_output,
>                                  cpupool))
>              return EXIT_FAILURE;
>      } else {
> diff --git a/tools/libxl/xl_cmdtable.c b/tools/libxl/xl_cmdtable.c
> index 85c1e0f..a420415 100644
> --- a/tools/libxl/xl_cmdtable.c
> +++ b/tools/libxl/xl_cmdtable.c
> @@ -265,6 +265,8 @@ struct cmd_spec cmd_table[] = {
>        "[-d <Domain> [-w[=WEIGHT]]] [-p CPUPOOL]",
>        "-d DOMAIN, --domain=DOMAIN     Domain to modify\n"
>        "-w WEIGHT, --weight=WEIGHT     Weight (int)\n"
> +      "-s         --schedparam        Query / modify scheduler parameters\n"
> +      "-r RLIMIT, --ratelimit_us=RLIMIT Set the scheduling rate limit, in 
> microseconds\n"
>        "-p CPUPOOL, --cpupool=CPUPOOL  Restrict output to CPUPOOL"
>      },
>      { "sched-rtds",
> 


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.