* [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; 16+ 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] 16+ 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; 16+ 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] 16+ 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; 16+ 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] 16+ 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; 16+ 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] 16+ 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; 16+ 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] 16+ 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; 16+ 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] 16+ 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; 16+ 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] 16+ 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; 16+ 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] 16+ 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; 16+ 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] 16+ 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; 16+ 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] 16+ 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; 16+ 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] 16+ 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; 16+ 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] 16+ 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; 16+ 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] 16+ 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; 16+ 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] 16+ messages in thread
* [PATCH 0/6] *** SUBJECT HERE ***
@ 2011-02-24 20:38 Sheldon Demario
0 siblings, 0 replies; 16+ messages in thread
From: Sheldon Demario @ 2011-02-24 20:38 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Sheldon Demario
Please ignore my all not-applied previous patches. I am resending them
with a few corrections.
Bruna Moreira (2):
Move attr_data_from_string() to utils.c
Add Write Request in interactive gatttool
Sheldon Demario (4):
Create a helper function to deal with handles on interactive gatttool
Add Characteristics Descriptor Discovery option in interactive
gatttool
Add characteristics read options in interactive gatttool
Add sec-level option to interactive gattool
attrib/gatttool.c | 23 +---
attrib/gatttool.h | 1 +
attrib/interactive.c | 348 ++++++++++++++++++++++++++++++++++++++++++++++++--
attrib/utils.c | 19 +++
4 files changed, 361 insertions(+), 30 deletions(-)
^ permalink raw reply [flat|nested] 16+ messages in thread* [PATCH 0/6] *** SUBJECT HERE ***
@ 2015-01-13 1:00 Geoff Levand
0 siblings, 0 replies; 16+ messages in thread
From: Geoff Levand @ 2015-01-13 1:00 UTC (permalink / raw)
To: Benjamin Herrenschmidt; +Cc: cbe-oss-dev, linuxppc-dev, Nathan Whitehorn
Hi Ben,
Here is a short series of updates for PS3, none are critical. Please queue.
These are based on v3.18. I can rebase to something else if you like.
The first three patches are to have the kernel write the PS3 highmem info to
the LV1 hypervisor registry so that the info will be available to second stage
OS's loaded by petitboot/kexec. FreeBSD and some Linux derivatives use this
feature.
The next two patches fix some warnings emitted by sparse.
The final patch refreshes ps3_defconfig and enables the highmem info write
feature (CONFIG_PS3_REPOSITORY_WRITE=y) introduced in the first three patches.
-Geoff
The following changes since commit b2776bf7149bddd1f4161f14f79520f17fc1d71d:
Linux 3.18 (2014-12-07 14:21:05 -0800)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/geoff/ps3-linux.git for-powerpc
for you to fetch changes up to c9fc20b63c625d8d5c136f1e72d9930a6b0070df:
powerpc/ps3: Update ps3_defconfig (2014-12-23 14:56:29 -0800)
----------------------------------------------------------------
Geoff Levand (6):
powerpc/ps3: Add empty repository highmem routines
powerpc/ps3: Add ps3_mm_set_repository_highmem
powerpc/ps3: Write highmem info to repository
powerpc/ps3: Fix vuart sparse warnings
powerpc/ps3: Fix sys-manager-core sparse warnings
powerpc/ps3: Update ps3_defconfig
arch/powerpc/configs/ps3_defconfig | 17 +++-----
arch/powerpc/platforms/ps3/mm.c | 77 ++++++++++++++++++++---------------
arch/powerpc/platforms/ps3/platform.h | 13 ++++++
drivers/ps3/ps3-vuart.c | 5 ---
drivers/ps3/sys-manager-core.c | 6 +--
drivers/ps3/vuart.h | 16 ++++++++
6 files changed, 83 insertions(+), 51 deletions(-)
--
1.9.1
^ permalink raw reply [flat|nested] 16+ messages in threadend of thread, other threads:[~2015-01-13 1:00 UTC | newest] Thread overview: 16+ 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 -- strict thread matches above, loose matches on Subject: below -- 2011-02-24 20:38 [PATCH 0/6] *** SUBJECT HERE *** Sheldon Demario 2015-01-13 1:00 Geoff Levand
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.