Re: [PATCH v1 1/8] perf/x86: add support to mask counters from host

Wei Wang
2018-11-02T09:08:31Z

On 11/01/2018 10:52 PM, Peter Zijlstra wrote:
> On Thu, Nov 01, 2018 at 06:04:01PM +0800, Wei Wang wrote:
>> Add x86_perf_mask_perf_counters to reserve counters from the host perf
>> subsystem. The masked counters will not be assigned to any host perf
>> events. This can be used by the hypervisor to reserve perf counters for
>> a guest to use.
>>
>> This function is currently supported on Intel CPUs only, but put in x86
>> perf core because the counter assignment is implemented here and we need
>> to re-enable the pmu which is defined in the x86 perf core in the case
>> that a counter to be masked happens to be used by the host.
>>
>> Signed-off-by: Wei Wang <wei.w.wang@intel.com>
>> Cc: Peter Zijlstra <peterz@infradead.org>
>> Cc: Andi Kleen <ak@linux.intel.com>
>> Cc: Paolo Bonzini <pbonzini@redhat.com>
>> ---
>> arch/x86/events/core.c | 37 +++++++++++++++++++++++++++++++++++++
>> arch/x86/include/asm/perf_event.h | 1 +
>> 2 files changed, 38 insertions(+)
>>
>> diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c
>> index 106911b..e73135a 100644
>> --- a/arch/x86/events/core.c
>> +++ b/arch/x86/events/core.c
>> @@ -716,6 +716,7 @@ struct perf_sched {
>> static void perf_sched_init(struct perf_sched *sched, struct event_constraint **constraints,
>> int num, int wmin, int wmax, int gpmax)
>> {
>> + struct cpu_hw_events *cpuc = this_cpu_ptr(&cpu_hw_events);
>> int idx;
>>
>> memset(sched, 0, sizeof(*sched));
>> @@ -723,6 +724,9 @@ static void perf_sched_init(struct perf_sched *sched, struct event_constraint **
>> sched->max_weight = wmax;
>> sched->max_gp = gpmax;
>> sched->constraints = constraints;
>> +#ifdef CONFIG_CPU_SUP_INTEL
>> + sched->state.used[0] = cpuc->intel_ctrl_guest_mask;
>> +#endif
> NAK. This completely undermines the whole purpose of event scheduling.
>

Hi Peter,

Could you share more details how it would affect the host side event
scheduling?

We wanted to partition out the perf counters that the guest needs and
dedicated them to guest usages for that period (i.e. guest occupation
period).
The remaining counters are still schedulable for the host events (there
won't be
many other perf events when the guest runs, watchdog_hld seems to be the one
that would).

Would you have any suggestions? Thanks.

Best,
Wei