linux-perf-users.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [Question] How to sample PERF_TYPE_HARDWARE
@ 2021-02-08  3:47 rainkin
  2021-02-16  7:50 ` Namhyung Kim
  0 siblings, 1 reply; 5+ messages in thread
From: rainkin @ 2021-02-08  3:47 UTC (permalink / raw)
  To: linux-perf-users

Hello~

My goal is to record the number of occurring PERF_TYPE_HARDWARE events
(e.g., branches) every N events.

In my understanding, the "perf stat -e branches -I N " command is not
sampling, it is actually count model which records branches every N
millisecond. Thus perf stat does not meet my goal.

For the "perf record -e cycles -b" command, it does sampling, which
records a LBR sample every N cycles events. However, it seems that
"perf record" does not support sampling PERF_TYPE_HARDWARE.

I also look at the syscall perf_event_open, but still cannot find any
documentation about how to sample PERF_TYPE_HARDWARE.

Does anyone know how to do that?Any suggestions is helpful for me :)

Rainkin

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Question] How to sample PERF_TYPE_HARDWARE
  2021-02-08  3:47 [Question] How to sample PERF_TYPE_HARDWARE rainkin
@ 2021-02-16  7:50 ` Namhyung Kim
  2021-02-18  1:22   ` rainkin
  2021-02-18  2:04   ` rainkin
  0 siblings, 2 replies; 5+ messages in thread
From: Namhyung Kim @ 2021-02-16  7:50 UTC (permalink / raw)
  To: rainkin; +Cc: linux-perf-users

Hello,

On Mon, Feb 8, 2021 at 12:50 PM rainkin <rainkin1993@gmail.com> wrote:
>
> Hello~
>
> My goal is to record the number of occurring PERF_TYPE_HARDWARE events
> (e.g., branches) every N events.
>
> In my understanding, the "perf stat -e branches -I N " command is not
> sampling, it is actually count model which records branches every N
> millisecond. Thus perf stat does not meet my goal.
>
> For the "perf record -e cycles -b" command, it does sampling, which
> records a LBR sample every N cycles events. However, it seems that
> "perf record" does not support sampling PERF_TYPE_HARDWARE.

The 'cycles' is a PERF_TYPE_HARDWARE event.

>
> I also look at the syscall perf_event_open, but still cannot find any
> documentation about how to sample PERF_TYPE_HARDWARE.
>
> Does anyone know how to do that?Any suggestions is helpful for me :)

  perf record -e branches -c N

?

Thanks,
Namhyung

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Question] How to sample PERF_TYPE_HARDWARE
  2021-02-16  7:50 ` Namhyung Kim
@ 2021-02-18  1:22   ` rainkin
  2021-02-18  2:04   ` rainkin
  1 sibling, 0 replies; 5+ messages in thread
From: rainkin @ 2021-02-18  1:22 UTC (permalink / raw)
  To: Namhyung Kim; +Cc: linux-perf-users

Hi Namhyung,
Thanks for your reply.
Let me make my goal more clear:
record the number of occurring branches instructions
(PERF_COUNT_HW_BRANCH_INSTRUCTIONS) every N cycles
(PERF_COUNT_HW_CPU_CYCLES).

>   perf record -e branches -c N
I use strace to capture the syscall invoked by the above command:

perf_event_open({type=PERF_TYPE_HARDWARE, size=PERF_ATTR_SIZE_VER6,
config=PERF_COUNT_HW_BRANCH_INSTRUCTIONS, sample_period=100000,
sample_type=PERF_SAMPLE_IP|PERF_SAMPLE_TID|PERF_SAMPLE_TIME|PERF_SAMPLE_ID|PERF_SAMPLE_CPU,
read_format=PERF_FORMAT_ID, disabled=1, inherit=1, pinned=0,
exclusive=0, exclusive_user=0, exclude_kernel=0, exclude_hv=0,
exclude_idle=0, mmap=0, comm=0, freq=0, inherit_stat=0,
enable_on_exec=0, task=0, watermark=0, precise_ip=0 /* arbitrary skid
*/, mmap_data=0, sample_id_all=1, exclude_host=0, exclude_guest=1,
exclude_callchain_kernel=0, exclude_callchain_user=0, mmap2=0,
comm_exec=0, use_clockid=0, context_switch=0, write_backward=0,
namespaces=0, wakeup_events=0, config1=0, config2=0,
sample_regs_user=0, sample_regs_intr=0, aux_watermark=0,
sample_max_stack=0, aux_sample_size=0}, -1, 10, -1,
PERF_FLAG_FD_CLOEXEC) = 15

In my understanding ,WHAT this command actually does is recording
IP,TID, and so on
(sample_type=PERF_SAMPLE_IP|PERF_SAMPLE_TID|PERF_SAMPLE_TIME|PERF_SAMPLE_ID|PERF_SAMPLE_CPU)
every N (here N = 100000) branches
(config=PERF_COUNT_HW_BRANCH_INSTRUCTIONS). Thus this cannot meet my
goal.

Thanks,
Rainkin


Namhyung Kim <namhyung@gmail.com> 于2021年2月16日周二 下午3:50写道:
>
> Hello,
>
> On Mon, Feb 8, 2021 at 12:50 PM rainkin <rainkin1993@gmail.com> wrote:
> >
> > Hello~
> >
> > My goal is to record the number of occurring PERF_TYPE_HARDWARE events
> > (e.g., branches) every N events.
> >
> > In my understanding, the "perf stat -e branches -I N " command is not
> > sampling, it is actually count model which records branches every N
> > millisecond. Thus perf stat does not meet my goal.
> >
> > For the "perf record -e cycles -b" command, it does sampling, which
> > records a LBR sample every N cycles events. However, it seems that
> > "perf record" does not support sampling PERF_TYPE_HARDWARE.
>
> The 'cycles' is a PERF_TYPE_HARDWARE event.
>
> >
> > I also look at the syscall perf_event_open, but still cannot find any
> > documentation about how to sample PERF_TYPE_HARDWARE.
> >
> > Does anyone know how to do that?Any suggestions is helpful for me :)
>
>   perf record -e branches -c N
>
> ?
>
> Thanks,
> Namhyung

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Question] How to sample PERF_TYPE_HARDWARE
  2021-02-16  7:50 ` Namhyung Kim
  2021-02-18  1:22   ` rainkin
@ 2021-02-18  2:04   ` rainkin
  2021-02-19  7:09     ` Namhyung Kim
  1 sibling, 1 reply; 5+ messages in thread
From: rainkin @ 2021-02-18  2:04 UTC (permalink / raw)
  To: Namhyung Kim; +Cc: linux-perf-users

Hi Namhyung,
Thanks for your reply.
Let me make my goal more clear: record the number of occurring branch
instructions (PERF_COUNT_HW_BRANCH_INSTRUCTIONS) every N cycles
(PERF_COUNT_HW_CPU_CYCLES).

For the command you mentioned : perf record -e branches -c N

I use strace to capture the syscall invoked by the above command:

perf_event_open({type=PERF_TYPE_HARDWARE, size=PERF_ATTR_SIZE_VER6,
config=PERF_COUNT_HW_BRANCH_INSTRUCTIONS, sample_period=100000,
sample_type=PERF_SAMPLE_IP|PERF_SAMPLE_TID|PERF_SAMPLE_TIME|PERF_SAMPLE_ID|PERF_SAMPLE_CPU,
read_format=PERF_FORMAT_ID, disabled=1, inherit=1, pinned=0,
exclusive=0, exclusive_user=0, exclude_kernel=0, exclude_hv=0,
exclude_idle=0, mmap=0, comm=0, freq=0, inherit_stat=0,
enable_on_exec=0, task=0, watermark=0, precise_ip=0 /* arbitrary skid
*/, mmap_data=0, sample_id_all=1, exclude_host=0, exclude_guest=1,
exclude_callchain_kernel=0, exclude_callchain_user=0, mmap2=0,
comm_exec=0, use_clockid=0, context_switch=0, write_backward=0,
namespaces=0, wakeup_events=0, config1=0, config2=0,
sample_regs_user=0, sample_regs_intr=0, aux_watermark=0,
sample_max_stack=0, aux_sample_size=0}, -1, 10, -1,
PERF_FLAG_FD_CLOEXEC)

In my understanding ,WHAT this command actually does is recording
IP,TID, and so on
(sample_type=PERF_SAMPLE_IP|PERF_SAMPLE_TID|PERF_SAMPLE_TIME|PERF_SAMPLE_ID|PERF_SAMPLE_CPU)
every N (here N = 100000) branches
(config=PERF_COUNT_HW_BRANCH_INSTRUCTIONS). Thus this cannot meet my
goal.

Thanks,
Rainkin

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Question] How to sample PERF_TYPE_HARDWARE
  2021-02-18  2:04   ` rainkin
@ 2021-02-19  7:09     ` Namhyung Kim
  0 siblings, 0 replies; 5+ messages in thread
From: Namhyung Kim @ 2021-02-19  7:09 UTC (permalink / raw)
  To: rainkin; +Cc: linux-perf-users

On Thu, Feb 18, 2021 at 11:05 AM rainkin <rainkin1993@gmail.com> wrote:
>
> Hi Namhyung,
> Thanks for your reply.
> Let me make my goal more clear: record the number of occurring branch
> instructions (PERF_COUNT_HW_BRANCH_INSTRUCTIONS) every N cycles
> (PERF_COUNT_HW_CPU_CYCLES).

Please try this:

  perf record -c N -e '{cycles,branches}:S'
  perf script

Thanks,
Namhyung

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-02-19  7:11 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-08  3:47 [Question] How to sample PERF_TYPE_HARDWARE rainkin
2021-02-16  7:50 ` Namhyung Kim
2021-02-18  1:22   ` rainkin
2021-02-18  2:04   ` rainkin
2021-02-19  7:09     ` Namhyung Kim

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).