From: Peter Zijlstra <peterz@infradead.org>
To: mingo@kernel.org, acme@kernel.org, linux-kernel@vger.kernel.org
Cc: andi@firstfloor.org, eranian@google.com, jolsa@kernel.org,
torvalds@linux-foundation.org, davidcc@google.com,
alexander.shishkin@linux.intel.com, namhyung@kernel.org,
kan.liang@intel.com, khandual@linux.vnet.ibm.com,
peterz@infradead.org
Subject: [RFC][PATCH 0/7] perf: Branch stack annotation and fixes
Date: Fri, 08 Jul 2016 15:30:59 +0200 [thread overview]
Message-ID: <20160708133059.031522978@infradead.org> (raw)
Hi,
These here patches improve the perf branch-stack support and add branch-stack
support to perf-annotate.
They appear to work for me; but some of it is fairly hairy code so please have
a hard look.
The last patch includes the userspace changes; and includes samples
output of 'perf annotate branches', but since email doesn't do color,
lots of information is lost. A screenshot of the same data can be found
here:
http://programming.kicks-ass.net/sekrit/peterz1.png
And the actual program can be found below.
--- branches.c ---
#include <stdlib.h>
#include <stdio.h>
#define B(x) (1 << x)
long lfsr_taps[] =
{
[2] = B(0) | B(1),
[3] = B(0) | B(2),
[4] = B(0) | B(3),
[5] = B(1) | B(4),
[6] = B(0) | B(5),
[7] = B(0) | B(6),
[8] = B(1) | B(2) | B(3) | B(7),
[9] = B(3) | B(8),
[10] = B(2) | B(9),
[11] = B(1) | B(10),
[12] = B(0) | B(3) | B(5) | B(11),
[13] = B(0) | B(2) | B(3) | B(12),
[14] = B(0) | B(2) | B(4) | B(13),
[15] = B(0) | B(14),
[16] = B(1) | B(2) | B(4) | B(15),
[17] = B(2) | B(16),
[18] = B(6) | B(17),
[19] = B(0) | B(1) | B(4) | B(18),
[20] = B(2) | B(19),
[21] = B(1) | B(20),
[22] = B(0) | B(21),
[23] = B(4) | B(22),
[24] = B(0) | B(2) | B(3) | B(23),
[25] = B(2) | B(24),
[26] = B(0) | B(1) | B(5) | B(25),
[27] = B(0) | B(1) | B(4) | B(26),
[28] = B(2) | B(27),
[29] = B(1) | B(28),
[30] = B(0) | B(3) | B(5) | B(29),
[31] = B(2) | B(30),
[32] = B(1) | B(5) | B(6) | B(31),
};
unsigned long taps;
static unsigned long lfsr(unsigned long lfsr)
{
lfsr = (lfsr>>1) ^ ((0x0u - (lfsr & 0x1u)) & taps);
return lfsr;
}
void lfsr_init(long bits)
{
taps = lfsr_taps[bits];
}
unsigned volatile long acc = 0;
void branches(unsigned long seed, unsigned long iterations)
{
long i, reg = seed;
for (i = 0; i < iterations; i++) {
if (reg & 0x1)
acc++;
else
acc--;
reg = lfsr(reg);
if (seed & 1)
acc >>= 2;
if (~reg & 0x1)
acc--;
else
acc++;
reg = lfsr(reg);
}
}
int main(int argc, char **argv)
{
long bits = 22;
long seed = 2;
if (argc > 1)
bits = atoi(argv[1]);
if (argc > 2)
seed = atoi(argv[2]);
lfsr_init(bits);
branches(seed, 1 << bits);
return 0;
}
next reply other threads:[~2016-07-08 14:06 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-08 13:30 Peter Zijlstra [this message]
2016-07-08 13:31 ` [RFC][PATCH 1/7] perf/x86/intel: Rework the large PEBS setup code Peter Zijlstra
2016-07-08 16:36 ` Jiri Olsa
2016-07-08 22:00 ` Peter Zijlstra
2016-07-08 22:25 ` Peter Zijlstra
2016-07-10 9:08 ` Jiri Olsa
2016-07-08 13:31 ` [RFC][PATCH 2/7] perf,x86: Ensure perf_sched_cb_{inc,dec}() is only called from pmu::{add,del}() Peter Zijlstra
2016-07-08 13:31 ` [RFC][PATCH 3/7] perf/x86/intel: DCE intel_pmu_lbr_del() Peter Zijlstra
2016-07-08 13:31 ` [RFC][PATCH 4/7] perf/x86/intel: Remove redundant test from intel_pmu_lbr_add() Peter Zijlstra
2016-07-08 13:31 ` [RFC][PATCH 5/7] perf/x86/intel: Clean up LBR state tracking Peter Zijlstra
2016-07-08 13:31 ` [RFC][PATCH 6/7] perf: Optimize perF_pmu_sched_task() Peter Zijlstra
2016-07-08 13:31 ` [RFC][PATCH 7/7] perf/annotate: Add branch stack / basic block information Peter Zijlstra
2016-07-08 14:55 ` Ingo Molnar
2016-07-08 16:27 ` Peter Zijlstra
2016-07-08 16:36 ` Peter Zijlstra
2016-09-08 16:18 ` Arnaldo Carvalho de Melo
2016-09-08 16:41 ` Peter Zijlstra
2016-09-08 16:51 ` Peter Zijlstra
2016-09-08 17:07 ` Arnaldo Carvalho de Melo
2016-09-08 16:43 ` Stephane Eranian
2016-09-08 16:59 ` Andi Kleen
2016-09-08 17:11 ` Arnaldo Carvalho de Melo
2016-09-09 2:40 ` Jin, Yao
2016-09-08 18:15 ` Peter Zijlstra
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=20160708133059.031522978@infradead.org \
--to=peterz@infradead.org \
--cc=acme@kernel.org \
--cc=alexander.shishkin@linux.intel.com \
--cc=andi@firstfloor.org \
--cc=davidcc@google.com \
--cc=eranian@google.com \
--cc=jolsa@kernel.org \
--cc=kan.liang@intel.com \
--cc=khandual@linux.vnet.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=namhyung@kernel.org \
--cc=torvalds@linux-foundation.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).