Reference Number: 327043-001
23
Intel® Xeon® Processor E5-2600 Product Family Uncore Performance Monitoring
2.3.2
CBo Performance Monitoring Overview
Each of the CBos in the uncore supports event monitoring through four 44-bit wide counters
(Cn_MSR_PMON_CTR{3:0}). Event programming in the CBo is restricted such that each events can
only be measured in certain counters within the CBo. For example, counter 0 is dedicated to
occupancy events. No other counter may be used to capture occupancy events.
• Counter 0: Queue-occupancy-enabled counter that tracks all events
• Counter 1: Basic counter that tracks all but queue occupancy events
• Counter 2: Basic counter that tracks ring events and the occupancy companion event
(COUNTER0_EVENT).
• Counter 3: Basic counter that tracks ring events and the occupancy companion event
(COUNTER0_EVENT).
CBo counter 0 can increment by a maximum of 20 per cycle; counters 1-3 can increment by 1 per
cycle.
Some uncore performance events that monitor transaction activities require additional details that
must be programmed in a filter register. Each Cbo provides one filter register and allows only one
such event be programmed at a given time, see Section 2.3.3.3.
For information on how to setup a monitoring session, refer to
Section 2.1, “Uncore Per-Socket
Performance Monitoring Control”
.
2.3.2.1
Special Note on CBo Occupancy Events
Although only counter 0 supports occupancy events, it is possible to program coounters 1-3 to
monitor the same occupancy event by selecting the “OCCUPANCY_COUNTER0” event code on
counters 1-3.
This allows:
• Thresholding on all four counters.
While one can monitor no more than one queue at a time, it is possible to setup different queue
occupancy thresholds on each of the four counters. For example, if one wanted to monitor the
IRQ, one could setup thresholds of 1, 7, 14, and 18 to get a picture of the time spent at different
occupancies in the IRQ.
• Average Latency and Average Occupancy
It can be useful to monitor the average occupancy in a queue as well as the average number of
items in the queue. One could program counter 0 to accumulate the occupancy, counter 1 with
the queue’s allocations event, and counter 2 with the OCCUPANCY_COUNTER0 event and a
threshold of 1. Latency could then be calculated by counter 0 / counter 1, and occupancy by
counter 0 / counter 2.