[lkml]   [2013]   [Aug]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[PATCH] perf: fix intel QPI uncore event definitions

    John McCalpin reports that the "drs_data" and "ncb_data" QPI uncore
    events are missing the "extra bit" and always return zero values unless
    the bit is properly set.

    More details from him:

    According to the Xeon E5-2600 Product Family Uncore Performance
    Monitoring Guide, Table 2-94, about 1/2 of the QPI Link Layer events
    (including the ones that "perf" calls "drs_data" and "ncb_data") require
    that the "extra bit" be set.

    This was confusing for a while -- a note at the bottom of page 94 says
    that the "extra bit" is bit 16 of the control register.
    Unfortunately, Table 2-86 clearly says that bit 16 is reserved and must
    be zero. Looking around a bit, I found that bit 21 appears to be the
    correct "extra bit", and further investigation shows that "perf" actually
    agrees with me:
    [root@c560-003.stampede]# cat /sys/bus/event_source/devices/uncore_qpi_0/format/event

    So the command
    # perf -e "uncore_qpi_0/event=drs_data/"
    Is the same as
    # perf -e "uncore_qpi_0/event=0x02,umask=0x08/"
    While it should be
    # perf -e "uncore_qpi_0/event=0x102,umask=0x08/"

    I confirmed that this last version gives results that agree with the
    amount of data that I expected the STREAM benchmark to move across the QPI
    link in the second (cross-chip) test of the original script.

    Reported-by: John McCalpin <>
    Signed-off-by: Vince Weaver <>

    diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore.c b/arch/x86/kernel/cpu/perf_event_intel_uncore.c
    index cad791d..1fb6c72 100644
    --- a/arch/x86/kernel/cpu/perf_event_intel_uncore.c
    +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.c
    @@ -314,8 +314,8 @@ static struct uncore_event_desc snbep_uncore_imc_events[] = {
    static struct uncore_event_desc snbep_uncore_qpi_events[] = {
    INTEL_UNCORE_EVENT_DESC(clockticks, "event=0x14"),
    INTEL_UNCORE_EVENT_DESC(txl_flits_active, "event=0x00,umask=0x06"),
    - INTEL_UNCORE_EVENT_DESC(drs_data, "event=0x02,umask=0x08"),
    - INTEL_UNCORE_EVENT_DESC(ncb_data, "event=0x03,umask=0x04"),
    + INTEL_UNCORE_EVENT_DESC(drs_data, "event=0x102,umask=0x08"),
    + INTEL_UNCORE_EVENT_DESC(ncb_data, "event=0x103,umask=0x04"),
    { /* end: all zeroes */ },

     \ /
      Last update: 2013-08-02 17:01    [W:0.024 / U:3.560 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site