• Ingo Molnar's avatar
    perfcounters: implement "counter inheritance" · 9b51f66d
    Ingo Molnar authored
    Impact: implement new performance feature
    
    Counter inheritance can be used to run performance counters in a workload,
    transparently - and pipe back the counter results to the parent counter.
    
    Inheritance for performance counters works the following way: when creating
    a counter it can be marked with the .inherit=1 flag. Such counters are then
    'inherited' by all child tasks (be they fork()-ed or clone()-ed). These
    counters get inherited through exec() boundaries as well (except through
    setuid boundaries).
    
    The counter values get added back to the parent counter(s) when the child
    task(s) exit - much like stime/utime statistics are gathered. So inherited
    counters are ideal to gather summary statistics about an application's
    behavior via shell commands, without having to modify that application.
    
    The timec.c command utilizes counter inheritance:
    
      http://redhat.com/~mingo/perfcounters/timec.c
    
    Sample output:
    
       $ ./timec -e 1 -e 3 -e 5 ls -lR /usr/include/ >/dev/null
    
       Performance counter stats for 'ls':
    
               163516953 instructions
                    2295 cache-misses
                 2855182 branch-misses
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    9b51f66d
perf_counter.c 32.1 KB