[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v4 0/7] enable Cache QoS Monitoring (CQM) feature
Changes from v3: - Use structure to better organize CQM related global variables. - Address comments from Andrew Cooper, including: * Remove the domain creation flag for CQM RMID allocation. * Adjust the boot parameter format, use custom_param(). * Add documentation for the new added boot parameter. * Change QoS type flag to be uint64_t. * Initialize the per socket cpu bitmap in system boot time. * Remove get_cqm_avail() function. * Misc of format changes. - Address comment from Daniel De Graaf, including: * Use avc_current_has_perm() for XEN2__PQOS_OP that belongs to SECCLASS_XEN2. Changes from v2: - Address comments from Andrew Cooper, including: * Merging tools stack changes into one patch. * Reduce the IPI number to one per socket. * Change structures for CQM data exchange between tools and Xen. * Misc of format/variable/function name changes. - Address comments from Konrad Rzeszutek Wilk, including: * Simplify the error printing logic. * Add xsm check for the new added hypercalls. Changes from v1: - Address comments from Andrew Cooper, including: * Change function names, e.g., alloc_cqm_rmid(), system_supports_cqm(), etc. * Change some structure element order to save packing cost. * Correct some function's return value. * Some programming styles change. * ... Future generations of Intel Xeon processor may offer monitoring capability in each logical processor to measure specific quality-of-service metric, for example, the Cache QoS Monitoring to get L3 cache occupancy. Detailed information please refer to Intel SDM chapter 17.14. Cache QoS Monitoring provides a layer of abstraction between applications and logical processors through the use of Resource Monitoring IDs (RMIDs). In Xen design, each guest in the system can be assigned an RMID independently, while RMID=0 is reserved for monitoring domains that doesn't enable CQM service. When any of the domain's vcpu is scheduled on a logical processor, the domain's RMID will be activated by programming the value into one specific MSR, and when the vcpu is scheduled out, a RMID=0 will be programmed into that MSR. The Cache QoS Hardware tracks cache utilization of memory accesses according to the RMIDs and reports monitored data via a counter register. With this solution, we can get the knowledge how much L3 cache is used by a certain guest. To attach CQM service to a certain guest, two approaches are provided: 1) Create the guest with "pqos_cqm=1" set in configuration file. 2) Use "xl pqos-attach cqm domid" for a running guest. To detached CQM service from a guest, users can: 1) Use "xl pqos-detach cqm domid" for a running guest. 2) Also destroying a guest will detach the CQM service. To get the L3 cache usage, users can use the command of: $ xl pqos-list cqm (domid) The below data is just an example showing how the CQM related data is exposed to end user. [root@localhost]# xl pqos-list cqm Name ID SocketID L3C_Usage SocketID L3C_Usage Domain-0 0 0 20127744 1 25231360 ExampleHVMDomain 1 0 3211264 1 10551296 RMID count 56 RMID available 53 Dongxiao Xu (7): x86: detect and initialize Cache QoS Monitoring feature x86: dynamically attach/detach CQM service for a guest x86: initialize per socket cpu map x86: collect CQM information from all sockets x86: enable CQM monitoring for each domain RMID xsm: add platform QoS related xsm policies tools: enable Cache QoS Monitoring feature for libxl/libxc docs/misc/xen-command-line.markdown | 8 + tools/flask/policy/policy/modules/xen/xen.if | 2 +- tools/flask/policy/policy/modules/xen/xen.te | 5 +- tools/libxc/xc_domain.c | 47 ++++++ tools/libxc/xenctrl.h | 11 ++ tools/libxl/Makefile | 3 +- tools/libxl/libxl.h | 5 + tools/libxl/libxl_pqos.c | 108 ++++++++++++ tools/libxl/xl.h | 3 + tools/libxl/xl_cmdimpl.c | 146 ++++++++++++++++ tools/libxl/xl_cmdtable.c | 15 ++ xen/arch/x86/Makefile | 1 + xen/arch/x86/cpu/intel.c | 6 + xen/arch/x86/domain.c | 8 + xen/arch/x86/domctl.c | 40 +++++ xen/arch/x86/pqos.c | 234 ++++++++++++++++++++++++++ xen/arch/x86/setup.c | 3 + xen/arch/x86/smp.c | 7 +- xen/arch/x86/smpboot.c | 19 ++- xen/arch/x86/sysctl.c | 62 +++++++ xen/include/asm-x86/cpufeature.h | 1 + xen/include/asm-x86/domain.h | 2 + xen/include/asm-x86/msr-index.h | 5 + xen/include/asm-x86/pqos.h | 55 ++++++ xen/include/asm-x86/smp.h | 2 + xen/include/public/domctl.h | 20 +++ xen/include/public/sysctl.h | 10 ++ xen/include/xen/cpumask.h | 1 + xen/xsm/flask/hooks.c | 7 + xen/xsm/flask/policy/access_vectors | 17 +- 30 files changed, 844 insertions(+), 9 deletions(-) create mode 100644 tools/libxl/libxl_pqos.c create mode 100644 xen/arch/x86/pqos.c create mode 100644 xen/include/asm-x86/pqos.h -- 1.7.9.5 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |