~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/perf/python/twatch.py

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /tools/perf/python/twatch.py (Version linux-6.12-rc7) and /tools/perf/python/twatch.py (Version linux-5.2.21)


  1 #! /usr/bin/env python                         !!   1 #! /usr/bin/python
  2 # SPDX-License-Identifier: GPL-2.0-only             2 # SPDX-License-Identifier: GPL-2.0-only
  3 # -*- python -*-                                    3 # -*- python -*-
  4 # -*- coding: utf-8 -*-                             4 # -*- coding: utf-8 -*-
  5 #   twatch - Experimental use of the perf pyth      5 #   twatch - Experimental use of the perf python interface
  6 #   Copyright (C) 2011 Arnaldo Carvalho de Mel<      6 #   Copyright (C) 2011 Arnaldo Carvalho de Melo <acme@redhat.com>
  7 #                                                   7 #
  8                                                     8 
  9 import perf                                         9 import perf
 10                                                    10 
 11 def main(context_switch = 0, thread = -1):         11 def main(context_switch = 0, thread = -1):
 12         cpus = perf.cpu_map()                      12         cpus = perf.cpu_map()
 13         threads = perf.thread_map(thread)          13         threads = perf.thread_map(thread)
 14         evsel = perf.evsel(type   = perf.TYPE_     14         evsel = perf.evsel(type   = perf.TYPE_SOFTWARE,
 15                            config = perf.COUNT     15                            config = perf.COUNT_SW_DUMMY,
 16                            task = 1, comm = 1,     16                            task = 1, comm = 1, mmap = 0, freq = 0,
 17                            wakeup_events = 1,      17                            wakeup_events = 1, watermark = 1,
 18                            sample_id_all = 1,      18                            sample_id_all = 1, context_switch = context_switch,
 19                            sample_type = perf.     19                            sample_type = perf.SAMPLE_PERIOD | perf.SAMPLE_TID | perf.SAMPLE_CPU)
 20                                                    20 
 21         """What we want are just the PERF_RECO     21         """What we want are just the PERF_RECORD_ lifetime events for threads,
 22          using the default, PERF_TYPE_HARDWARE     22          using the default, PERF_TYPE_HARDWARE + PERF_COUNT_HW_CYCLES & freq=1
 23          (the default), makes perf reenable ir     23          (the default), makes perf reenable irq_vectors:local_timer_entry, when
 24          disabling nohz, not good for some use     24          disabling nohz, not good for some use cases where all we want is to get
 25          threads comes and goes... So use (per     25          threads comes and goes... So use (perf.TYPE_SOFTWARE, perf_COUNT_SW_DUMMY,
 26          freq=0) instead."""                       26          freq=0) instead."""
 27                                                    27 
 28         evsel.open(cpus = cpus, threads = thre     28         evsel.open(cpus = cpus, threads = threads);
 29         evlist = perf.evlist(cpus, threads)        29         evlist = perf.evlist(cpus, threads)
 30         evlist.add(evsel)                          30         evlist.add(evsel)
 31         evlist.mmap()                              31         evlist.mmap()
 32         while True:                                32         while True:
 33                 evlist.poll(timeout = -1)          33                 evlist.poll(timeout = -1)
 34                 for cpu in cpus:                   34                 for cpu in cpus:
 35                         event = evlist.read_on     35                         event = evlist.read_on_cpu(cpu)
 36                         if not event:              36                         if not event:
 37                                 continue           37                                 continue
 38                         print("cpu: {0}, pid:      38                         print("cpu: {0}, pid: {1}, tid: {2} {3}".format(event.sample_cpu,
 39                                                    39                                                                         event.sample_pid,
 40                                                    40                                                                         event.sample_tid,
 41                                                    41                                                                         event))
 42                                                    42 
 43 if __name__ == '__main__':                         43 if __name__ == '__main__':
 44     """                                            44     """
 45         To test the PERF_RECORD_SWITCH record,     45         To test the PERF_RECORD_SWITCH record, pick a pid and replace
 46         in the following line.                     46         in the following line.
 47                                                    47 
 48         Example output:                            48         Example output:
 49                                                    49 
 50 cpu: 3, pid: 31463, tid: 31593 { type: context     50 cpu: 3, pid: 31463, tid: 31593 { type: context_switch, next_prev_pid: 31463, next_prev_tid: 31593, switch_out: 1 }
 51 cpu: 1, pid: 31463, tid: 31489 { type: context     51 cpu: 1, pid: 31463, tid: 31489 { type: context_switch, next_prev_pid: 31463, next_prev_tid: 31489, switch_out: 1 }
 52 cpu: 2, pid: 31463, tid: 31496 { type: context     52 cpu: 2, pid: 31463, tid: 31496 { type: context_switch, next_prev_pid: 31463, next_prev_tid: 31496, switch_out: 1 }
 53 cpu: 3, pid: 31463, tid: 31491 { type: context     53 cpu: 3, pid: 31463, tid: 31491 { type: context_switch, next_prev_pid: 31463, next_prev_tid: 31491, switch_out: 0 }
 54                                                    54 
 55         It is possible as well to use event.mi     55         It is possible as well to use event.misc & perf.PERF_RECORD_MISC_SWITCH_OUT
 56         to figure out if this is a context swi     56         to figure out if this is a context switch in or out of the monitored threads.
 57                                                    57 
 58         If bored, please add command line opti     58         If bored, please add command line option parsing support for these options :-)
 59     """                                            59     """
 60     # main(context_switch = 1, thread = 31463)     60     # main(context_switch = 1, thread = 31463)
 61     main()                                         61     main()
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php