15 Sep, 2010
2 commits
-
When the function graph tracer funcgraph-irq option is zero, disable
tracing in IRQs. This makes the option have two effects.1) When reading the trace file, do not display the functions that
happen in interrupt context (when detected)2) [*new*] When recording a trace, skip those that are detected
to be in interrupt by the 'in_irq()' functionNote, in_irq() is updated at irq_enter() and irq_exit(). There are
still functions that are recorded by the function graph tracer that
is in interrupt context but outside the irq_enter/exit() routines.Signed-off-by: Steven Rostedt
-
It's handy to be able to disable the irq related output
and not to have to jump over each irq related code, when
you have no interrest in it.The option is by default enabled, so there's no change to
current behaviour. It affects only the final output, so all
the irq related data stay in the ring buffer.Signed-off-by: Jiri Olsa
LKML-Reference:
Signed-off-by: Steven Rostedt
13 Sep, 2010
4 commits
-
They are useless and take away precious columns and lines, so stop using
windows.One more step in removing newt code, that after all is not being useful
at all for the coalescing TUI model in perf.Suggested-by: Christoph Hellwig
Cc: Christoph Hellwig
Cc: Frederic Weisbecker
Cc: Ingo Molnar
Cc: Mike Galbraith
Cc: Paul Mackerras
Cc: Peter Zijlstra
Cc: Stephane Eranian
Cc: Tom Zanussi
LKML-Reference:
Signed-off-by: Arnaldo Carvalho de Melo -
With the context rework stuff we can actually end up freeing an event
before it gets attached to a context.Reported-by: Cyrill Gorcunov
Signed-off-by: Peter Zijlstra
LKML-Reference:
Signed-off-by: Ingo Molnar -
Simplify things and simply synchronize against two RCU variants for
PMU unregister -- we don't care about performance, its module unload
if anything.Reported-by: Frederic Weisbecker
Signed-off-by: Peter Zijlstra
Cc: Paul E. McKenney
LKML-Reference:
Signed-off-by: Ingo Molnar -
Fix a bug introduced with commit de725de and the change in the
meaning of the return value of intel_pmu_handle_irq(). With the
current code, when you are using the BTS, you get 'dazed by NMI'
each time the BTS buffer fills up.BTS does interrupt on the PMU vector, thus NMI. You need to take
this into account in the return value of the function.This version fixes initial patch which was missing changes to
perf_event_intel_ds.c.Signed-off-by: Stephane Eranian
Acked-by: Don Zickus
Cc: peterz@infradead.org
Cc: paulus@samba.org
Cc: davem@davemloft.net
Cc: fweisbec@gmail.com
Cc: perfmon2-devel@lists.sf.net
Cc: eranian@gmail.com
Cc: robert.richter@amd.com
LKML-Reference:
Signed-off-by: Ingo Molnar
10 Sep, 2010
25 commits
-
We ought to return -ENOENT when non of the registered PMUs
recognise the requested event.This fixes a boot crash that occurs if no PMU is available
but the NMI watchdog tries to register an event.Reported-by: Ingo Molnar
Signed-off-by: Peter Zijlstra
LKML-Reference:
Signed-off-by: Ingo Molnar -
Even though we call it from the inherit path, where the child is
not yet accessible, we need to hold ctx->lock, add_event_to_ctx()
assumes IRQs are disabled.Signed-off-by: Peter Zijlstra
LKML-Reference:
Signed-off-by: Ingo Molnar -
asm-generic/hardirq.h needs asm/irq.h which might include
linux/interrupt.h as in the sparc 32 case. At this point
we need irq_cpustat generic definitions, but those are
included later in asm-generic/hardirq.h.Then delay a bit the inclusion of irq.h from
asm-generic/hardirq.h, it doesn't need to be included early.This fixes:
include/linux/interrupt.h: In function '__raise_softirq_irqoff':
include/linux/interrupt.h:414: error: implicit declaration of function 'local_softirq_pending'
include/linux/interrupt.h:414: error: lvalue required as left operand of assignmentReported-by: Ingo Molnar
Signed-off-by: Frederic Weisbecker
Cc: Lai Jiangshan
Cc: Koki Sanagi
Cc: mathieu.desnoyers@efficios.com
Cc: rostedt@goodmis.org
Cc: nhorman@tuxdriver.com
Cc: scott.a.mcmillan@intel.com
Cc: eric.dumazet@gmail.com
Cc: kaneshige.kenji@jp.fujitsu.com
Cc: davem@davemloft.net
Cc: izumi.taku@jp.fujitsu.com
Cc: kosaki.motohiro@jp.fujitsu.com
LKML-Reference:
Signed-off-by: Ingo Molnar -
I missed a perf_event_ctxp user when converting it to an array. Pull this
last user into perf_event.c as well and fix it up.Signed-off-by: Peter Zijlstra
LKML-Reference:
Signed-off-by: Ingo Molnar -
Assuming we don't mix events of different pmus onto a single context
(with the exeption of software events inside a hardware group) we can
now assume that all events on a particular context belong to the same
pmu, hence we can disable the pmu for the entire context operations.This reduces the amount of hardware writes.
The exception for swevents comes from the fact that the sw pmu disable
is a nop.Signed-off-by: Peter Zijlstra
Cc: paulus
Cc: stephane eranian
Cc: Robert Richter
Cc: Frederic Weisbecker
Cc: Lin Ming
Cc: Yanmin
LKML-Reference:
Signed-off-by: Ingo Molnar -
Since software events are always schedulable, mixing them up with
hardware events (who are not) can lead to funny scheduling oddities.Giving them their own context solves this.
Signed-off-by: Peter Zijlstra
Cc: paulus
Cc: stephane eranian
Cc: Robert Richter
Cc: Frederic Weisbecker
Cc: Lin Ming
Cc: Yanmin
LKML-Reference:
Signed-off-by: Ingo Molnar -
Provide the infrastructure for multiple task contexts.
A more flexible approach would have resulted in more pointer chases
in the scheduling hot-paths. This approach has the limitation of a
static number of task contexts.Since I expect most external PMUs to be system wide, or at least node
wide (as per the intel uncore unit) they won't actually need a task
context.Signed-off-by: Peter Zijlstra
Cc: paulus
Cc: stephane eranian
Cc: Robert Richter
Cc: Frederic Weisbecker
Cc: Lin Ming
Cc: Yanmin
LKML-Reference:
Signed-off-by: Ingo Molnar -
Unify the two perf_event_context allocation sites.
Signed-off-by: Peter Zijlstra
Cc: paulus
Cc: stephane eranian
Cc: Robert Richter
Cc: Frederic Weisbecker
Cc: Lin Ming
Cc: Yanmin
LKML-Reference:
Signed-off-by: Ingo Molnar -
Move all inherit code near each other.
Signed-off-by: Peter Zijlstra
Cc: paulus
Cc: stephane eranian
Cc: Robert Richter
Cc: Frederic Weisbecker
Cc: Lin Ming
Cc: Yanmin
LKML-Reference:
Signed-off-by: Ingo Molnar -
Allocate per-cpu contexts per pmu.
Signed-off-by: Peter Zijlstra
Cc: paulus
Cc: stephane eranian
Cc: Robert Richter
Cc: Frederic Weisbecker
Cc: Lin Ming
Cc: Yanmin
LKML-Reference:
Signed-off-by: Ingo Molnar -
Give each cpu-context its own timer so that it is a self contained
entity, this eases the way for per-pmu-per-cpu contexts as well as
provides the basic infrastructure to allow different rotation
times per pmu.Things to look at:
- folding the tick and these TICK_NSEC timers
- separate task context rotationSigned-off-by: Peter Zijlstra
Cc: paulus
Cc: stephane eranian
Cc: Robert Richter
Cc: Frederic Weisbecker
Cc: Lin Ming
Cc: Yanmin
LKML-Reference:
Signed-off-by: Ingo Molnar -
Separate the swevent hash-table from the cpu_context bits in
preparation for per pmu cpu contexts.This keeps the swevent hash a global entity.
Signed-off-by: Peter Zijlstra
Cc: paulus
Cc: stephane eranian
Cc: Robert Richter
Cc: Frederic Weisbecker
Cc: Lin Ming
Cc: Yanmin
LKML-Reference:
Signed-off-by: Ingo Molnar -
Separate find_get_context() from the event allocation and
initialization so that we may make find_get_context() depend
on the event pmu in a later patch.Signed-off-by: Peter Zijlstra
Cc: paulus
Cc: stephane eranian
Cc: Robert Richter
Cc: Frederic Weisbecker
Cc: Lin Ming
Cc: Yanmin
LKML-Reference:
Signed-off-by: Ingo Molnar -
Neither the overcommit nor the reservation sysfs parameter were
actually working, remove them as they'll only get in the way.Signed-off-by: Peter Zijlstra
Cc: paulus
LKML-Reference:
Signed-off-by: Ingo Molnar -
Replace pmu::{enable,disable,start,stop,unthrottle} with
pmu::{add,del,start,stop}, all of which take a flags argument.The new interface extends the capability to stop a counter while
keeping it scheduled on the PMU. We replace the throttled state with
the generic stopped state.This also allows us to efficiently stop/start counters over certain
code paths (like IRQ handlers).It also allows scheduling a counter without it starting, allowing for
a generic frozen state (useful for rotating stopped counters).The stopped state is implemented in two different ways, depending on
how the architecture implemented the throttled state:1) We disable the counter:
a) the pmu has per-counter enable bits, we flip that
b) we program a NOP event, preserving the counter state2) We store the counter state and ignore all read/overflow events
Signed-off-by: Peter Zijlstra
Cc: paulus
Cc: stephane eranian
Cc: Robert Richter
Cc: Will Deacon
Cc: Paul Mundt
Cc: Frederic Weisbecker
Cc: Cyrill Gorcunov
Cc: Lin Ming
Cc: Yanmin
Cc: Deng-Cheng Zhu
Cc: David Miller
Cc: Michael Cree
LKML-Reference:
Signed-off-by: Ingo Molnar -
Use hw_perf_event::period_left instead of hw_perf_event::remaining
and win back 8 bytes.Signed-off-by: Peter Zijlstra
Cc: paulus
Cc: Frederic Weisbecker
LKML-Reference:
Signed-off-by: Ingo Molnar -
Provide default implementations for the pmu txn methods, this
allows us to remove some conditional code.Signed-off-by: Peter Zijlstra
Cc: paulus
Cc: stephane eranian
Cc: Robert Richter
Cc: Will Deacon
Cc: Paul Mundt
Cc: Frederic Weisbecker
Cc: Cyrill Gorcunov
Cc: Lin Ming
Cc: Yanmin
Cc: Deng-Cheng Zhu
Cc: David Miller
Cc: Michael Cree
LKML-Reference:
Signed-off-by: Ingo Molnar -
Changes perf_disable() into perf_pmu_disable().
Signed-off-by: Peter Zijlstra
Cc: paulus
Cc: stephane eranian
Cc: Robert Richter
Cc: Will Deacon
Cc: Paul Mundt
Cc: Frederic Weisbecker
Cc: Cyrill Gorcunov
Cc: Lin Ming
Cc: Yanmin
Cc: Deng-Cheng Zhu
Cc: David Miller
Cc: Michael Cree
LKML-Reference:
Signed-off-by: Ingo Molnar -
Since the current perf_disable() usage is only an optimization,
remove it for now. This eases the removal of the __weak
hw_perf_enable() interface.Signed-off-by: Peter Zijlstra
Cc: paulus
Cc: stephane eranian
Cc: Robert Richter
Cc: Will Deacon
Cc: Paul Mundt
Cc: Frederic Weisbecker
Cc: Cyrill Gorcunov
Cc: Lin Ming
Cc: Yanmin
Cc: Deng-Cheng Zhu
Cc: David Miller
Cc: Michael Cree
LKML-Reference:
Signed-off-by: Ingo Molnar -
Fixup random annoying style bits.
Signed-off-by: Peter Zijlstra
Cc: paulus
LKML-Reference:
Signed-off-by: Ingo Molnar -
Simple registration interface for struct pmu, this provides the
infrastructure for removing all the weak functions.Signed-off-by: Peter Zijlstra
Cc: paulus
Cc: stephane eranian
Cc: Robert Richter
Cc: Will Deacon
Cc: Paul Mundt
Cc: Frederic Weisbecker
Cc: Cyrill Gorcunov
Cc: Lin Ming
Cc: Yanmin
Cc: Deng-Cheng Zhu
Cc: David Miller
Cc: Michael Cree
LKML-Reference:
Signed-off-by: Ingo Molnar -
sed -ie 's/const struct pmu\>/struct pmu/g' `git grep -l "const struct pmu\>"`
Signed-off-by: Peter Zijlstra
Cc: paulus
Cc: stephane eranian
Cc: Robert Richter
Cc: Will Deacon
Cc: Paul Mundt
Cc: Frederic Weisbecker
Cc: Cyrill Gorcunov
Cc: Lin Ming
Cc: Yanmin
Cc: Deng-Cheng Zhu
Cc: David Miller
Cc: Michael Cree
LKML-Reference:
Signed-off-by: Ingo Molnar -
Merge reason: Pick up pending fixes before applying dependent new changes.
Signed-off-by: Ingo Molnar
-
Since we have UP_PREPARE, we should also have UP_CANCELED.
Signed-off-by: Peter Zijlstra
Cc: paulus
LKML-Reference:
Signed-off-by: Ingo Molnar -
Commit 1c024eca (perf, trace: Optimize tracepoints by using
per-tracepoint-per-cpu hlist to track events) caused a module
refcount leak.Reported-And-Tested-by: Avi Kivity
Signed-off-by: Peter Zijlstra
LKML-Reference:
Signed-off-by: Ingo Molnar
09 Sep, 2010
1 commit
-
Reading the file set_ftrace_filter does three things.
1) shows whether or not filters are set for the function tracer
2) shows what functions are set for the function tracer
3) shows what triggers are set on any functions3 is independent from 1 and 2.
The way this file currently works is that it is a state machine,
and as you read it, it may change state. But this assumption breaks
when you use lseek() on the file. The state machine gets out of sync
and the t_show() may use the wrong pointer and cause a kernel oops.Luckily, this will only kill the app that does the lseek, but the app
dies while holding a mutex. This prevents anyone else from using the
set_ftrace_filter file (or any other function tracing file for that matter).A real fix for this is to rewrite the code, but that is too much for
a -rc release or stable. This patch simply disables llseek on the
set_ftrace_filter() file for now, and we can do the proper fix for the
next major release.Reported-by: Robert Swiecki
Cc: Chris Wright
Cc: Tavis Ormandy
Cc: Eugene Teo
Cc: vendor-sec@lst.de
Cc:
Signed-off-by: Steven Rostedt
08 Sep, 2010
6 commits
-
Check the argument name whether it is invalid (not C-like symbol name). This
makes event format simple.Reported-by: Srikar Dronamraju
Cc: Steven Rostedt
Cc: Frederic Weisbecker
Cc: Ingo Molnar
Cc: Mathieu Desnoyers
LKML-Reference:
Signed-off-by: Masami Hiramatsu
Signed-off-by: Arnaldo Carvalho de Melo -
Set "argN" name for each argument automatically if it has no specified name.
Since dynamic trace event(kprobe_events) accepts special characters for its
argument, its format can show those special characters (e.g. '$', '%', '+').
However, perf can't parse those format because of the character (especially
'%') mess up the format. This sets "argX" name for those arguments if user
omitted the argument names.E.g.
# echo 'p do_fork %ax IP=%ip $stack' > tracing/kprobe_events
# cat tracing/kprobe_events
p:kprobes/p_do_fork_0 do_fork arg1=%ax IP=%ip arg3=$stackReported-by: Srikar Dronamraju
Cc: Steven Rostedt
Cc: Frederic Weisbecker
Cc: Ingo Molnar
Cc: Mathieu Desnoyers
LKML-Reference:
Signed-off-by: Masami Hiramatsu
Signed-off-by: Arnaldo Carvalho de Melo -
Don't make argument names from raw parameters (means the parameters are written
in kprobe-tracer syntax), because the argument syntax may include special
characters. Just leave it, then kprobe-tracer gives a new name.Reported-by: Srikar Dronamraju
Cc: Peter Zijlstra
Cc: Paul Mackerras
Cc: Ingo Molnar
Cc: Arnaldo Carvalho de Melo
Cc: Frederic Weisbecker
LKML-Reference:
Signed-off-by: Masami Hiramatsu
Signed-off-by: Arnaldo Carvalho de Melo -
Fix a bug to support %return probe syntax again. Previous commit 4235b04 has a
bug which disables the %return syntax on perf probe.Cc: Peter Zijlstra
Cc: Paul Mackerras
Cc: Ingo Molnar
Cc: Arnaldo Carvalho de Melo
Cc: Frederic Weisbecker
LKML-Reference:
Signed-off-by: Masami Hiramatsu
Signed-off-by: Arnaldo Carvalho de Melo -
Fix a memory leak which happens when a field name conflicts with others. In
error case, free_trace_probe() will free all arguments until nr_args, so this
increments nr_args the begining of the loop instead of the end.Cc: Steven Rostedt
Cc: Frederic Weisbecker
Cc: Ingo Molnar
Cc: Mathieu Desnoyers
LKML-Reference:
Signed-off-by: Masami Hiramatsu
Signed-off-by: Arnaldo Carvalho de Melo -
Add a perf script which shows packets processing and processed
time. It helps us to investigate networking or network devices.If you want to use it, install perf and record perf.data like
following.If you set script, perf gathers records until it ends.
If not, you must Ctrl-C to stop recording.And if you want a report from record,
If you use some options, you can limit the output.
Option is below.tx: show only tx packets processing
rx: show only rx packets processing
dev=: show processing on this device
debug: work with debug mode. It shows buffer status.For example, if you want to show received packets processing
associated with eth4,106133.171439sec cpu=0
irq_entry(+0.000msec irq=24:eth4)
|
softirq_entry(+0.006msec)
|
|---netif_receive_skb(+0.010msec skb=f2d15900 len=100)
| |
| skb_copy_datagram_iovec(+0.039msec 10291::10291)
|
napi_poll_exit(+0.022msec eth4)This perf script helps us to analyze the processing time of a
transmit/receive sequence.Signed-off-by: Koki Sanagi
Acked-by: David S. Miller
Cc: Neil Horman
Cc: Mathieu Desnoyers
Cc: Kaneshige Kenji
Cc: Izumo Taku
Cc: Kosaki Motohiro
Cc: Lai Jiangshan
Cc: Scott Mcmillan
Cc: Steven Rostedt
Cc: Eric Dumazet
Cc: Tom Zanussi
LKML-Reference:
Signed-off-by: Frederic Weisbecker
07 Sep, 2010
2 commits
-
This patch adds tracepoint to consume_skb and add trace_kfree_skb
before __kfree_skb in skb_free_datagram_locked and net_tx_action.
Combinating with tracepoint on dev_hard_start_xmit, we can check
how long it takes to free transmitted packets. And using it, we can
calculate how many packets driver had at that time. It is useful when
a drop of transmitted packet is a problem.sshd-6828 [000] 112689.258154: consume_skb: skbaddr=f2d99bb8
Signed-off-by: Koki Sanagi
Acked-by: David S. Miller
Acked-by: Neil Horman
Cc: Mathieu Desnoyers
Cc: Kaneshige Kenji
Cc: Izumo Taku
Cc: Kosaki Motohiro
Cc: Lai Jiangshan
Cc: Scott Mcmillan
Cc: Steven Rostedt
Cc: Eric Dumazet
LKML-Reference:
Signed-off-by: Frederic Weisbecker -
This patch adds tracepoint to dev_queue_xmit, dev_hard_start_xmit,
netif_rx and netif_receive_skb. These tracepoints help you to monitor
network driver's input/output.-0 [001] 112447.902030: netif_rx: dev=eth1 skbaddr=f3ef0900 len=84
-0 [001] 112447.902039: netif_receive_skb: dev=eth1 skbaddr=f3ef0900 len=84
sshd-6828 [000] 112447.903257: net_dev_queue: dev=eth4 skbaddr=f3fca538 len=226
sshd-6828 [000] 112447.903260: net_dev_xmit: dev=eth4 skbaddr=f3fca538 len=226 rc=0Signed-off-by: Koki Sanagi
Acked-by: David S. Miller
Acked-by: Neil Horman
Cc: Mathieu Desnoyers
Cc: Kaneshige Kenji
Cc: Izumo Taku
Cc: Kosaki Motohiro
Cc: Lai Jiangshan
Cc: Scott Mcmillan
Cc: Steven Rostedt
Cc: Eric Dumazet
LKML-Reference:
Signed-off-by: Frederic Weisbecker