All of lore.kernel.org
 help / color / mirror / Atom feed
From: Manuel Selva <selva.manuel@gmail.com>
To: Andi Kleen <andi@firstfloor.org>
Cc: Andreas Hollmann <hollmann@in.tum.de>,
	Manuel Selva <manuel.selva@insa-lyon.fr>,
	linux-perf-users@vger.kernel.org
Subject: Re: Link between Intel documentation events and perf list events
Date: Wed, 03 Jul 2013 11:06:45 +0200	[thread overview]
Message-ID: <51D3E9A5.2010804@gmail.com> (raw)
In-Reply-To: <20130702144904.GY6123@two.firstfloor.org>

[-- Attachment #1: Type: text/plain, Size: 2312 bytes --]

Thanks.

I still have question on perf, and because I can't find an answer on the 
net I am asking here again. I wrote a simple C program calling CPUID to 
get information about my laptop performance monitoring units (putting 
0XA in eax register before calling cpuid)

In the results located in ebx I see a 1 bit for the core cycle event and 
a 1 bit for the instruction retired event. According to Intel 
documentation these ones means that theassociated events are not 
available. But I can use these events with perf, and user libraries such 
as PAPI are telling me that they are available.

I attached to this mail my program, is there any problem in it, where is 
my mistake ?

Manu

On 07/02/2013 04:49 PM, Andi Kleen wrote:
> On Tue, Jul 02, 2013 at 03:33:18PM +0200, Manuel Selva wrote:
>> Thanks again for the help.Your answer suggests that events listed as
>> Hardware event by perf listare what is called Architecural Events
>> for Intel processors, isn't it ?
> perf uses a superset of the architectural events
> (but only a small subset of a full Intel event list)
>
> Also it supports setting the other events in raw form
> (or various add-on tools exist to provide them as names)
>
>> On my Sandy Bridge core i5-2520M, perf list reports 10 hardware
>> events, where as they are only 7 entriesin the table 18-1 of Intel
>> documentation you mentioned. So I am wondering what are these 3
>> additional events;
> Not all events supported by perf are in sysfs.
>
>> event=0x00,umask=0x03 (ref-cycles)
>> event=0xb1,umask=0x01,inv,cmask=0x01 (stalled-cycles-backend)
>> event=0x0e,umask=0x01,inv,cmask=0x01 (stalled-cycles-frontend)
>>
>> Looking at table 19-7 in the same Intel document, I can see non
>> architectural events for my core i5-2xxx. In this table I can see
>> that:
>>
>> ref-cycles                       ==> Can't find it
> This is typically called CPU_CLK_UNHALTED.REF_TSC or so
> in the Intel documentation.
>
>> stalled-cycles-backend ==> Counts total number of uops to be
>> dispatched per- thread each cycle. Set Cmask = 1, INV =1 to count
>> stall cycles.
>> stalled-cycles-frontend ==> Increments each cycle the # of Uops
>> issued by the RAT to RS.Set Cmask = 1, Inv = 1, Any= 1to count
>> stalled cycles of this core.
> These two are very broken. Just ignore them.
>
> -Andi


[-- Attachment #2: cpuid.c --]
[-- Type: text/x-csrc, Size: 2111 bytes --]

#include <stdio.h>

int main() {

    unsigned int resultEax;
    unsigned int resultEbx;
    unsigned int resultEdx;

    __asm__("movl $0xa, %%eax" : ); // Moves 0xA in EAX: CPUID input param to get performance monitoring info
    __asm__("cpuid" : );
    __asm__("movl %%eax, %0" :"=r"(resultEax) : :);
    __asm__("movl %%ebx, %0" :"=r"(resultEbx) : :);
    __asm__("movl %%edx, %0" :"=r"(resultEdx) : :);

    printf("%-82s =  %2u\n", "Version ID of architectural performance monitoring" , resultEax & 255U); // Bits 07 to 00
    printf("%-82s =  %2u\n", "Number of general-purpose performance monitoring counter per logical processor", (resultEax >> 8) & 255); // Bits 15 to 08
    printf("%-82s =  %2u\n", "Bit width of general-purpose performance monitoring counter", (resultEax >> 16) & 255); // Bits 23 to 16
    printf("%-82s =  %2u\n", "Length of EBX bit vector to enumerate architectural performance monitoring events", (resultEax >> 24) & 255); // Bits 31 to 24
    printf("\n");

    printf("%-82s =  %2u\n", "Core cycle event (0 if available, 1 if not)", resultEbx & 1); // Bits 00
    printf("%-82s =  %2u\n", "Instruction retired event (0 if available, 1 if not)", (resultEbx >> 1) & 1); // Bits 01
    printf("%-82s =  %2u\n", "Reference cycles event (0 if available, 1 if not)", (resultEbx >> 2) & 1); // Bits 02
    printf("%-82s =  %2u\n", "Last level cache reference event (0 if available, 1 if not)", (resultEbx >> 3) & 1); // Bits 03
    printf("%-82s =  %2u\n", "Last level cache misses event (0 if available, 1 if not)", (resultEbx >> 4) & 1); // Bits 04
    printf("%-82s =  %2u\n", "Branch instruction retired event (0 if available, 1 if not)", (resultEbx >> 5) & 1); // Bits 05
    printf("%-82s =  %2u\n", "Branch mispredict retired event (0 if available, 1 if not)", (resultEbx >> 6) & 1); // Bits 06
    printf("\n");

    printf("%-82s =  %2u\n", "Number of fixed-function performance counters", (resultEdx >> 0) & 15); // Bits 04 to 00
    printf("%-82s =  %2u\n", "Bit width of fixed-function performance counters", (resultEdx >> 5) & 255); // Bits 12 to 05

    return 0;
}

  reply	other threads:[~2013-07-03  9:06 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-01 16:10 Link between Intel documentation events and perf list events Manuel Selva
2013-07-02  3:55 ` Andi Kleen
2013-07-02  7:53   ` Manuel Selva
2013-07-02 12:39     ` Andreas Hollmann
2013-07-02 13:33       ` Manuel Selva
2013-07-02 14:49         ` Andi Kleen
2013-07-03  9:06           ` Manuel Selva [this message]
2013-07-03 13:28             ` Andi Kleen
2013-07-03 14:02               ` Manuel Selva
     [not found]   ` <51D28568.8070904@insa-lyon.fr>
2013-07-02 14:41     ` Andi Kleen

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=51D3E9A5.2010804@gmail.com \
    --to=selva.manuel@gmail.com \
    --cc=andi@firstfloor.org \
    --cc=hollmann@in.tum.de \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=manuel.selva@insa-lyon.fr \
    /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.