• Kan Liang's avatar
    perf/x86/intel/uncore: Add new data structures for free running counters · 927b2deb
    Kan Liang authored
    There are a number of free running counters introduced for uncore, which
    provide highly valuable information to a wide array of customers.
    For example, Skylake Server has IIO free running counters to collect
    Input/Output x BW/Utilization.
    
    There is NO event available on the general purpose counters, that is
    exactly the same as the free running counters. The generic uncore code
    needs to be enhanced to support the new counters.
    
    In the uncore document, there is no event-code assigned to free running
    counters. Some events need to be defined to indicate the free running
    counters. The events are encoded as event-code + umask-code.
    
    The event-code for all free running counters is 0xff, which is the same
    as the fixed counters:
    
    - It has not been decided what code will be used for common events on
      future platforms. 0xff is the only one which will definitely not be
      used as any common event-code.
    - Cannot re-use current events on the general purpose counters. Because
      there is NO event available, that is exactly the same as the free
      running counters.
    - Even in the existing codes, the fixed counters for core, that have the
      same event-code, may count different things. Hence, it should not
      surprise the users if the free running counters that share the same
      event-code also count different things.
      Umask will be used to distinguish the counters.
    
    The umask-code is used to distinguish a fixed counter and a free running
    counter, and different types of free running counters.
    
    For fixed counters, the umask-code is 0x0X, where X indicates the index
    of the fixed counter, which starts from 0.
    
     - Compatible with the old event encoding.
    
     - Currently, there is only one fixed counter. There are still 15
       reserved spaces for extension.
    
    For free running counters, the umask-code uses the rest of the space.
    It would follow the format of 0xXY:
    
     - X stands for the type of free running counters, which starts from 1.
    
     - Y stands for the index of free running counters of same type, which
       starts from 0.
    
    - The free running counters do different thing. It can be categorized to
      several types, according to the MSR location, bit width and
      definition. E.g. there are three types of IIO free running counters on
      Skylake server to monitor IO CLOCKS, BANDWIDTH and UTILIZATION  on
      different ports. It makes it easy to locate the free running counter
      of a specific type.
    
    - So far, there are at most 8 counters of each type.  There are still 8
      reserved spaces for extension.
    
    Introducing a new index to indicate the free running counters. Only one
    index is enough for all free running counters. Because the free running
    counters are always active, and the event and free running counter are
    always 1:1 mapped, it does not need extra index to indicate the assigned
    counter.
    
    Introducing a new data structure to store free running counters related
    information for each type. It includes the number of counters, bit
    width, base address, offset between counters and offset between boxes.
    
    Introducing several inline helpers to check index for fixed counter and
    free running counter, validate free running counter event, and retrieve
    the free running counter information according to box and event.
    Signed-off-by: default avatarKan Liang <kan.liang@intel.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: acme@kernel.org
    Cc: eranian@google.com
    Link: http://lkml.kernel.org/r/1525371913-10597-4-git-send-email-kan.liang@intel.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    927b2deb
uncore.h 14.7 KB