All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andi Kleen <ak@linux.intel.com>
To: Stephane Eranian <eranian@google.com>
Cc: linux-kernel@vger.kernel.org, peterz@infradead.org,
	mingo@elte.hu, acme@redhat.com, jolsa@redhat.com,
	namhyung.kim@lge.com
Subject: Re: [PATCH v6 07/18] perf: add generic memory sampling interface
Date: Fri, 18 Jan 2013 15:06:04 -0800	[thread overview]
Message-ID: <20130118230604.GJ4051@tassilo.jf.intel.com> (raw)
In-Reply-To: <1358264386-24633-8-git-send-email-eranian@google.com>

>  extern void perf_output_sample(struct perf_output_handle *handle,
> diff --git a/include/uapi/linux/perf_event.h b/include/uapi/linux/perf_event.h
> index 7e24641..8283218 100644
> --- a/include/uapi/linux/perf_event.h
> +++ b/include/uapi/linux/perf_event.h
> @@ -133,9 +133,9 @@ enum perf_event_sample_format {
>  	PERF_SAMPLE_REGS_USER			= 1U << 12,
>  	PERF_SAMPLE_STACK_USER			= 1U << 13,
>  	PERF_SAMPLE_WEIGHT			= 1U << 14,
> +	PERF_SAMPLE_DSRC			= 1U << 15,

This conflicts with similar extensions in the Haswell patchkit,
but that can be worked out by just moving some numbers (and making
sure the input/output calls are still in the right place)


> +union perf_mem_dsrc {
> +	__u64 val;
> +	struct {
> +		__u64   mem_op:5,	/* type of opcode */
> +			mem_lvl:14,	/* memory hierarchy level */
> +			mem_snoop:5,	/* snoop mode */
> +			mem_lock:2,	/* lock instr */
> +			mem_dtlb:7,	/* tlb access */
> +			mem_rsvd:31;
> +	};
> +};
> +
> +/* type of opcode (load/store/prefetch,code) */
> +#define PERF_MEM_OP_NA		0x01 /* not available */
> +#define PERF_MEM_OP_LOAD	0x02 /* load instruction */
> +#define PERF_MEM_OP_STORE	0x04 /* store instruction */
> +#define PERF_MEM_OP_PFETCH	0x08 /* prefetch */
> +#define PERF_MEM_OP_EXEC	0x10 /* code (execution) */
> +#define PERF_MEM_OP_SHIFT	0

Do we really need the shift? it's implicit in the bitfield right?

> +/* memory hierarchy (memory level, hit or miss) */
> +#define PERF_MEM_LVL_NA		0x01  /* not available */
> +#define PERF_MEM_LVL_HIT	0x02  /* hit level */
> +#define PERF_MEM_LVL_MISS	0x04  /* miss level  */
> +#define PERF_MEM_LVL_L1		0x08  /* L1 */
> +#define PERF_MEM_LVL_LFB	0x10  /* Line Fill Buffer */
> +#define PERF_MEM_LVL_L2		0x20  /* L2 hit */
> +#define PERF_MEM_LVL_L3		0x40  /* L3 hit */
> +#define PERF_MEM_LVL_LOC_RAM	0x80  /* Local DRAM */
> +#define PERF_MEM_LVL_REM_RAM1	0x100 /* Remote DRAM (1 hop) */
> +#define PERF_MEM_LVL_REM_RAM2	0x200 /* Remote DRAM (2 hops) */
> +#define PERF_MEM_LVL_REM_CCE1	0x400 /* Remote Cache (1 hop) */
> +#define PERF_MEM_LVL_REM_CCE2	0x800 /* Remote Cache (2 hops) */
> +#define PERF_MEM_LVL_IO		0x1000 /* I/O memory */
> +#define PERF_MEM_LVL_UNC	0x2000 /* Uncached memory */

I would leave some free bits here, obviously this doesn't cover all
that may be possible in system architecture. Also why is this a bit mask, 
you can only hit one level right? So perhaps a number.

> +/* TLB access */
> +#define PERF_MEM_TLB_NA		0x01 /* not available */
> +#define PERF_MEM_TLB_HIT	0x02 /* hit level */
> +#define PERF_MEM_TLB_MISS	0x04 /* miss level */
> +#define PERF_MEM_TLB_L1		0x08 /* L1 */
> +#define PERF_MEM_TLB_L2		0x10 /* L2 */
> +#define PERF_MEM_TLB_WK		0x20 /* Hardware Walker*/
> +#define PERF_MEM_TLB_OS		0x40 /* OS fault handler */


Same


> +#define PERF_MEM_TLB_SHIFT	26
> +
> +#define PERF_MEM_S(a, s) \
> +	(((u64)PERF_MEM_##a##_##s) << PERF_MEM_##a##_SHIFT)

Is that used by anything?


-Andi
-- 
ak@linux.intel.com -- Speaking for myself only

  reply	other threads:[~2013-01-18 23:06 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-15 15:39 [PATCH v6 00/18] perf: add memory access sampling support Stephane Eranian
2013-01-15 15:39 ` [PATCH v6 01/18] perf, x86: Support CPU specific sysfs events Stephane Eranian
2013-01-15 15:39 ` [PATCH v6 02/18] perf/x86: improve sysfs event mapping with event string Stephane Eranian
2013-01-18 22:57   ` Andi Kleen
2013-01-15 15:39 ` [PATCH v6 03/18] perf/x86: add flags to event constraints Stephane Eranian
2013-01-18 22:59   ` Andi Kleen
2013-01-22 14:22     ` Stephane Eranian
2013-01-15 15:39 ` [PATCH v6 04/18] perf, core: Add a concept of a weightened sample Stephane Eranian
2013-01-15 15:39 ` [PATCH v6 05/18] perf: add minimal support for PERF_SAMPLE_WEIGHT Stephane Eranian
2013-01-18 23:00   ` Andi Kleen
2013-01-22 14:30     ` Stephane Eranian
2013-01-15 15:39 ` [PATCH v6 06/18] perf: add support for PERF_SAMPLE_ADDR in dump_sampple() Stephane Eranian
2013-01-15 15:39 ` [PATCH v6 07/18] perf: add generic memory sampling interface Stephane Eranian
2013-01-18 23:06   ` Andi Kleen [this message]
2013-01-23 16:54     ` Stephane Eranian
2013-01-15 15:39 ` [PATCH v6 08/18] perf/x86: add memory profiling via PEBS Load Latency Stephane Eranian
2013-01-18 23:12   ` Andi Kleen
2013-01-15 15:39 ` [PATCH v6 09/18] perf/x86: export PEBS load latency threshold register to sysfs Stephane Eranian
2013-01-15 15:39 ` [PATCH v6 10/18] perf/x86: add support for PEBS Precise Store Stephane Eranian
2013-01-18 23:21   ` Andi Kleen
2013-01-15 15:39 ` [PATCH v6 11/18] perf tools: add mem access sampling core support Stephane Eranian
2013-01-18 23:25   ` Andi Kleen
2013-01-15 15:39 ` [PATCH v6 12/18] perf report: add support for mem access profiling Stephane Eranian
2013-01-15 15:39 ` [PATCH v6 13/18] perf record: " Stephane Eranian
2013-01-15 15:39 ` [PATCH v6 14/18] perf tools: add new mem command for memory " Stephane Eranian
2013-01-15 15:39 ` [PATCH v6 15/18] perf: add PERF_RECORD_MISC_MMAP_DATA to RECORD_MMAP Stephane Eranian
2013-01-18 23:25   ` Andi Kleen
2013-01-15 15:39 ` [PATCH v6 16/18] perf tools: detect data vs. text mappings Stephane Eranian
2013-01-15 15:39 ` [PATCH v6 17/18] perf tools: Ignore ABS symbols when loading data maps Stephane Eranian
2013-01-15 15:39 ` [PATCH v6 18/18] perf tools: Fix output of symbol_daddr offset Stephane Eranian
2013-01-24 11:56 ` [PATCH v6 00/18] perf: add memory access sampling support Ingo Molnar
2013-01-24 13:39   ` Stephane Eranian
2013-01-24 13:41     ` Ingo Molnar

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=20130118230604.GJ4051@tassilo.jf.intel.com \
    --to=ak@linux.intel.com \
    --cc=acme@redhat.com \
    --cc=eranian@google.com \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=namhyung.kim@lge.com \
    --cc=peterz@infradead.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.