|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v11 6/9] x86: collect global QoS monitoring information
>>> On 20.06.14 at 16:31, <dongxiao.xu@xxxxxxxxx> wrote:
> This implementation tries to put all policies into user space, thus some
> global QoS monitoring information needs to be exposed, such as the total
> RMID count, L3 upscaling factor, etc.
>
> Signed-off-by: Dongxiao Xu <dongxiao.xu@xxxxxxxxx>
> ---
> xen/arch/x86/sysctl.c | 52
> +++++++++++++++++++++++++++++++++++++++++++++
> xen/include/public/sysctl.h | 14 ++++++++++++
> 2 files changed, 66 insertions(+)
>
> diff --git a/xen/arch/x86/sysctl.c b/xen/arch/x86/sysctl.c
> index 49f95e4..ea9b2e4 100644
> --- a/xen/arch/x86/sysctl.c
> +++ b/xen/arch/x86/sysctl.c
> @@ -28,6 +28,7 @@
> #include <xen/nodemask.h>
> #include <xen/cpu.h>
> #include <xsm/xsm.h>
> +#include <asm/pqos.h>
>
> #define get_xen_guest_handle(val, hnd) do { val = (hnd).p; } while (0)
>
> @@ -152,6 +153,57 @@ long arch_do_sysctl(
> }
> break;
>
> + case XEN_SYSCTL_pqos_monitor_op:
> + if ( !pqos_monitor_enabled() )
> + return -ENODEV;
> +
> + switch ( sysctl->u.pqos_monitor_op.cmd )
> + {
> + case XEN_SYSCTL_PQOS_MONITOR_cqm_enabled:
> + sysctl->u.pqos_monitor_op.data =
> + (pqosm->qm_features & QOS_MONITOR_TYPE_L3) &&
> + (pqosm->l3m.l3_features & L3_FEATURE_OCCUPANCY);
> + break;
> + case XEN_SYSCTL_PQOS_MONITOR_get_total_rmid:
> + sysctl->u.pqos_monitor_op.data =
> + pqosm->rmid_max - pqosm->rmid_min + 1;
> + break;
> + case XEN_SYSCTL_PQOS_MONITOR_get_l3_upscaling_factor:
> + sysctl->u.pqos_monitor_op.data = pqosm->l3m.upscaling_factor;
> + break;
> + case XEN_SYSCTL_PQOS_MONITOR_get_l3_cache_size:
> + sysctl->u.pqos_monitor_op.data = boot_cpu_data.x86_cache_size;
> + break;
> + case XEN_SYSCTL_PQOS_MONITOR_get_socket_cpu:
> + {
> + unsigned int i, cpu;
> + int socket = sysctl->u.pqos_monitor_op.data;
unsigned int
> +
> + for ( i = 0; i < NR_CPUS; i++ )
Why NR_CPUS when a few lines down you show that you know of
nr_cpu_ids?
> + {
> + if ( cpu_to_socket(i) < 0 || cpu_to_socket(i) != socket )
> + continue;
> + cpu = cpumask_any(per_cpu(cpu_core_mask, i));
> + if ( cpu < nr_cpu_ids )
> + {
> + sysctl->u.pqos_monitor_op.data = cpu;
> + break;
> + }
> + }
> +
> + if ( i == NR_CPUS )
> + ret = -EFAULT;
-EFAULT?
> + }
> + break;
> +
> + default:
> + sysctl->u.pqos_monitor_op.data = 0;
> + ret = -ENOSYS;
> + break;
> + }
> + copyback = 1;
> + break;
Indentation.
> --- a/xen/include/public/sysctl.h
> +++ b/xen/include/public/sysctl.h
> @@ -659,6 +659,18 @@ struct msr_access_info {
> xen_sysctl_msr_data_t *msr_data;
> };
>
> +#define XEN_SYSCTL_PQOS_MONITOR_get_total_rmid 0
> +#define XEN_SYSCTL_PQOS_MONITOR_get_l3_upscaling_factor 1
> +#define XEN_SYSCTL_PQOS_MONITOR_get_l3_cache_size 2
> +#define XEN_SYSCTL_PQOS_MONITOR_get_socket_cpu 3
> +#define XEN_SYSCTL_PQOS_MONITOR_cqm_enabled 4
> +struct xen_sysctl_pqos_monitor_op {
> + uint32_t cmd;
> + uint64_t data;
Missing explicit padding between the two fields, or need to use
uint64_aligned_t.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |