From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42553) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YElJt-0004oo-PF for qemu-devel@nongnu.org; Fri, 23 Jan 2015 15:59:10 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YElJo-0000iR-UM for qemu-devel@nongnu.org; Fri, 23 Jan 2015 15:59:09 -0500 Received: from mx1.redhat.com ([209.132.183.28]:57152) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YElJo-0000iL-LI for qemu-devel@nongnu.org; Fri, 23 Jan 2015 15:59:04 -0500 From: Wei Huang Date: Fri, 23 Jan 2015 15:56:04 -0500 Message-Id: <1422046564-10270-5-git-send-email-wei@redhat.com> In-Reply-To: <1422046564-10270-1-git-send-email-wei@redhat.com> References: <1422046564-10270-1-git-send-email-wei@redhat.com> Subject: [Qemu-devel] [PATCH V3 4/4] kvm_stat: Add RESET support for perf event ioctl List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: pbonzini@redhat.com, peter.maydell@linaro.org While running kvm_stat using tracepoint on ARM64 hardware (e.g. "kvm_stat -1 -t"), the initial values of some kvm_userspace_exit counters were found to be very suspecious. For instance the tracing tool showed that S390_TSCH was called many times on ARM64 machine, which apparently was wrong. This patch adds RESET ioctl support for perf monitoring. Before calling ioctl to enable a perf event, this patch resets the counter first. With this patch, the init counter values become correct on ARM64 hardware. Example: ==== before patch ==== kvm_userspace_exit(S390_SIEIC) 1426 0 kvm_userspace_exit(S390_TSCH) 339 0 ==== after patch ==== kvm_userspace_exit(S390_SIEIC) 0 0 kvm_userspace_exit(S390_TSCH) 0 0 Signed-off-by: Wei Huang --- scripts/kvm/kvm_stat | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/kvm/kvm_stat b/scripts/kvm/kvm_stat index 8f6f007..f927e97 100755 --- a/scripts/kvm/kvm_stat +++ b/scripts/kvm/kvm_stat @@ -186,6 +186,7 @@ ioctl_numbers = { 'SET_FILTER' : 0x40082406, 'ENABLE' : 0x00002400, 'DISABLE' : 0x00002401, + 'RESET' : 0x00002403, } def x86_init(flag): @@ -346,6 +347,9 @@ class Event(object): def disable(self): import fcntl fcntl.ioctl(self.fd, ioctl_numbers['DISABLE'], 0) + def reset(self): + import fcntl + fcntl.ioctl(self.fd, ioctl_numbers['RESET'], 0) class TracepointProvider(object): def __init__(self): @@ -405,7 +409,7 @@ class TracepointProvider(object): for group in self.group_leaders: for event in group.events: if event.name in fields: + event.reset() event.enable() else: event.disable() -- 1.8.3.1