* [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).