From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paolo Bonzini Subject: [PATCH] kvm_stat: always display non tracepoint based stats Date: Wed, 21 May 2014 12:44:51 +0200 Message-ID: <1400669091-28394-1-git-send-email-pbonzini@redhat.com> To: mtosatti@redhat.com, kvm@vger.kernel.org Return-path: Received: from mail-ee0-f47.google.com ([74.125.83.47]:55329 "EHLO mail-ee0-f47.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752298AbaEUKpQ (ORCPT ); Wed, 21 May 2014 06:45:16 -0400 Received: by mail-ee0-f47.google.com with SMTP id c13so1396282eek.6 for ; Wed, 21 May 2014 03:45:14 -0700 (PDT) Sender: kvm-owner@vger.kernel.org List-ID: The old stats contain information not available in the tracepoints. Inspired by a patch from Marcelo Tosatti. Signed-off-by: Paolo Bonzini --- scripts/kvm/kvm_stat | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/scripts/kvm/kvm_stat b/scripts/kvm/kvm_stat index 762544b..b97542f 100755 --- a/scripts/kvm/kvm_stat +++ b/scripts/kvm/kvm_stat @@ -352,8 +352,8 @@ class TracepointProvider(object): return ret class Stats: - def __init__(self, provider, fields = None): - self.provider = provider + def __init__(self, providers, fields = None): + self.providers = providers self.fields_filter = fields self._update() def _update(self): @@ -362,22 +362,25 @@ class Stats: if not self.fields_filter: return True return re.match(self.fields_filter, key) is not None - self.values = dict([(key, None) - for key in provider.fields() - if wanted(key)]) - self.provider.select(self.values.keys()) + self.values = dict() + for d in providers: + provider_fields = [key for key in d.fields() if wanted(key)] + for key in provider_fields: + self.values[key] = None + d.select(provider_fields) def set_fields_filter(self, fields_filter): self.fields_filter = fields_filter self._update() def get(self): - new = self.provider.read() - for key in self.provider.fields(): - oldval = self.values.get(key, (0, 0)) - newval = new[key] - newdelta = None - if oldval is not None: - newdelta = newval - oldval[0] - self.values[key] = (newval, newdelta) + for d in providers: + new = d.read() + for key in d.fields(): + oldval = self.values.get(key, (0, 0)) + newval = new[key] + newdelta = None + if oldval is not None: + newdelta = newval - oldval[0] + self.values[key] = (newval, newdelta) return self.values if not os.access('/sys/kernel/debug', os.F_OK): @@ -496,11 +499,11 @@ options.add_option('-f', '--fields', (options, args) = options.parse_args(sys.argv) try: - provider = TracepointProvider() + providers = [TracepointProvider(), DebugfsProvider()] except: - provider = DebugfsProvider() + providers = [DebugfsProvider()] -stats = Stats(provider, fields = options.fields) +stats = Stats(providers, fields = options.fields) if options.log: log(stats) -- 1.8.3.1