From: Peter Zijlstra <peterz@infradead.org>
To: Pavel Machek <pavel@ucw.cz>
Cc: acme@redhat.com, kernel list <linux-kernel@vger.kernel.org>,
mingo@redhat.com, alexander.shishkin@linux.intel.com
Subject: Re: Getting interrupt every million cache misses
Date: Thu, 27 Oct 2016 11:33:34 +0200 [thread overview]
Message-ID: <20161027093334.GK3102@twins.programming.kicks-ass.net> (raw)
In-Reply-To: <20161027091104.GB19469@amd>
On Thu, Oct 27, 2016 at 11:11:04AM +0200, Pavel Machek wrote:
> How to work around rowhammer, break my system _and_ make kernel perf
> maintainers scream at the same time: (:-) )
>
> I think I got the place now. Let me try...
Lol ;-)
>
> diff --git a/arch/x86/events/core.c b/arch/x86/events/core.c
> index d31735f..ce83f5e 100644
> --- a/arch/x86/events/core.c
> +++ b/arch/x86/events/core.c
> @@ -1495,6 +1495,11 @@ perf_event_nmi_handler(unsigned int cmd, struct pt_regs *regs)
>
> perf_sample_event_took(finish_clock - start_clock);
>
> + /* Here */
> + {
> + udelay(58000);
> + }
> +
> return ret;
> }
> NOKPROBE_SYMBOL(perf_event_nmi_handler);
Like you guess, not quite ;-)
I think you want to register a custom overflow handler with your event.
So you get something like:
struct perf_event_attr rh_attr = {
.type = PERF_TYPE_HARDWARE,
.config = PERF_COUNT_HW_CACHE_MISSES,
.size = sizeof(struct perf_event_attr),
.pinned = 1,
.sample_period = 1000000,
};
static DEFINE_PER_CPU(struct perf_event *, rh_event);
static DEFINE_PER_CPU(u64, rh_timestamp);
static void rh_overflow(struct perf_event *event, struct perf_sample_data *data, struct pt_regs *regs)
{
u64 *ts = this_cpu_ptr(&rh_timestamp); /* this is NMI context */
u64 now = ktime_get_mono_fast_ns();
s64 delta = now - *ts;
*ts = now;
if (delta > 64 * NSEC_PER_USEC)
udelay(58000);
}
__init int my_module_init()
{
int cpu;
/* XXX borken vs hotplug */
for_each_online_cpu(cpu) {
struct perf_event *event = per_cpu(event, cpu);
event = perf_event_create_kernel_counter(&rh_attr, cpu, NULL, rh_overflow, NULL);
if (!event)
/* meh */
;
}
}
__exit void my_module_exit()
{
int cpu;
for_each_online_cpu(cpu) {
struct perf_event *event = per_cpu(event, cpu);
if (event)
perf_event_release_kernel(event);
}
}
next prev parent reply other threads:[~2016-10-27 14:33 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-10-26 20:54 Pavel Machek
2016-10-27 8:28 ` Peter Zijlstra
2016-10-27 8:46 ` Pavel Machek
2016-10-27 9:15 ` Peter Zijlstra
2016-10-27 9:11 ` Pavel Machek
2016-10-27 9:33 ` Peter Zijlstra [this message]
2016-10-27 20:40 ` Kees Cook
2016-10-27 21:27 ` rowhammer protection [was Re: Getting interrupt every million cache misses] Pavel Machek
2016-10-28 7:07 ` Ingo Molnar
2016-10-28 8:50 ` Pavel Machek
2016-10-28 8:59 ` Ingo Molnar
2016-10-28 11:55 ` Pavel Machek
2016-10-28 9:04 ` Peter Zijlstra
2016-10-28 9:27 ` Vegard Nossum
2016-10-28 9:35 ` Ingo Molnar
2016-10-28 9:47 ` Vegard Nossum
2016-10-28 9:53 ` [kernel-hardening] " Mark Rutland
2016-10-28 11:27 ` Pavel Machek
2016-10-28 9:51 ` [kernel-hardening] " Mark Rutland
2016-10-28 11:21 ` Pavel Machek
2016-10-28 14:05 ` Mark Rutland
2016-10-28 14:18 ` Peter Zijlstra
2016-10-28 18:30 ` Pavel Machek
2016-10-28 18:48 ` Peter Zijlstra
2016-11-02 18:13 ` Pavel Machek
2016-10-28 17:27 ` Pavel Machek
2016-10-29 13:06 ` Daniel Gruss
2016-10-29 19:42 ` Pavel Machek
2016-10-29 20:05 ` Daniel Gruss
2016-10-29 21:05 ` Pavel Machek
2016-10-29 21:07 ` Daniel Gruss
2016-10-29 21:45 ` Pavel Machek
2016-10-29 21:49 ` Daniel Gruss
2016-10-29 22:01 ` Pavel Machek
2016-10-29 22:02 ` Daniel Gruss
2016-10-31 8:27 ` Pavel Machek
2016-10-31 14:47 ` Mark Rutland
2016-10-31 21:13 ` Pavel Machek
2016-10-31 22:09 ` Mark Rutland
2016-11-01 6:33 ` Ingo Molnar
2016-11-01 7:20 ` Daniel Micay
2016-11-01 7:53 ` Daniel Gruss
2016-11-01 8:10 ` Pavel Machek
2016-11-01 8:13 ` Daniel Gruss
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=20161027093334.GK3102@twins.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=acme@redhat.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=pavel@ucw.cz \
/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
Powered by JetHome