From: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
To: Ingo Molnar <mingo@kernel.org>
Cc: "Frank Ch. Eigler" <fche@redhat.com>,
linux-arch@vger.kernel.org,
Ananth N Mavinakayanahalli <ananth@in.ibm.com>,
Sandeepa Prabhu <sandeepa.prabhu@linaro.org>,
x86@kernel.org, lkml <linux-kernel@vger.kernel.org>,
"Steven Rostedt (Red Hat)" <rostedt@goodmis.org>,
systemtap@sourceware.org, "David S. Miller" <davem@davemloft.net>
Subject: Re: [PATCH -tip v6 00/22] kprobes: introduce NOKPROBE_SYMBOL(), cleanup and fixes crash bugs
Date: Mon, 10 Feb 2014 20:31:53 +0900 [thread overview]
Message-ID: <52F8B8A9.6010600@hitachi.com> (raw)
In-Reply-To: <52F84F61.7060103@hitachi.com>
(2014/02/10 13:02), Masami Hiramatsu wrote:
> (2014/02/09 23:37), Ingo Molnar wrote:
>>
>> * Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> wrote:
>>
>>> I guess the second reason is why the stap takes so long time to set
>>> probes. stap tries to register kprobes without disabled flag, that
>>> means we enables thousands of probes (overheads).
>>>
>>> So the similar thing happens when we enables events as below;
>>>
>>> # for i in /sys/kernel/debug/tracing/events/kprobes/* ; do date; echo 1 > $i; done
>>> Wed Jan 29 10:44:50 UTC 2014
>>> ...
>>>
>>> I tried it and canceled after 4 min passed. It enabled about 17k
>>> events and slowed down my system very much(I almost got hang check
>>> timer).
>>
>> Ok, I guess that's the slowdown bug that Frank reported.
>>
>>> I think we should have some performance statistics (hit count?) and
>>> if it goes over a threshold, we should stop enabling other events.
>>
>> That really feels like a hack. How about fixing the root cause? Does
>> the enabling of all probes have to be so slow?
>
> When I tried to use perf top, most of the time was consumed in
> kprobe_ftrace_handler and optimized_callback, both of them
> are the handler of kprobes. Since I just tried on a VM guest and it
> didn't support NMI nor PMU, thus I have to use a bare metal machine
> for deeper investigation (and I'll do).
> And yes, it seems that the performance problem comes from probing
> and tracing itself.
OK, I've tested and collected some information,
At first, to evaluate the performance of kprobes itself, I set the
ftrace tracing_on=0 (no record) before testing.
For setting probes on all symbols, I ran the below script;
----
#!/bin/bash
TRACE_DIR=/sys/kernel/debug/tracing/
echo "Disable tracing to remove tracing overhead"
echo 0 > $TRACE_DIR/tracing_on
echo > $TRACE_DIR/kprobe_events
echo "Setup events on all functions"
grep -iw t /proc/kallsyms | awk 'BEGIN{i=0};{print("p:"$3"_"i, "0x"$1); i++}' | \
while read l; do echo $l >> $TRACE_DIR/kprobe_events || echo "Failed: $l" ; done
----
And I enabled just 2000(2k) probes, and ran perf top. Here are the result
----
Samples: 12K of event 'cycles', Event count (approx.): 3526908766
77.41% [kernel] [k] get_kprobe
3.17% [kernel] [k] acpi_processor_ffh_cstate_enter
0.93% [kernel] [k] acpi_os_read_port
Samples: 9K of event 'cache-misses', Event count (approx.): 6180338
80.66% [kernel] [k] get_kprobe
2.41% [kernel] [k] clear_page_c
0.48% perf [.] rb_next
----
Even with just 2k probes, get_kprobe has very high overhead!
The reason is that we currently have just 64 entries for the
hlist (perf annotate said that the most of the cache-misses
happened at where accessing hlist->next).
This is too small for handing more than 10k probes.
Thus, I tried to enlarge the hlist_head to 4096 entries and
measured the performance again.
With 2k probes, I got below numbers;
----
Samples: 12K of event 'cycles', Event count (approx.): 1952272318
19.08% [kernel] [k] get_kprobe
6.51% [kernel] [k] acpi_processor_ffh_cstate_enter
2.51% [kernel] [k] avtab_search_node
Samples: 1K of event 'cache-misses', Event count (approx.): 1016756
31.81% [kernel] [k] clear_page_c
5.39% [kernel] [k] shmem_getpage_gfp
3.04% [kernel] [k] get_kprobe
----
OK, now the get_kprobe is cooled down.
And with 8k probes, it still be better, and we can see the
overhead percentage is going up.
----
Samples: 13K of event 'cycles', Event count (approx.): 2119001528
33.17% [kernel] [k] get_kprobe
6.98% [kernel] [k] acpi_processor_ffh_cstate_enter
3.36% [kernel] [k] ftrace_lookup_ip
Samples: 6K of event 'cache-misses', Event count (approx.): 2662552
19.14% [kernel] [k] clear_page_c
15.26% [kernel] [k] get_kprobe
4.16% [kernel] [k] shmem_getpage_gfp
----
And finally, when I tried to 16k probes, it slowed down too much and
couldn't run perf.
I have another idea to solve this, the per-cpu cache for active kprobes,
which can reduce the random memory access on the hlist (but will
consume more memory).
But anyway, for handling massive multiple probes, we cannot escape from
the slowdown finally. As I said, if we consume even 0.1 usec/probe,
it can hit more than 10,000,000 times/sec (because all function call hit
it). As a result, it consumes 1sec / 1sec (this means your machine slows
down to 1/2). And cache miss makes things much worse than that.
Thank you,
--
Masami HIRAMATSU
IT Management Research Dept. Linux Technology Center
Hitachi, Ltd., Yokohama Research Laboratory
E-mail: masami.hiramatsu.pt@hitachi.com
next prev parent reply other threads:[~2014-02-10 11:32 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-19 9:03 [PATCH -tip v6 00/22] kprobes: introduce NOKPROBE_SYMBOL(), cleanup and fixes crash bugs Masami Hiramatsu
2013-12-19 9:03 ` [PATCH -tip v6 01/22] kprobes: Prohibit probing on .entry.text code Masami Hiramatsu
2013-12-19 9:03 ` [PATCH -tip v6 02/22] kprobes: Introduce NOKPROBE_SYMBOL() macro for blacklist Masami Hiramatsu
2013-12-19 9:04 ` [PATCH -tip v6 03/22] [BUGFIX] kprobes/x86: Prohibit probing on debug_stack_* Masami Hiramatsu
2013-12-19 9:04 ` [PATCH -tip v6 04/22] [BUGFIX] x86: Prohibit probing on native_set_debugreg/load_idt Masami Hiramatsu
2013-12-19 9:04 ` [PATCH -tip v6 05/22] [BUGFIX] x86: Prohibit probing on thunk functions and restore Masami Hiramatsu
2013-12-19 9:04 ` [PATCH -tip v6 06/22] [BUGFIX] x86: Prohibit probing on memcpy/memset Masami Hiramatsu
2013-12-19 9:37 ` Jovi Zhangwei
2013-12-20 2:37 ` Masami Hiramatsu
2013-12-20 3:07 ` Jovi Zhangwei
2013-12-20 4:42 ` Masami Hiramatsu
2013-12-20 8:31 ` Jovi Zhangwei
2013-12-20 9:21 ` Masami Hiramatsu
2013-12-23 4:51 ` Jovi Zhangwei
2013-12-23 10:59 ` Masami Hiramatsu
2013-12-24 6:39 ` Jovi Zhangwei
2013-12-24 8:32 ` Masami Hiramatsu
2013-12-24 9:53 ` Jovi Zhangwei
2013-12-24 15:58 ` Masami Hiramatsu
2013-12-25 14:44 ` Jovi Zhangwei
2013-12-19 9:04 ` [PATCH -tip v6 07/22] kprobes/x86: Call exception handlers directly from do_int3/do_debug Masami Hiramatsu
2013-12-19 9:04 ` [PATCH -tip v6 08/22] kprobes/x86: Allow probe on some kprobe preparation functions Masami Hiramatsu
2013-12-19 9:04 ` [PATCH -tip v6 09/22] kprobes: Allow probe on some kprobe functions Masami Hiramatsu
2013-12-19 9:04 ` [PATCH -tip v6 10/22] ftrace/kprobes: Allow probing on some preparation functions Masami Hiramatsu
2013-12-19 9:04 ` [PATCH -tip v6 11/22] x86: Allow kprobes on text_poke/hw_breakpoint Masami Hiramatsu
2013-12-19 9:04 ` [PATCH -tip v6 12/22] x86: Use NOKPROBE_SYMBOL() instead of __kprobes annotation Masami Hiramatsu
2013-12-19 9:04 ` [PATCH -tip v6 13/22] kprobes: Use NOKPROBE_SYMBOL macro instead of __kprobes Masami Hiramatsu
2013-12-19 9:04 ` [PATCH -tip v6 14/22] ftrace/kprobes: Use NOKPROBE_SYMBOL macro in ftrace Masami Hiramatsu
2013-12-19 9:04 ` [PATCH -tip v6 15/22] notifier: Use NOKPROBE_SYMBOL macro in notifier Masami Hiramatsu
2013-12-19 9:04 ` [PATCH -tip v6 16/22] sched: Use NOKPROBE_SYMBOL macro in sched Masami Hiramatsu
2013-12-19 9:04 ` [PATCH -tip v6 17/22] kprobes: Show blacklist entries via debugfs Masami Hiramatsu
2013-12-19 9:04 ` [PATCH -tip v6 18/22] kprobes: Support blacklist functions in module Masami Hiramatsu
2013-12-19 9:04 ` [PATCH -tip v6 19/22] kprobes: Use NOKPROBE_SYMBOL() in sample modules Masami Hiramatsu
2013-12-19 9:04 ` [PATCH -tip v6 20/22] kprobes/x86: Use kprobe_blacklist for .kprobes.text and .entry.text Masami Hiramatsu
2013-12-19 9:04 ` [PATCH -tip v6 21/22] kprobes/x86: Remove unneeded preempt_disable/enable in interrupt handlers Masami Hiramatsu
2013-12-19 9:04 ` [PATCH -tip v6 22/22] [RFC] kprobes/x86: Add emergency recovery process for bad kprobes Masami Hiramatsu
2013-12-19 20:46 ` [PATCH -tip v6 00/22] kprobes: introduce NOKPROBE_SYMBOL(), cleanup and fixes crash bugs Frank Ch. Eigler
2013-12-20 4:21 ` Masami Hiramatsu
2013-12-20 8:20 ` Ingo Molnar
2013-12-20 9:31 ` Masami Hiramatsu
2013-12-20 10:46 ` Ingo Molnar
2013-12-22 21:10 ` Masami Hiramatsu
2013-12-23 13:04 ` Ingo Molnar
2013-12-24 1:19 ` Masami Hiramatsu
2014-01-29 11:22 ` Masami Hiramatsu
2014-02-09 14:37 ` Ingo Molnar
2014-02-09 21:27 ` Frank Ch. Eigler
2014-02-10 4:02 ` Masami Hiramatsu
2014-02-10 11:31 ` Masami Hiramatsu [this message]
2013-12-20 13:40 ` Frank Ch. Eigler
2013-12-22 21:32 ` Masami Hiramatsu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=52F8B8A9.6010600@hitachi.com \
--to=masami.hiramatsu.pt@hitachi.com \
--cc=ananth@in.ibm.com \
--cc=davem@davemloft.net \
--cc=fche@redhat.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=rostedt@goodmis.org \
--cc=sandeepa.prabhu@linaro.org \
--cc=systemtap@sourceware.org \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).