[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v12 for-xen-4.5 16/20] x86/VPMU: Handle PMU interrupts for PV guests
>>> On 01.10.14 at 16:08, <boris.ostrovsky@xxxxxxxxxx> wrote: > On 10/01/2014 09:18 AM, Jan Beulich wrote: >>>>> On 01.10.14 at 14:53, <boris.ostrovsky@xxxxxxxxxx> wrote: >>> On 10/01/2014 02:49 AM, Jan Beulich wrote: >>>>>>> On 30.09.14 at 18:37, <boris.ostrovsky@xxxxxxxxxx> wrote: >>>>> On 09/30/2014 11:44 AM, Jan Beulich wrote: >>>>>>>>> + { >>>>>>>>> + r->cs = cur_regs->cs; >>>>>>>>> + if ( sampled->arch.flags & TF_kernel_mode ) >>>>>>>>> + r->cs &= ~3; >>>>>>>> And once again I wonder how the consumer of this data is to tell >>>>>>>> apart guest kernel and hypervisor addresses. >>>>>>> Based on the RIP --- perf, for example, searches through various symbol >>>>>>> tables. >>>>>> That doesn't help when profiling HVM/PVH guests - addresses are >>>>>> ambiguous in that case. >>>>> Hypervisor traces are only sent to dom0, which is currently PV only. The >>>>> key here, of course, is the word 'currently'. >>>> So you completely ignore PVH Dom0? Experimental or not, I don't >>>> think that's the way to go. >>> As I mentioned in an earlier reply, I will set domain_id in the reported >>> structure to DOMID_XEN when we are reporting hypervisor sample. >>> >>>> Furthermore the check around this is >>>> once again using sampled, not sampling. >>> Which check are you referring to? >> The if() right outside (above) the still visible patch context. > > Why should it be 'sampling'? I am collecting registers from sampled vcpu > so I need to look at that domain's flags to determine the mode, don't I? You're right - I don't know what I was thinking (or whether I misplaced the question). >>>> Looking at the separation of hypervisor vs guest context to report >>>> again >>>> >>>> /* Non-privileged domains are always in XENPMU_MODE_SELF >>>> mode */ >>>> if ( (vpmu_mode & XENPMU_MODE_SELF) || >>>> (!is_hardware_domain(sampled->domain) && >>>> !is_idle_vcpu(sampled)) ) >>>> cur_regs = guest_cpu_user_regs(); >>>> else >>>> cur_regs = regs; >>>> >>>> I now additionally wonder why the condition here isn't just the SELF >>>> check: If the interrupt happened while in the hypervisor, why would >>>> you override this unconditionally to report a guest sample instead? >>>> Shouldn't the profiling domain tell you what it wants in that case >>>> (global vs guest local view)? >>> The second part of the check (!is_hardware_domain(sampled->domain) && >>> !is_idle_vcpu(sampled)) is to prevent sending hypervisor sample to a >>> non-privileged guest. vpmu_mode may be, for example, XENPMU_MODE_HV but >>> that only means that dom0 can get hypervisor samples. >> Right, but that's not what the code above does: Instead of sending >> the hypervisor sample to Dom0 it converts it to a guest mode one. > > Oh, I see --- when we get interrupted while in a non-privileged guest's > context (but in hypervisor) I send guest's registers, not Xen's. > > I think just SELF check is not sufficient though, we need to make sure > that we are not sending hypervisor sample to non-dom0. So > if ( (vpmu_mode & XENPMU_MODE_SELF) || > !is_hardware_domain(sampling->domain) ) Actually I think instead the determination of sampling needs to depend on the register context rather than solely on the current domain's ID. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |