On Fri, Mar 06, 2020 at 09:42:47AM -0500, Liang, Kan wrote:
On 3/6/2020 8:53 AM, Peter Zijlstra wrote:
On Fri, Mar 06, 2020 at 01:56:55AM +0800, Luwei Kang wrote:
From: Kan Liang <kan.liang@xxxxxxxxxxxxxxx>
The PEBS event created by host needs to be assigned specific counters
requested by the guest, which means the guest and host counter indexes
have to be the same or fail to create. This is needed because PEBS leaks
counter indexes into the guest. Otherwise, the guest driver will be
confused by the counter indexes in the status field of the PEBS record.
A guest_dedicated_idx field is added to indicate the counter index
specifically requested by KVM. The dedicated event constraints would
constrain the counter in the host to the same numbered counter in guest.
A intel_ctrl_guest_dedicated_mask field is added to indicate the enabled
counters for guest PEBS events. The IA32_PEBS_ENABLE MSR will be switched
during the VMX transitions if intel_ctrl_guest_owned is set.
+ /* the guest specified counter index of KVM owned event, e.g PEBS */
+ int guest_dedicated_idx;
We've always objected to guest 'owned' counters, they destroy scheduling
freedom. Why are you expecting that to be any different this time?
The new proposal tries to 'own' a counter by setting the event constraint.
It doesn't stop other events using the counter.
If there is high priority event which requires the same counter, scheduler
can still reject the request from KVM.
I don't think it destroys the scheduling freedom this time.
Suppose your KVM thing claims counter 0/2 (ICL/SKL) for some random PEBS
event, and then the host wants to use PREC_DIST.. Then one of them will
be screwed for no reason what so ever.
How is that not destroying scheduling freedom? Any other situation we'd
have moved the !PREC_DIST PEBS event to another counter.