kvm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/6] kvm_stat tracepoint support
@ 2010-08-31 13:25 Avi Kivity
  2010-08-31 13:25 ` [PATCH 0/6] *** SUBJECT HERE *** Avi Kivity
                   ` (6 more replies)
  0 siblings, 7 replies; 14+ messages in thread
From: Avi Kivity @ 2010-08-31 13:25 UTC (permalink / raw)
  To: Marcelo Tosatti, kvm

This patchset allows kvm_stat to display the information exposed by kvm
tracepoints.

Avi Kivity (6):
  kvm_stat: refactor to separate stats provider from difference engine
  kvm_stat: implement tracepoint stats provider
  kvm_stat: provide detailed kvm_exit:exit_reason display
  kvm_stat: sort tui output according to highest occurence
  kvm_stat: increase label width
  kvm_stat: be slower

 kvm/kvm_stat |  297 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 285 insertions(+), 12 deletions(-)


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 0/6] *** SUBJECT HERE ***
  2010-08-31 13:25 [PATCH 0/6] kvm_stat tracepoint support Avi Kivity
@ 2010-08-31 13:25 ` Avi Kivity
  2010-08-31 13:30   ` Avi Kivity
  2010-08-31 13:25 ` [PATCH 1/6] kvm_stat: refactor to separate stats provider from difference engine Avi Kivity
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 14+ messages in thread
From: Avi Kivity @ 2010-08-31 13:25 UTC (permalink / raw)
  To: Marcelo Tosatti, kvm

*** BLURB HERE ***

Avi Kivity (6):
  kvm_stat: refactor to separate stats provider from difference engine
  kvm_stat: implement tracepoint stats provider
  kvm_stat: provide detailed kvm_exit:exit_reason display
  kvm_stat: sort tui output according to highest occurence
  kvm_stat: increase label width
  kvm_stat: be slower

 kvm/kvm_stat |  297 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 285 insertions(+), 12 deletions(-)


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 1/6] kvm_stat: refactor to separate stats provider from difference engine
  2010-08-31 13:25 [PATCH 0/6] kvm_stat tracepoint support Avi Kivity
  2010-08-31 13:25 ` [PATCH 0/6] *** SUBJECT HERE *** Avi Kivity
@ 2010-08-31 13:25 ` Avi Kivity
  2010-08-31 13:25 ` [PATCH 2/6] kvm_stat: implement tracepoint stats provider Avi Kivity
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 14+ messages in thread
From: Avi Kivity @ 2010-08-31 13:25 UTC (permalink / raw)
  To: Marcelo Tosatti, kvm

Signed-off-by: Avi Kivity <avi@redhat.com>
---
 kvm/kvm_stat |   33 ++++++++++++++++++++++++---------
 1 files changed, 24 insertions(+), 9 deletions(-)

diff --git a/kvm/kvm_stat b/kvm/kvm_stat
index 21aff5b..75424fc 100755
--- a/kvm/kvm_stat
+++ b/kvm/kvm_stat
@@ -3,21 +3,36 @@
 import curses
 import sys, os, time, optparse
 
+class DebugfsProvider(object):
+    def __init__(self):
+        self.base = '/sys/kernel/debug/kvm'
+        self._fields = os.listdir(self.base)
+    def fields(self):
+        return self._fields
+    def select(self, fields):
+        self._fields = fields
+    def read(self):
+        def val(key):
+            return int(file(self.base + '/' + key).read())
+        return dict([(key, val(key)) for key in self._fields])
+
 class Stats:
-    def __init__(self, fields = None):
+    def __init__(self, provider, fields = None):
         def wanted(key):
             import re
             if not fields:
                 return True
             return re.match(fields, key) != None
-        self.base = '/sys/kernel/debug/kvm'
-        self.values = {}
-        for key in os.listdir(self.base):
-            if wanted(key):
-                self.values[key] = None
+        self.provider = provider
+        self.values = dict([(key, None)
+                            for key in provider.fields()
+                            if wanted(key)])
+        self.provider.select(self.values.keys())
     def get(self):
-        for key, oldval in self.values.iteritems():
-            newval = int(file(self.base + '/' + key).read())
+        new = self.provider.read()
+        for key in self.provider.fields():
+            oldval = self.values[key]
+            newval = new[key]
             newdelta = None
             if oldval is not None:
                 newdelta = newval - oldval[0]
@@ -118,7 +133,7 @@ options.add_option('-f', '--fields',
                    )
 (options, args) = options.parse_args(sys.argv)
 
-stats = Stats(fields = options.fields)
+stats = Stats(provider = DebugfsProvider(), fields = options.fields)
 
 if options.log:
     log(stats)
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 2/6] kvm_stat: implement tracepoint stats provider
  2010-08-31 13:25 [PATCH 0/6] kvm_stat tracepoint support Avi Kivity
  2010-08-31 13:25 ` [PATCH 0/6] *** SUBJECT HERE *** Avi Kivity
  2010-08-31 13:25 ` [PATCH 1/6] kvm_stat: refactor to separate stats provider from difference engine Avi Kivity
@ 2010-08-31 13:25 ` Avi Kivity
  2010-08-31 13:25 ` [PATCH 3/6] kvm_stat: provide detailed kvm_exit:exit_reason display Avi Kivity
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 14+ messages in thread
From: Avi Kivity @ 2010-08-31 13:25 UTC (permalink / raw)
  To: Marcelo Tosatti, kvm

Signed-off-by: Avi Kivity <avi@redhat.com>
---
 kvm/kvm_stat |  101 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 100 insertions(+), 1 deletions(-)

diff --git a/kvm/kvm_stat b/kvm/kvm_stat
index 75424fc..9b0392b 100755
--- a/kvm/kvm_stat
+++ b/kvm/kvm_stat
@@ -16,6 +16,100 @@ class DebugfsProvider(object):
             return int(file(self.base + '/' + key).read())
         return dict([(key, val(key)) for key in self._fields])
 
+import ctypes, struct, array
+
+libc = ctypes.CDLL('libc.so.6')
+syscall = libc.syscall
+class perf_event_attr(ctypes.Structure):
+    _fields_ = [('type', ctypes.c_uint32),
+                ('size', ctypes.c_uint32),
+                ('config', ctypes.c_uint64),
+                ('sample_freq', ctypes.c_uint64),
+                ('sample_type', ctypes.c_uint64),
+                ('read_format', ctypes.c_uint64),
+                ('flags', ctypes.c_uint64),
+                ('wakeup_events', ctypes.c_uint32),
+                ('bp_type', ctypes.c_uint32),
+                ('bp_addr', ctypes.c_uint64),
+                ('bp_len', ctypes.c_uint64),
+                ]
+def _perf_event_open(attr, pid, cpu, group_fd, flags):
+    return syscall(298, ctypes.pointer(attr), ctypes.c_int(pid),
+                   ctypes.c_int(cpu), ctypes.c_int(group_fd),
+                   ctypes.c_long(flags))
+
+PERF_TYPE_HARDWARE			= 0
+PERF_TYPE_SOFTWARE			= 1
+PERF_TYPE_TRACEPOINT			= 2
+PERF_TYPE_HW_CACHE			= 3
+PERF_TYPE_RAW				= 4
+PERF_TYPE_BREAKPOINT			= 5
+
+PERF_SAMPLE_IP				= 1 << 0
+PERF_SAMPLE_TID				= 1 << 1
+PERF_SAMPLE_TIME			= 1 << 2
+PERF_SAMPLE_ADDR			= 1 << 3
+PERF_SAMPLE_READ			= 1 << 4
+PERF_SAMPLE_CALLCHAIN			= 1 << 5
+PERF_SAMPLE_ID				= 1 << 6
+PERF_SAMPLE_CPU				= 1 << 7
+PERF_SAMPLE_PERIOD			= 1 << 8
+PERF_SAMPLE_STREAM_ID			= 1 << 9
+PERF_SAMPLE_RAW				= 1 << 10
+
+PERF_FORMAT_TOTAL_TIME_ENABLED		= 1 << 0
+PERF_FORMAT_TOTAL_TIME_RUNNING		= 1 << 1
+PERF_FORMAT_ID				= 1 << 2
+PERF_FORMAT_GROUP			= 1 << 3
+
+
+class TracepointProvider(object):
+    def __init__(self):
+        self.base = '/sys/kernel/debug/tracing/events/kvm/'
+        fields = [f
+                  for f in os.listdir(self.base)
+                  if os.path.isdir(self.base + '/' + f)]
+        self.select(fields)
+    def fields(self):
+        return self._fields
+    def select(self, _fields):
+        self._fields = _fields
+        self.cpus = [0, 1]
+        fds = []
+        self.group_leaders = []
+        for cpu in self.cpus:
+            group_leader = -1
+            for f in _fields:
+                attr = perf_event_attr()
+                attr.type = PERF_TYPE_TRACEPOINT
+                attr.size = ctypes.sizeof(attr)
+                id = int(file(self.base + f + '/id').read())
+                attr.config = id
+                attr.sample_type = (PERF_SAMPLE_RAW
+                                    | PERF_SAMPLE_TIME
+                                    | PERF_SAMPLE_CPU)
+                attr.sample_period = 1
+                attr.read_format = PERF_FORMAT_GROUP
+                fd = _perf_event_open(attr, -1, cpu, group_leader, 0)
+                if fd == -1:
+                    raise Exception('perf_event_open failed')
+                if group_leader == -1:
+                    group_leader = fd
+                    fds.append(fd)
+            self.group_leaders.append(group_leader)
+        self.fds = fds
+        self.files = [os.fdopen(group_leader)
+                      for group_leader in self.group_leaders]
+    def read(self):
+        ret = dict([(f, 0) for f in self._fields])
+        bytes = 8 * (1 + len(self._fields))
+        fmt = 'xxxxxxxx' + 'q' * len(self._fields)
+        for file in self.files:
+            a = struct.unpack(fmt, file.read(bytes))
+            for field, val in zip(self._fields, a):
+                ret[field] += val
+        return ret
+
 class Stats:
     def __init__(self, provider, fields = None):
         def wanted(key):
@@ -133,7 +227,12 @@ options.add_option('-f', '--fields',
                    )
 (options, args) = options.parse_args(sys.argv)
 
-stats = Stats(provider = DebugfsProvider(), fields = options.fields)
+try:
+    provider = TracepointProvider()
+except:
+    provider = DebugfsProvider()
+
+stats = Stats(provider, fields = options.fields)
 
 if options.log:
     log(stats)
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 3/6] kvm_stat: provide detailed kvm_exit:exit_reason display
  2010-08-31 13:25 [PATCH 0/6] kvm_stat tracepoint support Avi Kivity
                   ` (2 preceding siblings ...)
  2010-08-31 13:25 ` [PATCH 2/6] kvm_stat: implement tracepoint stats provider Avi Kivity
@ 2010-08-31 13:25 ` Avi Kivity
  2010-08-31 13:25 ` [PATCH 4/6] kvm_stat: sort tui output according to highest occurence Avi Kivity
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 14+ messages in thread
From: Avi Kivity @ 2010-08-31 13:25 UTC (permalink / raw)
  To: Marcelo Tosatti, kvm

In addition to displaying kvm_exit as an aggregate counter, use perf_event's
filter capability to count individual exit reasons.

Signed-off-by: Avi Kivity <avi@redhat.com>
---
 kvm/kvm_stat |  156 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 155 insertions(+), 1 deletions(-)

diff --git a/kvm/kvm_stat b/kvm/kvm_stat
index 9b0392b..677683a 100755
--- a/kvm/kvm_stat
+++ b/kvm/kvm_stat
@@ -16,6 +16,143 @@ class DebugfsProvider(object):
             return int(file(self.base + '/' + key).read())
         return dict([(key, val(key)) for key in self._fields])
 
+vmx_exit_reasons = {
+    0: 'EXCEPTION_NMI',
+    1: 'EXTERNAL_INTERRUPT',
+    2: 'TRIPLE_FAULT',
+    7: 'PENDING_INTERRUPT',
+    8: 'NMI_WINDOW',
+    9: 'TASK_SWITCH',
+    10: 'CPUID',
+    12: 'HLT',
+    14: 'INVLPG',
+    15: 'RDPMC',
+    16: 'RDTSC',
+    18: 'VMCALL',
+    19: 'VMCLEAR',
+    20: 'VMLAUNCH',
+    21: 'VMPTRLD',
+    22: 'VMPTRST',
+    23: 'VMREAD',
+    24: 'VMRESUME',
+    25: 'VMWRITE',
+    26: 'VMOFF',
+    27: 'VMON',
+    28: 'CR_ACCESS',
+    29: 'DR_ACCESS',
+    30: 'IO_INSTRUCTION',
+    31: 'MSR_READ',
+    32: 'MSR_WRITE',
+    33: 'INVALID_STATE',
+    36: 'MWAIT_INSTRUCTION',
+    39: 'MONITOR_INSTRUCTION',
+    40: 'PAUSE_INSTRUCTION',
+    41: 'MCE_DURING_VMENTRY',
+    43: 'TPR_BELOW_THRESHOLD',
+    44: 'APIC_ACCESS',
+    48: 'EPT_VIOLATION',
+    49: 'EPT_MISCONFIG',
+    54: 'WBINVD',
+    55: 'XSETBV',
+}
+
+svm_exit_reasons = {
+    0x000: 'READ_CR0',
+    0x003: 'READ_CR3',
+    0x004: 'READ_CR4',
+    0x008: 'READ_CR8',
+    0x010: 'WRITE_CR0',
+    0x013: 'WRITE_CR3',
+    0x014: 'WRITE_CR4',
+    0x018: 'WRITE_CR8',
+    0x020: 'READ_DR0',
+    0x021: 'READ_DR1',
+    0x022: 'READ_DR2',
+    0x023: 'READ_DR3',
+    0x024: 'READ_DR4',
+    0x025: 'READ_DR5',
+    0x026: 'READ_DR6',
+    0x027: 'READ_DR7',
+    0x030: 'WRITE_DR0',
+    0x031: 'WRITE_DR1',
+    0x032: 'WRITE_DR2',
+    0x033: 'WRITE_DR3',
+    0x034: 'WRITE_DR4',
+    0x035: 'WRITE_DR5',
+    0x036: 'WRITE_DR6',
+    0x037: 'WRITE_DR7',
+    0x040: 'EXCP_BASE',
+    0x060: 'INTR',
+    0x061: 'NMI',
+    0x062: 'SMI',
+    0x063: 'INIT',
+    0x064: 'VINTR',
+    0x065: 'CR0_SEL_WRITE',
+    0x066: 'IDTR_READ',
+    0x067: 'GDTR_READ',
+    0x068: 'LDTR_READ',
+    0x069: 'TR_READ',
+    0x06a: 'IDTR_WRITE',
+    0x06b: 'GDTR_WRITE',
+    0x06c: 'LDTR_WRITE',
+    0x06d: 'TR_WRITE',
+    0x06e: 'RDTSC',
+    0x06f: 'RDPMC',
+    0x070: 'PUSHF',
+    0x071: 'POPF',
+    0x072: 'CPUID',
+    0x073: 'RSM',
+    0x074: 'IRET',
+    0x075: 'SWINT',
+    0x076: 'INVD',
+    0x077: 'PAUSE',
+    0x078: 'HLT',
+    0x079: 'INVLPG',
+    0x07a: 'INVLPGA',
+    0x07b: 'IOIO',
+    0x07c: 'MSR',
+    0x07d: 'TASK_SWITCH',
+    0x07e: 'FERR_FREEZE',
+    0x07f: 'SHUTDOWN',
+    0x080: 'VMRUN',
+    0x081: 'VMMCALL',
+    0x082: 'VMLOAD',
+    0x083: 'VMSAVE',
+    0x084: 'STGI',
+    0x085: 'CLGI',
+    0x086: 'SKINIT',
+    0x087: 'RDTSCP',
+    0x088: 'ICEBP',
+    0x089: 'WBINVD',
+    0x08a: 'MONITOR',
+    0x08b: 'MWAIT',
+    0x08c: 'MWAIT_COND',
+    0x400: 'NPF',
+}
+
+vendor_exit_reasons = {
+    'vmx': vmx_exit_reasons,
+    'svm': svm_exit_reasons,
+}
+
+exit_reasons = None
+
+for line in file('/proc/cpuinfo').readlines():
+    if line.startswith('flags'):
+        for flag in line.split():
+            if flag in vendor_exit_reasons:
+                exit_reasons = vendor_exit_reasons[flag]
+
+filters = {
+    'kvm_exit': ('exit_reason', exit_reasons)
+}
+
+def invert(d):
+    return dict((x[1], x[0]) for x in d.iteritems())
+
+for f in filters:
+    filters[f] = (filters[f][0], invert(filters[f][1]))
+
 import ctypes, struct, array
 
 libc = ctypes.CDLL('libc.so.6')
@@ -62,6 +199,7 @@ PERF_FORMAT_TOTAL_TIME_RUNNING		= 1 << 1
 PERF_FORMAT_ID				= 1 << 2
 PERF_FORMAT_GROUP			= 1 << 3
 
+import re
 
 class TracepointProvider(object):
     def __init__(self):
@@ -69,6 +207,13 @@ class TracepointProvider(object):
         fields = [f
                   for f in os.listdir(self.base)
                   if os.path.isdir(self.base + '/' + f)]
+        extra = []
+        for f in fields:
+            if f in filters:
+                subfield, values = filters[f]
+                for name, number in values.iteritems():
+                    extra.append(f + '(' + name + ')')
+        fields += extra
         self.select(fields)
     def fields(self):
         return self._fields
@@ -80,10 +225,14 @@ class TracepointProvider(object):
         for cpu in self.cpus:
             group_leader = -1
             for f in _fields:
+                fbase, sub = f, None
+                m = re.match(r'(.*)\((.*)\)', f)
+                if m:
+                    fbase, sub = m.groups()
                 attr = perf_event_attr()
                 attr.type = PERF_TYPE_TRACEPOINT
                 attr.size = ctypes.sizeof(attr)
-                id = int(file(self.base + f + '/id').read())
+                id = int(file(self.base + fbase + '/id').read())
                 attr.config = id
                 attr.sample_type = (PERF_SAMPLE_RAW
                                     | PERF_SAMPLE_TIME
@@ -93,6 +242,11 @@ class TracepointProvider(object):
                 fd = _perf_event_open(attr, -1, cpu, group_leader, 0)
                 if fd == -1:
                     raise Exception('perf_event_open failed')
+                if sub:
+                    import fcntl
+                    filter = '%s==%d\0' % (filters[fbase][0],
+                                         filters[fbase][1][sub])
+                    fcntl.ioctl(fd, 0x40082406, filter)
                 if group_leader == -1:
                     group_leader = fd
                     fds.append(fd)
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 4/6] kvm_stat: sort tui output according to highest occurence
  2010-08-31 13:25 [PATCH 0/6] kvm_stat tracepoint support Avi Kivity
                   ` (3 preceding siblings ...)
  2010-08-31 13:25 ` [PATCH 3/6] kvm_stat: provide detailed kvm_exit:exit_reason display Avi Kivity
@ 2010-08-31 13:25 ` Avi Kivity
  2010-08-31 13:25 ` [PATCH 5/6] kvm_stat: increase label width Avi Kivity
  2010-08-31 13:25 ` [PATCH 6/6] kvm_stat: be slower Avi Kivity
  6 siblings, 0 replies; 14+ messages in thread
From: Avi Kivity @ 2010-08-31 13:25 UTC (permalink / raw)
  To: Marcelo Tosatti, kvm

With plenty of counters and wide, short screens it's hard to see what's on
the top.  So sort the output.

Signed-off-by: Avi Kivity <avi@redhat.com>
---
 kvm/kvm_stat |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/kvm/kvm_stat b/kvm/kvm_stat
index 677683a..c55bf88 100755
--- a/kvm/kvm_stat
+++ b/kvm/kvm_stat
@@ -306,7 +306,12 @@ def tui(screen, stats):
         screen.addstr(0, 0, 'kvm statistics')
         row = 2
         s = stats.get()
-        for key in sorted(s.keys()):
+        def sortkey(x):
+            if s[x][1]:
+                return -s[x][1]
+            else:
+                return x
+        for key in sorted(s.keys(), key = sortkey):
             if row >= screen.getmaxyx()[0]:
                 break
             values = s[key]
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 5/6] kvm_stat: increase label width
  2010-08-31 13:25 [PATCH 0/6] kvm_stat tracepoint support Avi Kivity
                   ` (4 preceding siblings ...)
  2010-08-31 13:25 ` [PATCH 4/6] kvm_stat: sort tui output according to highest occurence Avi Kivity
@ 2010-08-31 13:25 ` Avi Kivity
  2010-08-31 13:25 ` [PATCH 6/6] kvm_stat: be slower Avi Kivity
  6 siblings, 0 replies; 14+ messages in thread
From: Avi Kivity @ 2010-08-31 13:25 UTC (permalink / raw)
  To: Marcelo Tosatti, kvm

With kvm_exit drill down, labels are pretty large.

Signed-off-by: Avi Kivity <avi@redhat.com>
---
 kvm/kvm_stat |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/kvm/kvm_stat b/kvm/kvm_stat
index c55bf88..b7bc846 100755
--- a/kvm/kvm_stat
+++ b/kvm/kvm_stat
@@ -295,7 +295,7 @@ if not os.access('/sys/kernel/debug/kvm', os.F_OK):
     print "and ensure the kvm modules are loaded"
     sys.exit(1)
 
-label_width = 20
+label_width = 40
 number_width = 10
 
 def tui(screen, stats):
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 6/6] kvm_stat: be slower
  2010-08-31 13:25 [PATCH 0/6] kvm_stat tracepoint support Avi Kivity
                   ` (5 preceding siblings ...)
  2010-08-31 13:25 ` [PATCH 5/6] kvm_stat: increase label width Avi Kivity
@ 2010-08-31 13:25 ` Avi Kivity
  6 siblings, 0 replies; 14+ messages in thread
From: Avi Kivity @ 2010-08-31 13:25 UTC (permalink / raw)
  To: Marcelo Tosatti, kvm

More information is displayed, so more time is need to process the information.

Signed-off-by: Avi Kivity <avi@redhat.com>
---
 kvm/kvm_stat |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/kvm/kvm_stat b/kvm/kvm_stat
index b7bc846..e68ca4e 100755
--- a/kvm/kvm_stat
+++ b/kvm/kvm_stat
@@ -327,7 +327,7 @@ def tui(screen, stats):
 
     while True:
         refresh()
-        curses.halfdelay(10)
+        curses.halfdelay(30)
         try:
             c = screen.getkey()
             if c == 'q':
-- 
1.7.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [PATCH 0/6] *** SUBJECT HERE ***
  2010-08-31 13:25 ` [PATCH 0/6] *** SUBJECT HERE *** Avi Kivity
@ 2010-08-31 13:30   ` Avi Kivity
  2010-08-31 14:43     ` Gerd Hoffmann
  0 siblings, 1 reply; 14+ messages in thread
From: Avi Kivity @ 2010-08-31 13:30 UTC (permalink / raw)
  To: Marcelo Tosatti, kvm

  On 08/31/2010 04:25 PM, Avi Kivity wrote:
> *** BLURB HERE ***
>

That was supposed to be:

[PATCH 0/6] kvm_stat tracepoint support

This patchset allows kvm_stat to display the information exposed by kvm
tracepoints.

-- 
error compiling committee.c: too many arguments to function


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 0/6] *** SUBJECT HERE ***
  2010-08-31 13:30   ` Avi Kivity
@ 2010-08-31 14:43     ` Gerd Hoffmann
  2010-08-31 16:10       ` Avi Kivity
  0 siblings, 1 reply; 14+ messages in thread
From: Gerd Hoffmann @ 2010-08-31 14:43 UTC (permalink / raw)
  To: Avi Kivity; +Cc: Marcelo Tosatti, kvm

On 08/31/10 15:30, Avi Kivity wrote:
> On 08/31/2010 04:25 PM, Avi Kivity wrote:
>> *** BLURB HERE ***
>>
>
> That was supposed to be:
>
> [PATCH 0/6] kvm_stat tracepoint support
>
> This patchset allows kvm_stat to display the information exposed by kvm
> tracepoints.

That was there too.

You better should pass '00*.patch'  instead of '00*' to git send-email 
so it doesn't mail out the editor backup file ;)

cheers,
   Gerd


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 0/6] *** SUBJECT HERE ***
  2010-08-31 14:43     ` Gerd Hoffmann
@ 2010-08-31 16:10       ` Avi Kivity
  2010-08-31 16:13         ` Anthony Liguori
  0 siblings, 1 reply; 14+ messages in thread
From: Avi Kivity @ 2010-08-31 16:10 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: Marcelo Tosatti, kvm

  On 08/31/2010 05:43 PM, Gerd Hoffmann wrote:
>
> You better should pass '00*.patch'  instead of '00*' to git send-email 
> so it doesn't mail out the editor backup file ;)
>

That's what I usually do - guess I slipped this time.

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 0/6] *** SUBJECT HERE ***
  2010-08-31 16:10       ` Avi Kivity
@ 2010-08-31 16:13         ` Anthony Liguori
  2010-08-31 16:24           ` Avi Kivity
  2010-09-01  7:32           ` Gerd Hoffmann
  0 siblings, 2 replies; 14+ messages in thread
From: Anthony Liguori @ 2010-08-31 16:13 UTC (permalink / raw)
  To: Avi Kivity; +Cc: Gerd Hoffmann, Marcelo Tosatti, kvm

On 08/31/2010 11:10 AM, Avi Kivity wrote:
>  On 08/31/2010 05:43 PM, Gerd Hoffmann wrote:
>>
>> You better should pass '00*.patch'  instead of '00*' to git 
>> send-email so it doesn't mail out the editor backup file ;)
>>
>
> That's what I usually do - guess I slipped this time.

Just as an aside, does anyone have a good way to maintain the 00 patches 
in series with repeated submissions?

I tried to store it in git as an empty commit but most of the git 
tooling doesn't work well with that.

Regards,

Anthony Liguori

> -- 
> To unsubscribe from this list: send the line "unsubscribe kvm" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 0/6] *** SUBJECT HERE ***
  2010-08-31 16:13         ` Anthony Liguori
@ 2010-08-31 16:24           ` Avi Kivity
  2010-09-01  7:32           ` Gerd Hoffmann
  1 sibling, 0 replies; 14+ messages in thread
From: Avi Kivity @ 2010-08-31 16:24 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: Gerd Hoffmann, Marcelo Tosatti, kvm

  On 08/31/2010 07:13 PM, Anthony Liguori wrote:
>
> Just as an aside, does anyone have a good way to maintain the 00 
> patches in series with repeated submissions?
>
> I tried to store it in git as an empty commit but most of the git 
> tooling doesn't work well with that.

I keep each posting in a -v1/ etc directory and copy-paste from that.

-- 
error compiling committee.c: too many arguments to function


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 0/6] *** SUBJECT HERE ***
  2010-08-31 16:13         ` Anthony Liguori
  2010-08-31 16:24           ` Avi Kivity
@ 2010-09-01  7:32           ` Gerd Hoffmann
  1 sibling, 0 replies; 14+ messages in thread
From: Gerd Hoffmann @ 2010-09-01  7:32 UTC (permalink / raw)
  To: Anthony Liguori; +Cc: Avi Kivity, Marcelo Tosatti, kvm

On 08/31/10 18:13, Anthony Liguori wrote:
> Just as an aside, does anyone have a good way to maintain the 00 patches
> in series with repeated submissions?

/me uses cut+paste from email folder or list archive.  I suspect you are 
looking for something better though ...

cheers,
   Gerd


^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2010-09-01  7:32 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-08-31 13:25 [PATCH 0/6] kvm_stat tracepoint support Avi Kivity
2010-08-31 13:25 ` [PATCH 0/6] *** SUBJECT HERE *** Avi Kivity
2010-08-31 13:30   ` Avi Kivity
2010-08-31 14:43     ` Gerd Hoffmann
2010-08-31 16:10       ` Avi Kivity
2010-08-31 16:13         ` Anthony Liguori
2010-08-31 16:24           ` Avi Kivity
2010-09-01  7:32           ` Gerd Hoffmann
2010-08-31 13:25 ` [PATCH 1/6] kvm_stat: refactor to separate stats provider from difference engine Avi Kivity
2010-08-31 13:25 ` [PATCH 2/6] kvm_stat: implement tracepoint stats provider Avi Kivity
2010-08-31 13:25 ` [PATCH 3/6] kvm_stat: provide detailed kvm_exit:exit_reason display Avi Kivity
2010-08-31 13:25 ` [PATCH 4/6] kvm_stat: sort tui output according to highest occurence Avi Kivity
2010-08-31 13:25 ` [PATCH 5/6] kvm_stat: increase label width Avi Kivity
2010-08-31 13:25 ` [PATCH 6/6] kvm_stat: be slower Avi Kivity

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).