[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v9 6/6] tools: enable Cache QoS Monitoring feature for libxl/libxc
On Wed, 2014-02-19 at 14:32 +0800, Dongxiao Xu wrote: > +=item B<pqos-attach> [I<qos-type>] [I<domain-id>] > + > +Attach certain platform QoS service for a domain. > +Current supported I<qos-type> is: "cqm". > diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h > index 12d6c31..f3d2202 100644 > --- a/tools/libxl/libxl.h > +++ b/tools/libxl/libxl.h > @@ -1105,6 +1105,10 @@ int libxl_flask_getenforce(libxl_ctx *ctx); > int libxl_flask_setenforce(libxl_ctx *ctx, int mode); > int libxl_flask_loadpolicy(libxl_ctx *ctx, void *policy, uint32_t size); > > +int libxl_pqos_attach(libxl_ctx *ctx, uint32_t domid, const char * qos_type); > +int libxl_pqos_detach(libxl_ctx *ctx, uint32_t domid, const char * qos_type); I have a feeling that qos_type should actually be an enum in the IDL. The xl functions can probably use the autogenerate libxl_BLAH_from_string() functions to help with parsing. What other qos types are you envisaging? Is it valid to enable or disable multiple such things independently? > +void libxl_map_cqm_buffer(libxl_ctx *ctx, libxl_cqminfo *xlinfo); So each qos type is going to come with its own map function? I don't see the LIBXL_HAVE #define which we discussed last time anywhere here. > diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl > index 649ce50..43c0f48 100644 > --- a/tools/libxl/libxl_types.idl > +++ b/tools/libxl/libxl_types.idl > @@ -596,3 +596,10 @@ libxl_event = Struct("event",[ > ])), > ("domain_create_console_available", Struct(None, [])), > ]))]) > + > +libxl_cqminfo = Struct("cqminfo", [ > + ("buffer_virt", uint64), An opaque void * masquerading as an integer is not a suitable interface. This should be a (pointer to a) struct of the appropriate type, or an Array of such types etc (or possibly several such arrays depending on what you are returning). I haven't looked in detail into what is actually in this buffer, but please try and have libxl bake it into a more consumable form -- e.g. an array of per-domain properties or something rather than a raw list. > + ("size", uint32), > + ("nr_rmids", uint32), > + ("nr_sockets", uint32), > + ]) > [...][ > +static void print_cqm_info(const libxl_cqminfo *info) > +{ > + unsigned int i, j, k; > + char *domname; > + int print_header; > + int cqm_domains = 0; > + uint16_t *rmid_to_dom; > + uint64_t *l3c_data; > + uint32_t first_domain = 0; > + unsigned int num_domains = 1024; > + > + if (info->nr_rmids == 0) { > + printf("System doesn't support CQM.\n"); > + return; > + } > + > + print_header = 1; > + l3c_data = (uint64_t *)(info->buffer_virt); > + rmid_to_dom = (uint16_t *)(info->buffer_virt + > + info->nr_sockets * info->nr_rmids * sizeof(uint64_t)); > + for (i = first_domain; i < (first_domain + num_domains); i++) { > + for (j = 0; j < info->nr_rmids; j++) { > + if (rmid_to_dom[j] != i) > + continue; > + > + if (print_header) { > + printf("Name ID"); > + for (k = 0; k < info->nr_sockets; k++) > + printf("\tSocketID\tL3C_Usage"); > + print_header = 0; > + } > + > + domname = libxl_domid_to_name(ctx, i); > + printf("\n%-40s %5d", domname, i); > + free(domname); > + cqm_domains++; > + > + for (k = 0; k < info->nr_sockets; k++) > + printf("%10u %16lu ", > + k, l3c_data[info->nr_rmids * k + j]); > + } This should be transformed into a sensible interface within libxl so that it can be consumed in a straightforward manner by the users of libxl, rather than asking them all to reimplement this. Is the buffer format considered a frozen ABI? > diff --git a/tools/libxl/xl_cmdtable.c b/tools/libxl/xl_cmdtable.c > index ebe0220..d4af4a9 100644 > --- a/tools/libxl/xl_cmdtable.c > +++ b/tools/libxl/xl_cmdtable.c > @@ -494,6 +494,21 @@ struct cmd_spec cmd_table[] = { > "[options]", > "-F Run in the foreground", > }, > + { "pqos-attach", > + &main_pqosattach, 0, 1, > + "Allocate and map qos resource", > + "<Resource> <Domain>", > + }, > + { "pqos-detach", > + &main_pqosdetach, 0, 1, > + "Reliquish qos resource", "Relinquish" and perhaps "resources" (in both cases) > + "<Resource> <Domain>", > + }, > + { "pqos-list", > + &main_pqoslist, 0, 0, > + "List qos information for all domains", > + "<Resource>", > + }, > }; > > int cmdtable_len = sizeof(cmd_table)/sizeof(struct cmd_spec); _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |