From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: Some Code for Performance Profiling Date: Mon, 05 Apr 2010 11:34:20 +0300 Message-ID: <4BB9A08C.4010408@redhat.com> References: <6d8082041003310953p33e30819vbb7c2a122bd6becd@mail.gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org, Nipun sehrawat To: Jiaqing Du Return-path: Received: from mx1.redhat.com ([209.132.183.28]:17525 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750895Ab0DEIeY (ORCPT ); Mon, 5 Apr 2010 04:34:24 -0400 In-Reply-To: <6d8082041003310953p33e30819vbb7c2a122bd6becd@mail.gmail.com> Sender: kvm-owner@vger.kernel.org List-ID: On 03/31/2010 07:53 PM, Jiaqing Du wrote: > Hi, > > We have some code about performance profiling in KVM. They are outputs > of a school project. Previous discussions in KVM, Perfmon2, and Xen > mailing lists helped us a lot. The code are NOT in a good shape and > are only used to demonstrated the feasibility of doing performance > profiling in KVM. Feel free to use it if you want. > Performance monitoring is an important feature for kvm. Is there any chance you can work at getting it into good shape? > We categorize performance profiling in a virtualized environment into > two types: *guest-wide profiling* and *system-wide profiling*. For > guest-wide profiling, only the guest is profiled. KVM virtualizes the > PMU and the user runs a profiler directly in the guest. It requires no > modifications to the guest OS and the profiler running in the guest. > For system-wide profiling, both KVM and the guest OS are profiled. The > results are similar to what XenOprof outputs. In this case, one > profiler running in the host and one profiler running in the guest. > Still it requires no modifications to the guest and the profiler > running in it. > Can your implementation support both simultaneously? > For guest-wide profiling, there are two possible places to save and > restore the related MSRs. One is where the CPU switches between guest > mode and host mode. We call this *CPU-switch*. Profiling with this > enabled reflects how the guest behaves on the physical CPU, plus other > virtualized, not emulated, devices. The other place is where the CPU > switches between the KVM context and others. Here KVM context means > the CPU is executing guest code or KVM code, both kernel space and > user space. We call this *domain-switch*. Profiling with this enabled > discloses how the guest behaves on both the physical CPU and KVM. > (Some emulated operations are really expensive in a virtualized > environment.) > Which method do you use? Or do you support both? Note disclosing host pmu data to the guest is sometimes a security issue. -- Do not meddle in the internals of kernels, for they are subtle and quick to panic.