|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH for-4.12] x86/vpmu: Improve documentation and parsing for vpmu=
>>> On 04.02.19 at 12:41, <andrew.cooper3@xxxxxxxxxx> wrote:
> --- a/docs/misc/xen-command-line.pandoc
> +++ b/docs/misc/xen-command-line.pandoc
> @@ -2088,36 +2088,36 @@ Use Virtual Processor ID support if available. This
> prevents the need for TLB
> flushes on VM entry and exit, increasing performance.
>
> ### vpmu (x86)
> -> `= ( <boolean> | { bts | ipc | arch [, ...] } )`
> + = List of [ <bool>, bts, ipc, arch ]
>
> -> Default: `off`
> + Applicability: x86. Default: false
>
> -Switch on the virtualized performance monitoring unit for HVM guests.
> +Controls for Performance Monitoring Unit virtualisation.
>
> -If the current cpu isn't supported a message like
> -'VPMU: Initialization failed. ...'
> -is printed on the hypervisor serial log.
> +Performance monitoring facilities tend to be very hardware specific, and
> +provide access to a wealth of low level processor information.
>
> -For some Intel Nehalem processors a quirk handling exist for an unknown
> -wrong behaviour (see `handle_pmc_quirk()`).
> +* An overall boolean can be used to enable or disable vPMU support. vPMU
> is
> + disabled by default. Specifying any of `bts`, `ipc` or `arch` implies
> + `vpmu=true`.
>
> -If 'vpmu=bts' is specified the virtualisation of the Branch Trace Store (BTS)
> -feature is switched on on Intel processors supporting this feature.
> + Xen's watchdog functionality is implemented using performance counters.
> + As a result, use of the **watchdog** option will override and disable
> + vPMU.
>
> -vpmu=ipc enables performance monitoring, but restricts the counters to the
> -most minimum set possible: instructions, cycles, and reference cycles. These
> -can be used to calculate instructions per cycle (IPC).
> +* The `bts` option enabled performance monitoring, and permits access to
> the
DYM "enables" here (and also below for `ipc`)?
> --- a/xen/arch/x86/cpu/vpmu.c
> +++ b/xen/arch/x86/cpu/vpmu.c
> @@ -42,19 +42,9 @@ CHECK_pmu_cntr_pair;
> CHECK_pmu_data;
> CHECK_pmu_params;
>
> -/*
> - * "vpmu" : vpmu generally enabled (all counters)
> - * "vpmu=off" : vpmu generally disabled
> - * "vpmu=bts" : vpmu enabled and Intel BTS feature switched on.
> - * "vpmu=ipc" : vpmu enabled for IPC counters only (most restrictive)
> - * "vpmu=arch" : vpmu enabled for predef arch counters only (restrictive)
> - * flag combinations are allowed, eg, "vpmu=ipc,bts".
> - */
> static unsigned int __read_mostly opt_vpmu_enabled;
> unsigned int __read_mostly vpmu_mode = XENPMU_MODE_OFF;
> unsigned int __read_mostly vpmu_features = 0;
> -static int parse_vpmu_params(const char *s);
> -custom_param("vpmu", parse_vpmu_params);
>
> static DEFINE_SPINLOCK(vpmu_lock);
> static unsigned vpmu_count;
> @@ -64,37 +54,37 @@ static DEFINE_PER_CPU(struct vcpu *, last_vcpu);
> static int __init parse_vpmu_params(const char *s)
> {
> const char *ss;
> + int rc = 0, val;
> +
> + do {
> + ss = strchr(s, ',');
> + if ( !ss )
> + ss = strchr(s, '\0');
> +
> + if ( (val = parse_bool(s, ss)) >= 0 )
> + opt_vpmu_enabled = val;
> + else if ( !cmdline_strcmp(s, "bts") )
> + vpmu_features |= XENPMU_FEATURE_INTEL_BTS;
> + else if ( !cmdline_strcmp(s, "ipc") )
> + vpmu_features |= XENPMU_FEATURE_IPC_ONLY;
> + else if ( !cmdline_strcmp(s, "arch") )
> + vpmu_features |= XENPMU_FEATURE_ARCH_ONLY;
> + else
> + rc = -EINVAL;
>
> - switch ( parse_bool(s, NULL) )
> - {
> - case 0:
> - break;
> - default:
> - do {
> - ss = strchr(s, ',');
> - if ( !ss )
> - ss = strchr(s, '\0');
> -
> - if ( !cmdline_strcmp(s, "bts") )
> - vpmu_features |= XENPMU_FEATURE_INTEL_BTS;
> - else if ( !cmdline_strcmp(s, "ipc") )
> - vpmu_features |= XENPMU_FEATURE_IPC_ONLY;
> - else if ( !cmdline_strcmp(s, "arch") )
> - vpmu_features |= XENPMU_FEATURE_ARCH_ONLY;
> - else
> - return -EINVAL;
> + s = ss + 1;
> + } while ( *ss );
> +
> + /* Selecting bts/ipc/arch forces vpmu to enabled. */
> + if ( vpmu_features )
> + opt_vpmu_enabled = true;
If you want to retain original behavior, the condition here would need
to be "!rc && vpmu_features". It's not clear whether your modification
in this regard is intentional.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |