On 30/10/2018 11:00, Thomas Gleixner wrote: > On Mon, 29 Oct 2018, Paolo Bonzini wrote: >> On 24/10/2018 12:13, Alexander Shishkin wrote: >>> Luwei Kang <luwei.kang@xxxxxxxxx> writes: >>>> + /* >>>> + * Set guest state of MSR_IA32_RTIT_CTL MSR (PT will be disabled >>>> + * on VM entry when it has been disabled in guest before). >>>> + */ >>>> + vmcs_write64(GUEST_IA32_RTIT_CTL, vmx->pt_desc.guest.ctl); >>>> + >>>> + if (vmx->pt_desc.guest.ctl & RTIT_CTL_TRACEEN) { >>>> + wrmsrl(MSR_IA32_RTIT_CTL, 0); >>>> + pt_save_msr(&vmx->pt_desc.host, vmx->pt_desc.addr_range); >>>> + pt_load_msr(&vmx->pt_desc.guest, vmx->pt_desc.addr_range); >>>> + } >>>> +} >>> >>> From my side this is still a NAK, because [1]. >>> >>> [1] https://marc.info/?l=kvm&m=153847567226248&w=2 >> >> Then you should have replied to >> https://marc.info/?l=kvm&m=153865386015249&w=2 instead of having Luwei >> do the work for nothing. >> >> Quoting from there: >> >>>> One shouldn't have to enable or disable anything in KVM to stop it from >>>> breaking one's existing workflow. That makes no sense. >>> >>> If you "have to enable or disable anything" it means you have to >>> override the default. But the default in this patches is "no change >>> compared to before the patches", leaving tracing of both host and guest >>> entirely to the host, so I don't understand your remark. What workflow >>> is broken? >>> >>>> There already are controls in perf that enable/disable guest tracing. >>> >>> You are confusing "tracing guest from the host" and "the guest can trace >>> itself". This patchset is adding support for the latter, and that >>> affects directly whether the tracing CPUID leaf can be added to the >>> guest. Therefore it's not perf that can decide whether to turn it on; >>> KVM must know it when /dev/kvm is opened, which is why it is a module >>> parameter. >> >> I'd be happier if we found an agreement, but without discussion that >> just won't happen. > > So at least we need a way for perf on the host to programmatically detect, > that 'guest traces itself' is enabled, so it can inject that information > into the host data and post processing can tell that. W/o something like > that it's going to be a FAQ. In guest-tracing mode there will be already a TIP.PGD and TIP.PGE packet respectively before vmentry and after vmexit, caused by the RTIT_CTL WRMSRs in pt_guest_enter and pt_guest_exit. The target IP of the packets will come from kvm-intel.ko. In system mode instead you get a Paging Information Packet on vmentry/vmexit, with bit 0 set in the third byte. You won't get it if guest-side tracing is on (because tracing has been disabled by pt_guest_enter and won't be re-enabled until pt_guest_exit). I don't think it's correct to "fake" the PIP in guest-tracing mode, because TIP.PGD should be followed immediately by TIP.PGE. Is this okay for perf users? Paolo