[
    {
        "BriefDescription": "Uncore Clocks",
        "Counter": "0,1,2,3",
        "EventName": "UNC_C_CLOCKTICKS",
        "PerPkg": "1",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Counter 0 Occupancy",
        "Counter": "1,2,3",
        "EventCode": "0x1f",
        "EventName": "UNC_C_COUNTER0_OCCUPANCY",
        "PerPkg": "1",
        "PublicDescription": "Since occupancy counts can only be captured in the Cbo's 0 counter, this event allows a user to capture occupancy related information by filtering the Cb0 occupancy count captured in Counter 0.   The filtering available is found in the control register - threshold, invert and edge detect.   E.g. setting threshold to 1 can effectively monitor how many cycles the monitored queue has an entry.",
        "Unit": "CBOX"
    },
    {
        "Counter": "0,1",
        "EventCode": "0x21",
        "EventName": "UNC_C_ISMQ_DRD_MISS_OCC",
        "PerPkg": "1",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Cache Lookups; Data Read Request",
        "Counter": "0,1",
        "EventCode": "0x34",
        "EventName": "UNC_C_LLC_LOOKUP.DATA_READ",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of times the LLC was accessed - this includes code, data, prefetches and hints coming from L2.  This has numerous filters available.  Note the non-standard filtering equation.  This event will count requests that lookup the cache multiple times with multiple increments.  One must ALWAYS set filter mask bit 0 and select a state or states to match.  Otherwise, the event will count nothing.   CBoGlCtrl[22:18] bits correspond to [FMESI] state.",
        "UMask": "0x3",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Cache Lookups; RTID",
        "Counter": "0,1",
        "EventCode": "0x34",
        "EventName": "UNC_C_LLC_LOOKUP.NID",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of times the LLC was accessed - this includes code, data, prefetches and hints coming from L2.  This has numerous filters available.  Note the non-standard filtering equation.  This event will count requests that lookup the cache multiple times with multiple increments.  One must ALWAYS set filter mask bit 0 and select a state or states to match.  Otherwise, the event will count nothing.   CBoGlCtrl[22:18] bits correspond to [FMESI] state.",
        "UMask": "0x41",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Cache Lookups; External Snoop Request",
        "Counter": "0,1",
        "EventCode": "0x34",
        "EventName": "UNC_C_LLC_LOOKUP.REMOTE_SNOOP",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of times the LLC was accessed - this includes code, data, prefetches and hints coming from L2.  This has numerous filters available.  Note the non-standard filtering equation.  This event will count requests that lookup the cache multiple times with multiple increments.  One must ALWAYS set filter mask bit 0 and select a state or states to match.  Otherwise, the event will count nothing.   CBoGlCtrl[22:18] bits correspond to [FMESI] state.",
        "UMask": "0x9",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Cache Lookups; Write Requests",
        "Counter": "0,1",
        "EventCode": "0x34",
        "EventName": "UNC_C_LLC_LOOKUP.WRITE",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of times the LLC was accessed - this includes code, data, prefetches and hints coming from L2.  This has numerous filters available.  Note the non-standard filtering equation.  This event will count requests that lookup the cache multiple times with multiple increments.  One must ALWAYS set filter mask bit 0 and select a state or states to match.  Otherwise, the event will count nothing.   CBoGlCtrl[22:18] bits correspond to [FMESI] state.",
        "UMask": "0x5",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Lines Victimized; Lines in E state",
        "Counter": "0,1",
        "EventCode": "0x37",
        "EventName": "UNC_C_LLC_VICTIMS.E_STATE",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of lines that were victimized on a fill.  This can be filtered by the state that the line was in.",
        "UMask": "0x2",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Lines Victimized",
        "Counter": "0,1",
        "EventCode": "0x37",
        "EventName": "UNC_C_LLC_VICTIMS.MISS",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of lines that were victimized on a fill.  This can be filtered by the state that the line was in.",
        "UMask": "0x8",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Lines Victimized; Lines in M state",
        "Counter": "0,1",
        "EventCode": "0x37",
        "EventName": "UNC_C_LLC_VICTIMS.M_STATE",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of lines that were victimized on a fill.  This can be filtered by the state that the line was in.",
        "UMask": "0x1",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Lines Victimized; Victimized Lines that Match NID",
        "Counter": "0,1",
        "EventCode": "0x37",
        "EventName": "UNC_C_LLC_VICTIMS.NID",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of lines that were victimized on a fill.  This can be filtered by the state that the line was in.",
        "UMask": "0x40",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Lines Victimized; Lines in S State",
        "Counter": "0,1",
        "EventCode": "0x37",
        "EventName": "UNC_C_LLC_VICTIMS.S_STATE",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of lines that were victimized on a fill.  This can be filtered by the state that the line was in.",
        "UMask": "0x4",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Cbo Misc; RFO HitS",
        "Counter": "0,1",
        "EventCode": "0x39",
        "EventName": "UNC_C_MISC.RFO_HIT_S",
        "PerPkg": "1",
        "PublicDescription": "Miscellaneous events in the Cbo.",
        "UMask": "0x8",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Cbo Misc; Silent Snoop Eviction",
        "Counter": "0,1",
        "EventCode": "0x39",
        "EventName": "UNC_C_MISC.RSPI_WAS_FSE",
        "PerPkg": "1",
        "PublicDescription": "Miscellaneous events in the Cbo.",
        "UMask": "0x1",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Cbo Misc",
        "Counter": "0,1",
        "EventCode": "0x39",
        "EventName": "UNC_C_MISC.STARTED",
        "PerPkg": "1",
        "PublicDescription": "Miscellaneous events in the Cbo.",
        "UMask": "0x4",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Cbo Misc; Write Combining Aliasing",
        "Counter": "0,1",
        "EventCode": "0x39",
        "EventName": "UNC_C_MISC.WC_ALIASING",
        "PerPkg": "1",
        "PublicDescription": "Miscellaneous events in the Cbo.",
        "UMask": "0x2",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "AD Ring In Use; Down and Even",
        "Counter": "2,3",
        "EventCode": "0x1b",
        "EventName": "UNC_C_RING_AD_USED.DOWN_EVEN",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles that the AD ring is being used at this ring stop.  This includes when packets are passing by and when packets are being sunk, but does not include when packets are being sent from the ring stop.  We really have two rings in JKT -- a clockwise ring and a counter-clockwise ring.  On the left side of the ring, the 'UP' direction is on the clockwise ring and 'DN' is on the counter-clockwise ring.  On the right side of the ring, this is reversed.  The first half of the CBos are on the left side of the ring, and the 2nd half are on the right side of the ring.  In other words (for example), in a 4c part, Cbo 0 UP AD is NOT the same ring as CBo 2 UP AD because they are on opposite sides of the ring.",
        "UMask": "0x4",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "AD Ring In Use; Down and Odd",
        "Counter": "2,3",
        "EventCode": "0x1b",
        "EventName": "UNC_C_RING_AD_USED.DOWN_ODD",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles that the AD ring is being used at this ring stop.  This includes when packets are passing by and when packets are being sunk, but does not include when packets are being sent from the ring stop.  We really have two rings in JKT -- a clockwise ring and a counter-clockwise ring.  On the left side of the ring, the 'UP' direction is on the clockwise ring and 'DN' is on the counter-clockwise ring.  On the right side of the ring, this is reversed.  The first half of the CBos are on the left side of the ring, and the 2nd half are on the right side of the ring.  In other words (for example), in a 4c part, Cbo 0 UP AD is NOT the same ring as CBo 2 UP AD because they are on opposite sides of the ring.",
        "UMask": "0x8",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "AD Ring In Use; Up and Even",
        "Counter": "2,3",
        "EventCode": "0x1b",
        "EventName": "UNC_C_RING_AD_USED.UP_EVEN",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles that the AD ring is being used at this ring stop.  This includes when packets are passing by and when packets are being sunk, but does not include when packets are being sent from the ring stop.  We really have two rings in JKT -- a clockwise ring and a counter-clockwise ring.  On the left side of the ring, the 'UP' direction is on the clockwise ring and 'DN' is on the counter-clockwise ring.  On the right side of the ring, this is reversed.  The first half of the CBos are on the left side of the ring, and the 2nd half are on the right side of the ring.  In other words (for example), in a 4c part, Cbo 0 UP AD is NOT the same ring as CBo 2 UP AD because they are on opposite sides of the ring.",
        "UMask": "0x1",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "AD Ring In Use; Up and Odd",
        "Counter": "2,3",
        "EventCode": "0x1b",
        "EventName": "UNC_C_RING_AD_USED.UP_ODD",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles that the AD ring is being used at this ring stop.  This includes when packets are passing by and when packets are being sunk, but does not include when packets are being sent from the ring stop.  We really have two rings in JKT -- a clockwise ring and a counter-clockwise ring.  On the left side of the ring, the 'UP' direction is on the clockwise ring and 'DN' is on the counter-clockwise ring.  On the right side of the ring, this is reversed.  The first half of the CBos are on the left side of the ring, and the 2nd half are on the right side of the ring.  In other words (for example), in a 4c part, Cbo 0 UP AD is NOT the same ring as CBo 2 UP AD because they are on opposite sides of the ring.",
        "UMask": "0x2",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "AK Ring In Use; Down and Even",
        "Counter": "2,3",
        "EventCode": "0x1c",
        "EventName": "UNC_C_RING_AK_USED.DOWN_EVEN",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles that the AK ring is being used at this ring stop.  This includes when packets are passing by and when packets are being sunk, but does not include when packets are being sent from the ring stop.We really have two rings in JKT -- a clockwise ring and a counter-clockwise ring.  On the left side of the ring, the 'UP' direction is on the clockwise ring and 'DN' is on the counter-clockwise ring.  On the right side of the ring, this is reversed.  The first half of the CBos are on the left side of the ring, and the 2nd half are on the right side of the ring.  In other words (for example), in a 4c part, Cbo 0 UP AD is NOT the same ring as CBo 2 UP AD because they are on opposite sides of the ring.",
        "UMask": "0x4",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "AK Ring In Use; Down and Odd",
        "Counter": "2,3",
        "EventCode": "0x1c",
        "EventName": "UNC_C_RING_AK_USED.DOWN_ODD",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles that the AK ring is being used at this ring stop.  This includes when packets are passing by and when packets are being sunk, but does not include when packets are being sent from the ring stop.We really have two rings in JKT -- a clockwise ring and a counter-clockwise ring.  On the left side of the ring, the 'UP' direction is on the clockwise ring and 'DN' is on the counter-clockwise ring.  On the right side of the ring, this is reversed.  The first half of the CBos are on the left side of the ring, and the 2nd half are on the right side of the ring.  In other words (for example), in a 4c part, Cbo 0 UP AD is NOT the same ring as CBo 2 UP AD because they are on opposite sides of the ring.",
        "UMask": "0x8",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "AK Ring In Use; Up and Even",
        "Counter": "2,3",
        "EventCode": "0x1c",
        "EventName": "UNC_C_RING_AK_USED.UP_EVEN",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles that the AK ring is being used at this ring stop.  This includes when packets are passing by and when packets are being sunk, but does not include when packets are being sent from the ring stop.We really have two rings in JKT -- a clockwise ring and a counter-clockwise ring.  On the left side of the ring, the 'UP' direction is on the clockwise ring and 'DN' is on the counter-clockwise ring.  On the right side of the ring, this is reversed.  The first half of the CBos are on the left side of the ring, and the 2nd half are on the right side of the ring.  In other words (for example), in a 4c part, Cbo 0 UP AD is NOT the same ring as CBo 2 UP AD because they are on opposite sides of the ring.",
        "UMask": "0x1",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "AK Ring In Use; Up and Odd",
        "Counter": "2,3",
        "EventCode": "0x1c",
        "EventName": "UNC_C_RING_AK_USED.UP_ODD",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles that the AK ring is being used at this ring stop.  This includes when packets are passing by and when packets are being sunk, but does not include when packets are being sent from the ring stop.We really have two rings in JKT -- a clockwise ring and a counter-clockwise ring.  On the left side of the ring, the 'UP' direction is on the clockwise ring and 'DN' is on the counter-clockwise ring.  On the right side of the ring, this is reversed.  The first half of the CBos are on the left side of the ring, and the 2nd half are on the right side of the ring.  In other words (for example), in a 4c part, Cbo 0 UP AD is NOT the same ring as CBo 2 UP AD because they are on opposite sides of the ring.",
        "UMask": "0x2",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "BL Ring in Use; Down and Even",
        "Counter": "2,3",
        "EventCode": "0x1d",
        "EventName": "UNC_C_RING_BL_USED.DOWN_EVEN",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles that the BL ring is being used at this ring stop.  This includes when packets are passing by and when packets are being sunk, but does not include when packets are being sent from  the ring stop.We really have two rings in JKT -- a clockwise ring and a counter-clockwise ring.  On the left side of the ring, the 'UP' direction is on the clockwise ring and 'DN' is on the counter-clockwise ring.  On the right side of the ring, this is reversed.  The first half of the CBos are on the left side of the ring, and the 2nd half are on the right side of the ring.  In other words (for example), in a 4c part, Cbo 0 UP AD is NOT the same ring as CBo 2 UP AD because they are on opposite sides of the ring.",
        "UMask": "0x4",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "BL Ring in Use; Down and Odd",
        "Counter": "2,3",
        "EventCode": "0x1d",
        "EventName": "UNC_C_RING_BL_USED.DOWN_ODD",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles that the BL ring is being used at this ring stop.  This includes when packets are passing by and when packets are being sunk, but does not include when packets are being sent from  the ring stop.We really have two rings in JKT -- a clockwise ring and a counter-clockwise ring.  On the left side of the ring, the 'UP' direction is on the clockwise ring and 'DN' is on the counter-clockwise ring.  On the right side of the ring, this is reversed.  The first half of the CBos are on the left side of the ring, and the 2nd half are on the right side of the ring.  In other words (for example), in a 4c part, Cbo 0 UP AD is NOT the same ring as CBo 2 UP AD because they are on opposite sides of the ring.",
        "UMask": "0x8",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "BL Ring in Use; Up and Even",
        "Counter": "2,3",
        "EventCode": "0x1d",
        "EventName": "UNC_C_RING_BL_USED.UP_EVEN",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles that the BL ring is being used at this ring stop.  This includes when packets are passing by and when packets are being sunk, but does not include when packets are being sent from  the ring stop.We really have two rings in JKT -- a clockwise ring and a counter-clockwise ring.  On the left side of the ring, the 'UP' direction is on the clockwise ring and 'DN' is on the counter-clockwise ring.  On the right side of the ring, this is reversed.  The first half of the CBos are on the left side of the ring, and the 2nd half are on the right side of the ring.  In other words (for example), in a 4c part, Cbo 0 UP AD is NOT the same ring as CBo 2 UP AD because they are on opposite sides of the ring.",
        "UMask": "0x1",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "BL Ring in Use; Up and Odd",
        "Counter": "2,3",
        "EventCode": "0x1d",
        "EventName": "UNC_C_RING_BL_USED.UP_ODD",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles that the BL ring is being used at this ring stop.  This includes when packets are passing by and when packets are being sunk, but does not include when packets are being sent from  the ring stop.We really have two rings in JKT -- a clockwise ring and a counter-clockwise ring.  On the left side of the ring, the 'UP' direction is on the clockwise ring and 'DN' is on the counter-clockwise ring.  On the right side of the ring, this is reversed.  The first half of the CBos are on the left side of the ring, and the 2nd half are on the right side of the ring.  In other words (for example), in a 4c part, Cbo 0 UP AD is NOT the same ring as CBo 2 UP AD because they are on opposite sides of the ring.",
        "UMask": "0x2",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Number of LLC responses that bounced on the Ring.; Acknowledgements to core",
        "Counter": "0,1",
        "EventCode": "0x5",
        "EventName": "UNC_C_RING_BOUNCES.AK_CORE",
        "PerPkg": "1",
        "UMask": "0x2",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Number of LLC responses that bounced on the Ring.; Data Responses to core",
        "Counter": "0,1",
        "EventCode": "0x5",
        "EventName": "UNC_C_RING_BOUNCES.BL_CORE",
        "PerPkg": "1",
        "UMask": "0x4",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Number of LLC responses that bounced on the Ring.; Snoops of processor's cache.",
        "Counter": "0,1",
        "EventCode": "0x5",
        "EventName": "UNC_C_RING_BOUNCES.IV_CORE",
        "PerPkg": "1",
        "UMask": "0x8",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "BL Ring in Use; Any",
        "Counter": "2,3",
        "EventCode": "0x1e",
        "EventName": "UNC_C_RING_IV_USED.ANY",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles that the IV ring is being used at this ring stop.  This includes when packets are passing by and when packets are being sunk, but does not include when packets are being sent from the ring stop.  There is only 1 IV ring in JKT.  Therefore, if one wants to monitor the 'Even' ring, they should select both UP_EVEN and DN_EVEN.  To monitor the 'Odd' ring, they should select both UP_ODD and DN_ODD.",
        "UMask": "0xf",
        "Unit": "CBOX"
    },
    {
        "Counter": "0,1",
        "EventCode": "0x6",
        "EventName": "UNC_C_RING_SINK_STARVED.AD_CACHE",
        "PerPkg": "1",
        "UMask": "0x1",
        "Unit": "CBOX"
    },
    {
        "Counter": "0,1",
        "EventCode": "0x6",
        "EventName": "UNC_C_RING_SINK_STARVED.AK_CORE",
        "PerPkg": "1",
        "UMask": "0x2",
        "Unit": "CBOX"
    },
    {
        "Counter": "0,1",
        "EventCode": "0x6",
        "EventName": "UNC_C_RING_SINK_STARVED.BL_CORE",
        "PerPkg": "1",
        "UMask": "0x4",
        "Unit": "CBOX"
    },
    {
        "Counter": "0,1",
        "EventCode": "0x6",
        "EventName": "UNC_C_RING_SINK_STARVED.IV_CORE",
        "PerPkg": "1",
        "UMask": "0x8",
        "Unit": "CBOX"
    },
    {
        "Counter": "0,1",
        "EventCode": "0x7",
        "EventName": "UNC_C_RING_SRC_THRTL",
        "PerPkg": "1",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Ingress Arbiter Blocking Cycles; IRQ",
        "Counter": "0,1",
        "EventCode": "0x12",
        "EventName": "UNC_C_RxR_EXT_STARVED.IPQ",
        "PerPkg": "1",
        "PublicDescription": "Counts cycles in external starvation.  This occurs when one of the ingress queues is being starved by the other queues.",
        "UMask": "0x2",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Ingress Arbiter Blocking Cycles; IPQ",
        "Counter": "0,1",
        "EventCode": "0x12",
        "EventName": "UNC_C_RxR_EXT_STARVED.IRQ",
        "PerPkg": "1",
        "PublicDescription": "Counts cycles in external starvation.  This occurs when one of the ingress queues is being starved by the other queues.",
        "UMask": "0x1",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Ingress Arbiter Blocking Cycles; ISMQ",
        "Counter": "0,1",
        "EventCode": "0x12",
        "EventName": "UNC_C_RxR_EXT_STARVED.ISMQ",
        "PerPkg": "1",
        "PublicDescription": "Counts cycles in external starvation.  This occurs when one of the ingress queues is being starved by the other queues.",
        "UMask": "0x4",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Ingress Arbiter Blocking Cycles; ISMQ_BID",
        "Counter": "0,1",
        "EventCode": "0x12",
        "EventName": "UNC_C_RxR_EXT_STARVED.ISMQ_BIDS",
        "PerPkg": "1",
        "PublicDescription": "Counts cycles in external starvation.  This occurs when one of the ingress queues is being starved by the other queues.",
        "UMask": "0x8",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Ingress Allocations; IPQ",
        "Counter": "0,1",
        "EventCode": "0x13",
        "EventName": "UNC_C_RxR_INSERTS.IPQ",
        "PerPkg": "1",
        "PublicDescription": "Counts number of allocations per cycle into the specified Ingress queue.",
        "UMask": "0x4",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Ingress Allocations; IRQ",
        "Counter": "0,1",
        "EventCode": "0x13",
        "EventName": "UNC_C_RxR_INSERTS.IRQ",
        "PerPkg": "1",
        "PublicDescription": "Counts number of allocations per cycle into the specified Ingress queue.",
        "UMask": "0x1",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Ingress Allocations; IRQ Rejected",
        "Counter": "0,1",
        "EventCode": "0x13",
        "EventName": "UNC_C_RxR_INSERTS.IRQ_REJECTED",
        "PerPkg": "1",
        "PublicDescription": "Counts number of allocations per cycle into the specified Ingress queue.",
        "UMask": "0x2",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Ingress Allocations; VFIFO",
        "Counter": "0,1",
        "EventCode": "0x13",
        "EventName": "UNC_C_RxR_INSERTS.VFIFO",
        "PerPkg": "1",
        "PublicDescription": "Counts number of allocations per cycle into the specified Ingress queue.",
        "UMask": "0x10",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Ingress Internal Starvation Cycles; IPQ",
        "Counter": "0,1",
        "EventCode": "0x14",
        "EventName": "UNC_C_RxR_INT_STARVED.IPQ",
        "PerPkg": "1",
        "PublicDescription": "Counts cycles in internal starvation.  This occurs when one (or more) of the entries in the ingress queue are being starved out by other entries in that queue.",
        "UMask": "0x4",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Ingress Internal Starvation Cycles; IRQ",
        "Counter": "0,1",
        "EventCode": "0x14",
        "EventName": "UNC_C_RxR_INT_STARVED.IRQ",
        "PerPkg": "1",
        "PublicDescription": "Counts cycles in internal starvation.  This occurs when one (or more) of the entries in the ingress queue are being starved out by other entries in that queue.",
        "UMask": "0x1",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Ingress Internal Starvation Cycles; ISMQ",
        "Counter": "0,1",
        "EventCode": "0x14",
        "EventName": "UNC_C_RxR_INT_STARVED.ISMQ",
        "PerPkg": "1",
        "PublicDescription": "Counts cycles in internal starvation.  This occurs when one (or more) of the entries in the ingress queue are being starved out by other entries in that queue.",
        "UMask": "0x8",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Probe Queue Retries; Address Conflict",
        "Counter": "0,1",
        "EventCode": "0x31",
        "EventName": "UNC_C_RxR_IPQ_RETRY.ADDR_CONFLICT",
        "PerPkg": "1",
        "PublicDescription": "Number of times a snoop (probe) request had to retry.  Filters exist to cover some of the common cases retries.",
        "UMask": "0x4",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Probe Queue Retries; Any Reject",
        "Counter": "0,1",
        "EventCode": "0x31",
        "EventName": "UNC_C_RxR_IPQ_RETRY.ANY",
        "PerPkg": "1",
        "PublicDescription": "Number of times a snoop (probe) request had to retry.  Filters exist to cover some of the common cases retries.",
        "UMask": "0x1",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Probe Queue Retries; No Egress Credits",
        "Counter": "0,1",
        "EventCode": "0x31",
        "EventName": "UNC_C_RxR_IPQ_RETRY.FULL",
        "PerPkg": "1",
        "PublicDescription": "Number of times a snoop (probe) request had to retry.  Filters exist to cover some of the common cases retries.",
        "UMask": "0x2",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Probe Queue Retries; No QPI Credits",
        "Counter": "0,1",
        "EventCode": "0x31",
        "EventName": "UNC_C_RxR_IPQ_RETRY.QPI_CREDITS",
        "PerPkg": "1",
        "PublicDescription": "Number of times a snoop (probe) request had to retry.  Filters exist to cover some of the common cases retries.",
        "UMask": "0x10",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Ingress Request Queue Rejects; Address Conflict",
        "Counter": "0,1",
        "EventCode": "0x32",
        "EventName": "UNC_C_RxR_IRQ_RETRY.ADDR_CONFLICT",
        "PerPkg": "1",
        "UMask": "0x4",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Ingress Request Queue Rejects; Any Reject",
        "Counter": "0,1",
        "EventCode": "0x32",
        "EventName": "UNC_C_RxR_IRQ_RETRY.ANY",
        "PerPkg": "1",
        "UMask": "0x1",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Ingress Request Queue Rejects; No Egress Credits",
        "Counter": "0,1",
        "EventCode": "0x32",
        "EventName": "UNC_C_RxR_IRQ_RETRY.FULL",
        "PerPkg": "1",
        "UMask": "0x2",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Ingress Request Queue Rejects; No QPI Credits",
        "Counter": "0,1",
        "EventCode": "0x32",
        "EventName": "UNC_C_RxR_IRQ_RETRY.QPI_CREDITS",
        "PerPkg": "1",
        "UMask": "0x10",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Ingress Request Queue Rejects; No RTIDs",
        "Counter": "0,1",
        "EventCode": "0x32",
        "EventName": "UNC_C_RxR_IRQ_RETRY.RTID",
        "PerPkg": "1",
        "UMask": "0x8",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "ISMQ Retries; Any Reject",
        "Counter": "0,1",
        "EventCode": "0x33",
        "EventName": "UNC_C_RxR_ISMQ_RETRY.ANY",
        "PerPkg": "1",
        "PublicDescription": "Number of times a transaction flowing through the ISMQ had to retry.  Transaction pass through the ISMQ as responses for requests that already exist in the Cbo.  Some examples include: when data is returned or when snoop responses come back from the cores.",
        "UMask": "0x1",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "ISMQ Retries; No Egress Credits",
        "Counter": "0,1",
        "EventCode": "0x33",
        "EventName": "UNC_C_RxR_ISMQ_RETRY.FULL",
        "PerPkg": "1",
        "PublicDescription": "Number of times a transaction flowing through the ISMQ had to retry.  Transaction pass through the ISMQ as responses for requests that already exist in the Cbo.  Some examples include: when data is returned or when snoop responses come back from the cores.",
        "UMask": "0x2",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "ISMQ Retries; No IIO Credits",
        "Counter": "0,1",
        "EventCode": "0x33",
        "EventName": "UNC_C_RxR_ISMQ_RETRY.IIO_CREDITS",
        "PerPkg": "1",
        "PublicDescription": "Number of times a transaction flowing through the ISMQ had to retry.  Transaction pass through the ISMQ as responses for requests that already exist in the Cbo.  Some examples include: when data is returned or when snoop responses come back from the cores.",
        "UMask": "0x20",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "ISMQ Retries; No QPI Credits",
        "Counter": "0,1",
        "EventCode": "0x33",
        "EventName": "UNC_C_RxR_ISMQ_RETRY.QPI_CREDITS",
        "PerPkg": "1",
        "PublicDescription": "Number of times a transaction flowing through the ISMQ had to retry.  Transaction pass through the ISMQ as responses for requests that already exist in the Cbo.  Some examples include: when data is returned or when snoop responses come back from the cores.",
        "UMask": "0x10",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "ISMQ Retries; No RTIDs",
        "Counter": "0,1",
        "EventCode": "0x33",
        "EventName": "UNC_C_RxR_ISMQ_RETRY.RTID",
        "PerPkg": "1",
        "PublicDescription": "Number of times a transaction flowing through the ISMQ had to retry.  Transaction pass through the ISMQ as responses for requests that already exist in the Cbo.  Some examples include: when data is returned or when snoop responses come back from the cores.",
        "UMask": "0x8",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Ingress Occupancy; IPQ",
        "Counter": "0",
        "EventCode": "0x11",
        "EventName": "UNC_C_RxR_OCCUPANCY.IPQ",
        "PerPkg": "1",
        "PublicDescription": "Counts number of entries in the specified Ingress queue in each cycle.",
        "UMask": "0x4",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Ingress Occupancy; IRQ",
        "Counter": "0",
        "EventCode": "0x11",
        "EventName": "UNC_C_RxR_OCCUPANCY.IRQ",
        "PerPkg": "1",
        "PublicDescription": "Counts number of entries in the specified Ingress queue in each cycle.",
        "UMask": "0x1",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Ingress Occupancy; IRQ Rejected",
        "Counter": "0",
        "EventCode": "0x11",
        "EventName": "UNC_C_RxR_OCCUPANCY.IRQ_REJECTED",
        "PerPkg": "1",
        "PublicDescription": "Counts number of entries in the specified Ingress queue in each cycle.",
        "UMask": "0x2",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Ingress Occupancy; VFIFO",
        "Counter": "0",
        "EventCode": "0x11",
        "EventName": "UNC_C_RxR_OCCUPANCY.VFIFO",
        "PerPkg": "1",
        "PublicDescription": "Counts number of entries in the specified Ingress queue in each cycle.",
        "UMask": "0x10",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "TOR Inserts; Evictions",
        "Counter": "0,1",
        "EventCode": "0x35",
        "EventName": "UNC_C_TOR_INSERTS.EVICTION",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of entries successfully inserted into the TOR that match  qualifications specified by the subevent.  There are a number of subevent 'filters' but only a subset of the subevent combinations are valid.  Subevents that require an opcode or NID match require the Cn_MSR_PMON_BOX_FILTER.{opc, nid} field to be set.  If, for example, one wanted to count DRD Local Misses, one should select 'MISS_OPC_MATCH' and set Cn_MSR_PMON_BOX_FILTER.opc  to DRD (0x182).",
        "UMask": "0x4",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "TOR Inserts; Miss All",
        "Counter": "0,1",
        "EventCode": "0x35",
        "EventName": "UNC_C_TOR_INSERTS.MISS_ALL",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of entries successfully inserted into the TOR that match  qualifications specified by the subevent.  There are a number of subevent 'filters' but only a subset of the subevent combinations are valid.  Subevents that require an opcode or NID match require the Cn_MSR_PMON_BOX_FILTER.{opc, nid} field to be set.  If, for example, one wanted to count DRD Local Misses, one should select 'MISS_OPC_MATCH' and set Cn_MSR_PMON_BOX_FILTER.opc  to DRD (0x182).",
        "UMask": "0xa",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "TOR Inserts; Miss Opcode Match",
        "Counter": "0,1",
        "EventCode": "0x35",
        "EventName": "UNC_C_TOR_INSERTS.MISS_OPCODE",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of entries successfully inserted into the TOR that match  qualifications specified by the subevent.  There are a number of subevent 'filters' but only a subset of the subevent combinations are valid.  Subevents that require an opcode or NID match require the Cn_MSR_PMON_BOX_FILTER.{opc, nid} field to be set.  If, for example, one wanted to count DRD Local Misses, one should select 'MISS_OPC_MATCH' and set Cn_MSR_PMON_BOX_FILTER.opc  to DRD (0x182).",
        "UMask": "0x3",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "TOR Inserts; NID Matched",
        "Counter": "0,1",
        "EventCode": "0x35",
        "EventName": "UNC_C_TOR_INSERTS.NID_ALL",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of entries successfully inserted into the TOR that match  qualifications specified by the subevent.  There are a number of subevent 'filters' but only a subset of the subevent combinations are valid.  Subevents that require an opcode or NID match require the Cn_MSR_PMON_BOX_FILTER.{opc, nid} field to be set.  If, for example, one wanted to count DRD Local Misses, one should select 'MISS_OPC_MATCH' and set Cn_MSR_PMON_BOX_FILTER.opc  to DRD (0x182).",
        "UMask": "0x48",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "TOR Inserts; NID Matched Evictions",
        "Counter": "0,1",
        "EventCode": "0x35",
        "EventName": "UNC_C_TOR_INSERTS.NID_EVICTION",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of entries successfully inserted into the TOR that match  qualifications specified by the subevent.  There are a number of subevent 'filters' but only a subset of the subevent combinations are valid.  Subevents that require an opcode or NID match require the Cn_MSR_PMON_BOX_FILTER.{opc, nid} field to be set.  If, for example, one wanted to count DRD Local Misses, one should select 'MISS_OPC_MATCH' and set Cn_MSR_PMON_BOX_FILTER.opc  to DRD (0x182).",
        "UMask": "0x44",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "TOR Inserts; NID Matched Miss All",
        "Counter": "0,1",
        "EventCode": "0x35",
        "EventName": "UNC_C_TOR_INSERTS.NID_MISS_ALL",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of entries successfully inserted into the TOR that match  qualifications specified by the subevent.  There are a number of subevent 'filters' but only a subset of the subevent combinations are valid.  Subevents that require an opcode or NID match require the Cn_MSR_PMON_BOX_FILTER.{opc, nid} field to be set.  If, for example, one wanted to count DRD Local Misses, one should select 'MISS_OPC_MATCH' and set Cn_MSR_PMON_BOX_FILTER.opc  to DRD (0x182).",
        "UMask": "0x4a",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "TOR Inserts; NID and Opcode Matched Miss",
        "Counter": "0,1",
        "EventCode": "0x35",
        "EventName": "UNC_C_TOR_INSERTS.NID_MISS_OPCODE",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of entries successfully inserted into the TOR that match  qualifications specified by the subevent.  There are a number of subevent 'filters' but only a subset of the subevent combinations are valid.  Subevents that require an opcode or NID match require the Cn_MSR_PMON_BOX_FILTER.{opc, nid} field to be set.  If, for example, one wanted to count DRD Local Misses, one should select 'MISS_OPC_MATCH' and set Cn_MSR_PMON_BOX_FILTER.opc  to DRD (0x182).",
        "UMask": "0x43",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "TOR Inserts; NID and Opcode Matched",
        "Counter": "0,1",
        "EventCode": "0x35",
        "EventName": "UNC_C_TOR_INSERTS.NID_OPCODE",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of entries successfully inserted into the TOR that match  qualifications specified by the subevent.  There are a number of subevent 'filters' but only a subset of the subevent combinations are valid.  Subevents that require an opcode or NID match require the Cn_MSR_PMON_BOX_FILTER.{opc, nid} field to be set.  If, for example, one wanted to count DRD Local Misses, one should select 'MISS_OPC_MATCH' and set Cn_MSR_PMON_BOX_FILTER.opc  to DRD (0x182).",
        "UMask": "0x41",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "TOR Inserts; NID Matched Writebacks",
        "Counter": "0,1",
        "EventCode": "0x35",
        "EventName": "UNC_C_TOR_INSERTS.NID_WB",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of entries successfully inserted into the TOR that match  qualifications specified by the subevent.  There are a number of subevent 'filters' but only a subset of the subevent combinations are valid.  Subevents that require an opcode or NID match require the Cn_MSR_PMON_BOX_FILTER.{opc, nid} field to be set.  If, for example, one wanted to count DRD Local Misses, one should select 'MISS_OPC_MATCH' and set Cn_MSR_PMON_BOX_FILTER.opc  to DRD (0x182).",
        "UMask": "0x50",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "TOR Inserts; Opcode Match",
        "Counter": "0,1",
        "EventCode": "0x35",
        "EventName": "UNC_C_TOR_INSERTS.OPCODE",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of entries successfully inserted into the TOR that match  qualifications specified by the subevent.  There are a number of subevent 'filters' but only a subset of the subevent combinations are valid.  Subevents that require an opcode or NID match require the Cn_MSR_PMON_BOX_FILTER.{opc, nid} field to be set.  If, for example, one wanted to count DRD Local Misses, one should select 'MISS_OPC_MATCH' and set Cn_MSR_PMON_BOX_FILTER.opc  to DRD (0x182).",
        "UMask": "0x1",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "TOR Inserts; Writebacks",
        "Counter": "0,1",
        "EventCode": "0x35",
        "EventName": "UNC_C_TOR_INSERTS.WB",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of entries successfully inserted into the TOR that match  qualifications specified by the subevent.  There are a number of subevent 'filters' but only a subset of the subevent combinations are valid.  Subevents that require an opcode or NID match require the Cn_MSR_PMON_BOX_FILTER.{opc, nid} field to be set.  If, for example, one wanted to count DRD Local Misses, one should select 'MISS_OPC_MATCH' and set Cn_MSR_PMON_BOX_FILTER.opc  to DRD (0x182).",
        "UMask": "0x10",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "TOR Occupancy; Any",
        "Counter": "0",
        "EventCode": "0x36",
        "EventName": "UNC_C_TOR_OCCUPANCY.ALL",
        "PerPkg": "1",
        "PublicDescription": "For each cycle, this event accumulates the number of valid entries in the TOR that match qualifications specified by the subevent.   There are a number of subevent 'filters' but only a subset of the subevent combinations are valid.  Subevents that require an opcode or NID match require the Cn_MSR_PMON_BOX_FILTER.{opc, nid} field to be set.  If, for example, one wanted to count DRD Local Misses, one should select 'MISS_OPC_MATCH' and set Cn_MSR_PMON_BOX_FILTER.opc to DRD (0x182)",
        "UMask": "0x8",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "TOR Occupancy; Evictions",
        "Counter": "0",
        "EventCode": "0x36",
        "EventName": "UNC_C_TOR_OCCUPANCY.EVICTION",
        "PerPkg": "1",
        "PublicDescription": "For each cycle, this event accumulates the number of valid entries in the TOR that match qualifications specified by the subevent.   There are a number of subevent 'filters' but only a subset of the subevent combinations are valid.  Subevents that require an opcode or NID match require the Cn_MSR_PMON_BOX_FILTER.{opc, nid} field to be set.  If, for example, one wanted to count DRD Local Misses, one should select 'MISS_OPC_MATCH' and set Cn_MSR_PMON_BOX_FILTER.opc to DRD (0x182)",
        "UMask": "0x4",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "TOR Occupancy; Miss All",
        "Counter": "0",
        "EventCode": "0x36",
        "EventName": "UNC_C_TOR_OCCUPANCY.MISS_ALL",
        "PerPkg": "1",
        "PublicDescription": "For each cycle, this event accumulates the number of valid entries in the TOR that match qualifications specified by the subevent.   There are a number of subevent 'filters' but only a subset of the subevent combinations are valid.  Subevents that require an opcode or NID match require the Cn_MSR_PMON_BOX_FILTER.{opc, nid} field to be set.  If, for example, one wanted to count DRD Local Misses, one should select 'MISS_OPC_MATCH' and set Cn_MSR_PMON_BOX_FILTER.opc to DRD (0x182)",
        "UMask": "0xa",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "TOR Occupancy; Miss Opcode Match",
        "Counter": "0",
        "EventCode": "0x36",
        "EventName": "UNC_C_TOR_OCCUPANCY.MISS_OPCODE",
        "PerPkg": "1",
        "PublicDescription": "For each cycle, this event accumulates the number of valid entries in the TOR that match qualifications specified by the subevent.   There are a number of subevent 'filters' but only a subset of the subevent combinations are valid.  Subevents that require an opcode or NID match require the Cn_MSR_PMON_BOX_FILTER.{opc, nid} field to be set.  If, for example, one wanted to count DRD Local Misses, one should select 'MISS_OPC_MATCH' and set Cn_MSR_PMON_BOX_FILTER.opc to DRD (0x182)",
        "UMask": "0x3",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "TOR Occupancy; NID Matched",
        "Counter": "0",
        "EventCode": "0x36",
        "EventName": "UNC_C_TOR_OCCUPANCY.NID_ALL",
        "PerPkg": "1",
        "PublicDescription": "For each cycle, this event accumulates the number of valid entries in the TOR that match qualifications specified by the subevent.   There are a number of subevent 'filters' but only a subset of the subevent combinations are valid.  Subevents that require an opcode or NID match require the Cn_MSR_PMON_BOX_FILTER.{opc, nid} field to be set.  If, for example, one wanted to count DRD Local Misses, one should select 'MISS_OPC_MATCH' and set Cn_MSR_PMON_BOX_FILTER.opc to DRD (0x182)",
        "UMask": "0x48",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "TOR Occupancy; NID Matched Evictions",
        "Counter": "0",
        "EventCode": "0x36",
        "EventName": "UNC_C_TOR_OCCUPANCY.NID_EVICTION",
        "PerPkg": "1",
        "PublicDescription": "For each cycle, this event accumulates the number of valid entries in the TOR that match qualifications specified by the subevent.   There are a number of subevent 'filters' but only a subset of the subevent combinations are valid.  Subevents that require an opcode or NID match require the Cn_MSR_PMON_BOX_FILTER.{opc, nid} field to be set.  If, for example, one wanted to count DRD Local Misses, one should select 'MISS_OPC_MATCH' and set Cn_MSR_PMON_BOX_FILTER.opc to DRD (0x182)",
        "UMask": "0x44",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "TOR Occupancy; NID Matched",
        "Counter": "0",
        "EventCode": "0x36",
        "EventName": "UNC_C_TOR_OCCUPANCY.NID_MISS_ALL",
        "PerPkg": "1",
        "PublicDescription": "For each cycle, this event accumulates the number of valid entries in the TOR that match qualifications specified by the subevent.   There are a number of subevent 'filters' but only a subset of the subevent combinations are valid.  Subevents that require an opcode or NID match require the Cn_MSR_PMON_BOX_FILTER.{opc, nid} field to be set.  If, for example, one wanted to count DRD Local Misses, one should select 'MISS_OPC_MATCH' and set Cn_MSR_PMON_BOX_FILTER.opc to DRD (0x182)",
        "UMask": "0x4a",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "TOR Occupancy; NID and Opcode Matched Miss",
        "Counter": "0",
        "EventCode": "0x36",
        "EventName": "UNC_C_TOR_OCCUPANCY.NID_MISS_OPCODE",
        "PerPkg": "1",
        "PublicDescription": "For each cycle, this event accumulates the number of valid entries in the TOR that match qualifications specified by the subevent.   There are a number of subevent 'filters' but only a subset of the subevent combinations are valid.  Subevents that require an opcode or NID match require the Cn_MSR_PMON_BOX_FILTER.{opc, nid} field to be set.  If, for example, one wanted to count DRD Local Misses, one should select 'MISS_OPC_MATCH' and set Cn_MSR_PMON_BOX_FILTER.opc to DRD (0x182)",
        "UMask": "0x43",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "TOR Occupancy; NID and Opcode Matched",
        "Counter": "0",
        "EventCode": "0x36",
        "EventName": "UNC_C_TOR_OCCUPANCY.NID_OPCODE",
        "PerPkg": "1",
        "PublicDescription": "For each cycle, this event accumulates the number of valid entries in the TOR that match qualifications specified by the subevent.   There are a number of subevent 'filters' but only a subset of the subevent combinations are valid.  Subevents that require an opcode or NID match require the Cn_MSR_PMON_BOX_FILTER.{opc, nid} field to be set.  If, for example, one wanted to count DRD Local Misses, one should select 'MISS_OPC_MATCH' and set Cn_MSR_PMON_BOX_FILTER.opc to DRD (0x182)",
        "UMask": "0x41",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "TOR Occupancy; Opcode Match",
        "Counter": "0",
        "EventCode": "0x36",
        "EventName": "UNC_C_TOR_OCCUPANCY.OPCODE",
        "PerPkg": "1",
        "PublicDescription": "For each cycle, this event accumulates the number of valid entries in the TOR that match qualifications specified by the subevent.   There are a number of subevent 'filters' but only a subset of the subevent combinations are valid.  Subevents that require an opcode or NID match require the Cn_MSR_PMON_BOX_FILTER.{opc, nid} field to be set.  If, for example, one wanted to count DRD Local Misses, one should select 'MISS_OPC_MATCH' and set Cn_MSR_PMON_BOX_FILTER.opc to DRD (0x182)",
        "UMask": "0x1",
        "Unit": "CBOX"
    },
    {
        "Counter": "0,1",
        "EventCode": "0x4",
        "EventName": "UNC_C_TxR_ADS_USED",
        "PerPkg": "1",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Egress Allocations; AD - Cachebo",
        "Counter": "0,1",
        "EventCode": "0x2",
        "EventName": "UNC_C_TxR_INSERTS.AD_CACHE",
        "PerPkg": "1",
        "PublicDescription": "Number of allocations into the Cbo Egress.  The Egress is used to queue up requests destined for the ring.",
        "UMask": "0x1",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Egress Allocations; AD - Corebo",
        "Counter": "0,1",
        "EventCode": "0x2",
        "EventName": "UNC_C_TxR_INSERTS.AD_CORE",
        "PerPkg": "1",
        "PublicDescription": "Number of allocations into the Cbo Egress.  The Egress is used to queue up requests destined for the ring.",
        "UMask": "0x10",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Egress Allocations; AK - Cachebo",
        "Counter": "0,1",
        "EventCode": "0x2",
        "EventName": "UNC_C_TxR_INSERTS.AK_CACHE",
        "PerPkg": "1",
        "PublicDescription": "Number of allocations into the Cbo Egress.  The Egress is used to queue up requests destined for the ring.",
        "UMask": "0x2",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Egress Allocations; AK - Corebo",
        "Counter": "0,1",
        "EventCode": "0x2",
        "EventName": "UNC_C_TxR_INSERTS.AK_CORE",
        "PerPkg": "1",
        "PublicDescription": "Number of allocations into the Cbo Egress.  The Egress is used to queue up requests destined for the ring.",
        "UMask": "0x20",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Egress Allocations; BL - Cacheno",
        "Counter": "0,1",
        "EventCode": "0x2",
        "EventName": "UNC_C_TxR_INSERTS.BL_CACHE",
        "PerPkg": "1",
        "PublicDescription": "Number of allocations into the Cbo Egress.  The Egress is used to queue up requests destined for the ring.",
        "UMask": "0x4",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Egress Allocations; BL - Corebo",
        "Counter": "0,1",
        "EventCode": "0x2",
        "EventName": "UNC_C_TxR_INSERTS.BL_CORE",
        "PerPkg": "1",
        "PublicDescription": "Number of allocations into the Cbo Egress.  The Egress is used to queue up requests destined for the ring.",
        "UMask": "0x40",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Egress Allocations; IV - Cachebo",
        "Counter": "0,1",
        "EventCode": "0x2",
        "EventName": "UNC_C_TxR_INSERTS.IV_CACHE",
        "PerPkg": "1",
        "PublicDescription": "Number of allocations into the Cbo Egress.  The Egress is used to queue up requests destined for the ring.",
        "UMask": "0x8",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Injection Starvation; Onto AK Ring",
        "Counter": "0,1",
        "EventCode": "0x3",
        "EventName": "UNC_C_TxR_STARVED.AK",
        "PerPkg": "1",
        "PublicDescription": "Counts injection starvation.  This starvation is triggered when the Egress cannot send a transaction onto the ring for a long period of time.",
        "UMask": "0x2",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "Injection Starvation; Onto BL Ring",
        "Counter": "0,1",
        "EventCode": "0x3",
        "EventName": "UNC_C_TxR_STARVED.BL",
        "PerPkg": "1",
        "PublicDescription": "Counts injection starvation.  This starvation is triggered when the Egress cannot send a transaction onto the ring for a long period of time.",
        "UMask": "0x4",
        "Unit": "CBOX"
    },
    {
        "BriefDescription": "HA to iMC Bypass; Not Taken",
        "Counter": "0,1,2,3",
        "EventCode": "0x14",
        "EventName": "UNC_H_BYPASS_IMC.NOT_TAKEN",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of times when the HA was able to bypass was attempted.  This is a latency optimization for situations when there is light loadings on the memory subsystem.  This can be filted by when the bypass was taken and when it was not.",
        "UMask": "0x2",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA to iMC Bypass; Taken",
        "Counter": "0,1,2,3",
        "EventCode": "0x14",
        "EventName": "UNC_H_BYPASS_IMC.TAKEN",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of times when the HA was able to bypass was attempted.  This is a latency optimization for situations when there is light loadings on the memory subsystem.  This can be filted by when the bypass was taken and when it was not.",
        "UMask": "0x1",
        "Unit": "HA"
    },
    {
        "BriefDescription": "uclks",
        "Counter": "0,1,2,3",
        "EventName": "UNC_H_CLOCKTICKS",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of uclks in the HA.  This will be slightly different than the count in the Ubox because of enable/freeze delays.  The HA is on the other side of the die from the fixed Ubox uclk counter, so the drift could be somewhat larger than in units that are closer like the QPI Agent.",
        "Unit": "HA"
    },
    {
        "BriefDescription": "Conflict Checks; Conflict Detected",
        "Counter": "0,1,2,3",
        "EventCode": "0xb",
        "EventName": "UNC_H_CONFLICT_CYCLES.CONFLICT",
        "PerPkg": "1",
        "UMask": "0x2",
        "Unit": "HA"
    },
    {
        "BriefDescription": "Conflict Checks; No Conflict",
        "Counter": "0,1,2,3",
        "EventCode": "0xb",
        "EventName": "UNC_H_CONFLICT_CYCLES.NO_CONFLICT",
        "PerPkg": "1",
        "UMask": "0x1",
        "Unit": "HA"
    },
    {
        "BriefDescription": "Direct2Core Messages Sent",
        "Counter": "0,1,2,3",
        "EventCode": "0x11",
        "EventName": "UNC_H_DIRECT2CORE_COUNT",
        "PerPkg": "1",
        "PublicDescription": "Number of Direct2Core messages sent",
        "Unit": "HA"
    },
    {
        "BriefDescription": "Cycles when Direct2Core was Disabled",
        "Counter": "0,1,2,3",
        "EventCode": "0x12",
        "EventName": "UNC_H_DIRECT2CORE_CYCLES_DISABLED",
        "PerPkg": "1",
        "PublicDescription": "Number of cycles in which Direct2Core was disabled",
        "Unit": "HA"
    },
    {
        "BriefDescription": "Number of Reads that had Direct2Core Overridden",
        "Counter": "0,1,2,3",
        "EventCode": "0x13",
        "EventName": "UNC_H_DIRECT2CORE_TXN_OVERRIDE",
        "PerPkg": "1",
        "PublicDescription": "Number of Reads where Direct2Core overridden",
        "Unit": "HA"
    },
    {
        "BriefDescription": "Directory Lookups; Snoop Not Needed",
        "Counter": "0,1,2,3",
        "EventCode": "0xc",
        "EventName": "UNC_H_DIRECTORY_LOOKUP.NO_SNP",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of transactions that looked up the directory.  Can be filtered by requests that had to snoop and those that did not have to.",
        "UMask": "0x2",
        "Unit": "HA"
    },
    {
        "BriefDescription": "Directory Lookups; Snoop Needed",
        "Counter": "0,1,2,3",
        "EventCode": "0xc",
        "EventName": "UNC_H_DIRECTORY_LOOKUP.SNP",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of transactions that looked up the directory.  Can be filtered by requests that had to snoop and those that did not have to.",
        "UMask": "0x1",
        "Unit": "HA"
    },
    {
        "BriefDescription": "Directory Updates; Any Directory Update",
        "Counter": "0,1,2,3",
        "EventCode": "0xd",
        "EventName": "UNC_H_DIRECTORY_UPDATE.ANY",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of directory updates that were required.  These result in writes to the memory controller.  This can be filtered by directory sets and directory clears.",
        "UMask": "0x3",
        "Unit": "HA"
    },
    {
        "BriefDescription": "Directory Updates; Directory Clear",
        "Counter": "0,1,2,3",
        "EventCode": "0xd",
        "EventName": "UNC_H_DIRECTORY_UPDATE.CLEAR",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of directory updates that were required.  These result in writes to the memory controller.  This can be filtered by directory sets and directory clears.",
        "UMask": "0x2",
        "Unit": "HA"
    },
    {
        "BriefDescription": "Directory Updates; Directory Set",
        "Counter": "0,1,2,3",
        "EventCode": "0xd",
        "EventName": "UNC_H_DIRECTORY_UPDATE.SET",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of directory updates that were required.  These result in writes to the memory controller.  This can be filtered by directory sets and directory clears.",
        "UMask": "0x1",
        "Unit": "HA"
    },
    {
        "BriefDescription": "Cycles without QPI Ingress Credits; AD to QPI Link 0",
        "Counter": "0,1,2,3",
        "EventCode": "0x22",
        "EventName": "UNC_H_IGR_NO_CREDIT_CYCLES.AD_QPI0",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles when the HA does not have credits to send messages to the QPI Agent.  This can be filtered by the different credit pools and the different links.",
        "UMask": "0x1",
        "Unit": "HA"
    },
    {
        "BriefDescription": "Cycles without QPI Ingress Credits; AD to QPI Link 1",
        "Counter": "0,1,2,3",
        "EventCode": "0x22",
        "EventName": "UNC_H_IGR_NO_CREDIT_CYCLES.AD_QPI1",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles when the HA does not have credits to send messages to the QPI Agent.  This can be filtered by the different credit pools and the different links.",
        "UMask": "0x2",
        "Unit": "HA"
    },
    {
        "BriefDescription": "Cycles without QPI Ingress Credits; BL to QPI Link 0",
        "Counter": "0,1,2,3",
        "EventCode": "0x22",
        "EventName": "UNC_H_IGR_NO_CREDIT_CYCLES.BL_QPI0",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles when the HA does not have credits to send messages to the QPI Agent.  This can be filtered by the different credit pools and the different links.",
        "UMask": "0x4",
        "Unit": "HA"
    },
    {
        "BriefDescription": "Cycles without QPI Ingress Credits; BL to QPI Link 1",
        "Counter": "0,1,2,3",
        "EventCode": "0x22",
        "EventName": "UNC_H_IGR_NO_CREDIT_CYCLES.BL_QPI1",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles when the HA does not have credits to send messages to the QPI Agent.  This can be filtered by the different credit pools and the different links.",
        "UMask": "0x8",
        "Unit": "HA"
    },
    {
        "BriefDescription": "Retry Events",
        "Counter": "0,1,2,3",
        "EventCode": "0x1e",
        "EventName": "UNC_H_IMC_RETRY",
        "PerPkg": "1",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA to iMC Full Line Writes Issued; All Writes",
        "Counter": "0,1,2,3",
        "EventCode": "0x1a",
        "EventName": "UNC_H_IMC_WRITES.ALL",
        "PerPkg": "1",
        "PublicDescription": "Counts the total number of full line writes issued from the HA into the memory controller.  This counts for all four channels.  It can be filtered by full/partial and ISOCH/non-ISOCH.",
        "UMask": "0xf",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA to iMC Full Line Writes Issued; Full Line Non-ISOCH",
        "Counter": "0,1,2,3",
        "EventCode": "0x1a",
        "EventName": "UNC_H_IMC_WRITES.FULL",
        "PerPkg": "1",
        "PublicDescription": "Counts the total number of full line writes issued from the HA into the memory controller.  This counts for all four channels.  It can be filtered by full/partial and ISOCH/non-ISOCH.",
        "UMask": "0x1",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA to iMC Full Line Writes Issued; ISOCH Full Line",
        "Counter": "0,1,2,3",
        "EventCode": "0x1a",
        "EventName": "UNC_H_IMC_WRITES.FULL_ISOCH",
        "PerPkg": "1",
        "PublicDescription": "Counts the total number of full line writes issued from the HA into the memory controller.  This counts for all four channels.  It can be filtered by full/partial and ISOCH/non-ISOCH.",
        "UMask": "0x4",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA to iMC Full Line Writes Issued; Partial Non-ISOCH",
        "Counter": "0,1,2,3",
        "EventCode": "0x1a",
        "EventName": "UNC_H_IMC_WRITES.PARTIAL",
        "PerPkg": "1",
        "PublicDescription": "Counts the total number of full line writes issued from the HA into the memory controller.  This counts for all four channels.  It can be filtered by full/partial and ISOCH/non-ISOCH.",
        "UMask": "0x2",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA to iMC Full Line Writes Issued; ISOCH Partial",
        "Counter": "0,1,2,3",
        "EventCode": "0x1a",
        "EventName": "UNC_H_IMC_WRITES.PARTIAL_ISOCH",
        "PerPkg": "1",
        "PublicDescription": "Counts the total number of full line writes issued from the HA into the memory controller.  This counts for all four channels.  It can be filtered by full/partial and ISOCH/non-ISOCH.",
        "UMask": "0x8",
        "Unit": "HA"
    },
    {
        "BriefDescription": "Read and Write Requests; Reads",
        "Counter": "0,1,2,3",
        "EventCode": "0x1",
        "EventName": "UNC_H_REQUESTS.READS",
        "PerPkg": "1",
        "PublicDescription": "Counts the total number of read requests made into the Home Agent. Reads include all read opcodes (including RFO).  Writes include all writes (streaming, evictions, HitM, etc).",
        "UMask": "0x3",
        "Unit": "HA"
    },
    {
        "BriefDescription": "Read and Write Requests; Writes",
        "Counter": "0,1,2,3",
        "EventCode": "0x1",
        "EventName": "UNC_H_REQUESTS.WRITES",
        "PerPkg": "1",
        "PublicDescription": "Counts the total number of read requests made into the Home Agent. Reads include all read opcodes (including RFO).  Writes include all writes (streaming, evictions, HitM, etc).",
        "UMask": "0xc",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA AD Ring in Use; Counterclockwise and Even",
        "Counter": "0,1,2,3",
        "EventCode": "0x3e",
        "EventName": "UNC_H_RING_AD_USED.CCW_EVEN",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles that the AD ring is being used at this ring stop.  This includes when packets are passing by and when packets are being sunk, but does not include when packets are being sent from the ring stop.",
        "UMask": "0x4",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA AD Ring in Use; Counterclockwise and Odd",
        "Counter": "0,1,2,3",
        "EventCode": "0x3e",
        "EventName": "UNC_H_RING_AD_USED.CCW_ODD",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles that the AD ring is being used at this ring stop.  This includes when packets are passing by and when packets are being sunk, but does not include when packets are being sent from the ring stop.",
        "UMask": "0x8",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA AD Ring in Use; Clockwise and Even",
        "Counter": "0,1,2,3",
        "EventCode": "0x3e",
        "EventName": "UNC_H_RING_AD_USED.CW_EVEN",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles that the AD ring is being used at this ring stop.  This includes when packets are passing by and when packets are being sunk, but does not include when packets are being sent from the ring stop.",
        "UMask": "0x1",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA AD Ring in Use; Clockwise and Odd",
        "Counter": "0,1,2,3",
        "EventCode": "0x3e",
        "EventName": "UNC_H_RING_AD_USED.CW_ODD",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles that the AD ring is being used at this ring stop.  This includes when packets are passing by and when packets are being sunk, but does not include when packets are being sent from the ring stop.",
        "UMask": "0x2",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA AK Ring in Use; Counterclockwise and Even",
        "Counter": "0,1,2,3",
        "EventCode": "0x3f",
        "EventName": "UNC_H_RING_AK_USED.CCW_EVEN",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles that the AK ring is being used at this ring stop.  This includes when packets are passing by and when packets are being sunk, but does not include when packets are being sent from the ring stop.",
        "UMask": "0x4",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA AK Ring in Use; Counterclockwise and Odd",
        "Counter": "0,1,2,3",
        "EventCode": "0x3f",
        "EventName": "UNC_H_RING_AK_USED.CCW_ODD",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles that the AK ring is being used at this ring stop.  This includes when packets are passing by and when packets are being sunk, but does not include when packets are being sent from the ring stop.",
        "UMask": "0x8",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA AK Ring in Use; Clockwise and Even",
        "Counter": "0,1,2,3",
        "EventCode": "0x3f",
        "EventName": "UNC_H_RING_AK_USED.CW_EVEN",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles that the AK ring is being used at this ring stop.  This includes when packets are passing by and when packets are being sunk, but does not include when packets are being sent from the ring stop.",
        "UMask": "0x1",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA AK Ring in Use; Clockwise and Odd",
        "Counter": "0,1,2,3",
        "EventCode": "0x3f",
        "EventName": "UNC_H_RING_AK_USED.CW_ODD",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles that the AK ring is being used at this ring stop.  This includes when packets are passing by and when packets are being sunk, but does not include when packets are being sent from the ring stop.",
        "UMask": "0x2",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA BL Ring in Use; Counterclockwise and Even",
        "Counter": "0,1,2,3",
        "EventCode": "0x40",
        "EventName": "UNC_H_RING_BL_USED.CCW_EVEN",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles that the BL ring is being used at this ring stop.  This includes when packets are passing by and when packets are being sunk, but does not include when packets are being sent from the ring stop.",
        "UMask": "0x4",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA BL Ring in Use; Counterclockwise and Odd",
        "Counter": "0,1,2,3",
        "EventCode": "0x40",
        "EventName": "UNC_H_RING_BL_USED.CCW_ODD",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles that the BL ring is being used at this ring stop.  This includes when packets are passing by and when packets are being sunk, but does not include when packets are being sent from the ring stop.",
        "UMask": "0x8",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA BL Ring in Use; Clockwise and Even",
        "Counter": "0,1,2,3",
        "EventCode": "0x40",
        "EventName": "UNC_H_RING_BL_USED.CW_EVEN",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles that the BL ring is being used at this ring stop.  This includes when packets are passing by and when packets are being sunk, but does not include when packets are being sent from the ring stop.",
        "UMask": "0x1",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA BL Ring in Use; Clockwise and Odd",
        "Counter": "0,1,2,3",
        "EventCode": "0x40",
        "EventName": "UNC_H_RING_BL_USED.CW_ODD",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles that the BL ring is being used at this ring stop.  This includes when packets are passing by and when packets are being sunk, but does not include when packets are being sent from the ring stop.",
        "UMask": "0x2",
        "Unit": "HA"
    },
    {
        "BriefDescription": "iMC RPQ Credits Empty - Regular; Channel 0",
        "Counter": "0,1,2,3",
        "EventCode": "0x15",
        "EventName": "UNC_H_RPQ_CYCLES_NO_REG_CREDITS.CHN0",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles when there are no 'regular' credits available for posting reads from the HA into the iMC.  In order to send reads into the memory controller, the HA must first acquire a credit for the iMC's RPQ (read pending queue).  This queue is broken into regular credits/buffers that are used by general reads, and 'special' requests such as ISOCH reads.  This count only tracks the regular credits  Common high banwidth workloads should be able to make use of all of the regular buffers, but it will be difficult (and uncommon) to make use of both the regular and special buffers at the same time.  One can filter based on the memory controller channel.  One or more channels can be tracked at a given time.",
        "UMask": "0x1",
        "Unit": "HA"
    },
    {
        "BriefDescription": "iMC RPQ Credits Empty - Regular; Channel 1",
        "Counter": "0,1,2,3",
        "EventCode": "0x15",
        "EventName": "UNC_H_RPQ_CYCLES_NO_REG_CREDITS.CHN1",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles when there are no 'regular' credits available for posting reads from the HA into the iMC.  In order to send reads into the memory controller, the HA must first acquire a credit for the iMC's RPQ (read pending queue).  This queue is broken into regular credits/buffers that are used by general reads, and 'special' requests such as ISOCH reads.  This count only tracks the regular credits  Common high banwidth workloads should be able to make use of all of the regular buffers, but it will be difficult (and uncommon) to make use of both the regular and special buffers at the same time.  One can filter based on the memory controller channel.  One or more channels can be tracked at a given time.",
        "UMask": "0x2",
        "Unit": "HA"
    },
    {
        "BriefDescription": "iMC RPQ Credits Empty - Regular; Channel 2",
        "Counter": "0,1,2,3",
        "EventCode": "0x15",
        "EventName": "UNC_H_RPQ_CYCLES_NO_REG_CREDITS.CHN2",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles when there are no 'regular' credits available for posting reads from the HA into the iMC.  In order to send reads into the memory controller, the HA must first acquire a credit for the iMC's RPQ (read pending queue).  This queue is broken into regular credits/buffers that are used by general reads, and 'special' requests such as ISOCH reads.  This count only tracks the regular credits  Common high banwidth workloads should be able to make use of all of the regular buffers, but it will be difficult (and uncommon) to make use of both the regular and special buffers at the same time.  One can filter based on the memory controller channel.  One or more channels can be tracked at a given time.",
        "UMask": "0x4",
        "Unit": "HA"
    },
    {
        "BriefDescription": "iMC RPQ Credits Empty - Regular; Channel 3",
        "Counter": "0,1,2,3",
        "EventCode": "0x15",
        "EventName": "UNC_H_RPQ_CYCLES_NO_REG_CREDITS.CHN3",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles when there are no 'regular' credits available for posting reads from the HA into the iMC.  In order to send reads into the memory controller, the HA must first acquire a credit for the iMC's RPQ (read pending queue).  This queue is broken into regular credits/buffers that are used by general reads, and 'special' requests such as ISOCH reads.  This count only tracks the regular credits  Common high banwidth workloads should be able to make use of all of the regular buffers, but it will be difficult (and uncommon) to make use of both the regular and special buffers at the same time.  One can filter based on the memory controller channel.  One or more channels can be tracked at a given time.",
        "UMask": "0x8",
        "Unit": "HA"
    },
    {
        "BriefDescription": "iMC RPQ Credits Empty - Special; Channel 0",
        "Counter": "0,1,2,3",
        "EventCode": "0x16",
        "EventName": "UNC_H_RPQ_CYCLES_NO_SPEC_CREDITS.CHN0",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles when there are no 'special' credits available for posting reads from the HA into the iMC.  In order to send reads into the memory controller, the HA must first acquire a credit for the iMC's RPQ (read pending queue).  This queue is broken into regular credits/buffers that are used by general reads, and 'special' requests such as ISOCH reads.  This count only tracks the 'special' credits.  This statistic is generally not interesting for general IA workloads, but may be of interest for understanding the characteristics of systems using ISOCH.  One can filter based on the memory controller channel.  One or more channels can be tracked at a given time.",
        "UMask": "0x1",
        "Unit": "HA"
    },
    {
        "BriefDescription": "iMC RPQ Credits Empty - Special; Channel 1",
        "Counter": "0,1,2,3",
        "EventCode": "0x16",
        "EventName": "UNC_H_RPQ_CYCLES_NO_SPEC_CREDITS.CHN1",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles when there are no 'special' credits available for posting reads from the HA into the iMC.  In order to send reads into the memory controller, the HA must first acquire a credit for the iMC's RPQ (read pending queue).  This queue is broken into regular credits/buffers that are used by general reads, and 'special' requests such as ISOCH reads.  This count only tracks the 'special' credits.  This statistic is generally not interesting for general IA workloads, but may be of interest for understanding the characteristics of systems using ISOCH.  One can filter based on the memory controller channel.  One or more channels can be tracked at a given time.",
        "UMask": "0x2",
        "Unit": "HA"
    },
    {
        "BriefDescription": "iMC RPQ Credits Empty - Special; Channel 2",
        "Counter": "0,1,2,3",
        "EventCode": "0x16",
        "EventName": "UNC_H_RPQ_CYCLES_NO_SPEC_CREDITS.CHN2",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles when there are no 'special' credits available for posting reads from the HA into the iMC.  In order to send reads into the memory controller, the HA must first acquire a credit for the iMC's RPQ (read pending queue).  This queue is broken into regular credits/buffers that are used by general reads, and 'special' requests such as ISOCH reads.  This count only tracks the 'special' credits.  This statistic is generally not interesting for general IA workloads, but may be of interest for understanding the characteristics of systems using ISOCH.  One can filter based on the memory controller channel.  One or more channels can be tracked at a given time.",
        "UMask": "0x4",
        "Unit": "HA"
    },
    {
        "BriefDescription": "iMC RPQ Credits Empty - Special; Channel 3",
        "Counter": "0,1,2,3",
        "EventCode": "0x16",
        "EventName": "UNC_H_RPQ_CYCLES_NO_SPEC_CREDITS.CHN3",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles when there are no 'special' credits available for posting reads from the HA into the iMC.  In order to send reads into the memory controller, the HA must first acquire a credit for the iMC's RPQ (read pending queue).  This queue is broken into regular credits/buffers that are used by general reads, and 'special' requests such as ISOCH reads.  This count only tracks the 'special' credits.  This statistic is generally not interesting for general IA workloads, but may be of interest for understanding the characteristics of systems using ISOCH.  One can filter based on the memory controller channel.  One or more channels can be tracked at a given time.",
        "UMask": "0x8",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA Requests to a TAD Region - Group 0; TAD Region 0",
        "Counter": "0,1,2,3",
        "EventCode": "0x1b",
        "EventName": "UNC_H_TAD_REQUESTS_G0.REGION0",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of HA requests to a given TAD region.  There are up to 11 TAD (target address decode) regions in each home agent.  All requests destined for the memory controller must first be decoded to determine which TAD region they are in.  This event is filtered based on the TAD region ID, and covers regions 0 to 7.  This event is useful for understanding how applications are using the memory that is spread across the different memory regions.  It is particularly useful for 'Monroe' systems that use the TAD to enable individual channels to enter self-refresh to save power.",
        "UMask": "0x1",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA Requests to a TAD Region - Group 0; TAD Region 1",
        "Counter": "0,1,2,3",
        "EventCode": "0x1b",
        "EventName": "UNC_H_TAD_REQUESTS_G0.REGION1",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of HA requests to a given TAD region.  There are up to 11 TAD (target address decode) regions in each home agent.  All requests destined for the memory controller must first be decoded to determine which TAD region they are in.  This event is filtered based on the TAD region ID, and covers regions 0 to 7.  This event is useful for understanding how applications are using the memory that is spread across the different memory regions.  It is particularly useful for 'Monroe' systems that use the TAD to enable individual channels to enter self-refresh to save power.",
        "UMask": "0x2",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA Requests to a TAD Region - Group 0; TAD Region 2",
        "Counter": "0,1,2,3",
        "EventCode": "0x1b",
        "EventName": "UNC_H_TAD_REQUESTS_G0.REGION2",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of HA requests to a given TAD region.  There are up to 11 TAD (target address decode) regions in each home agent.  All requests destined for the memory controller must first be decoded to determine which TAD region they are in.  This event is filtered based on the TAD region ID, and covers regions 0 to 7.  This event is useful for understanding how applications are using the memory that is spread across the different memory regions.  It is particularly useful for 'Monroe' systems that use the TAD to enable individual channels to enter self-refresh to save power.",
        "UMask": "0x4",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA Requests to a TAD Region - Group 0; TAD Region 3",
        "Counter": "0,1,2,3",
        "EventCode": "0x1b",
        "EventName": "UNC_H_TAD_REQUESTS_G0.REGION3",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of HA requests to a given TAD region.  There are up to 11 TAD (target address decode) regions in each home agent.  All requests destined for the memory controller must first be decoded to determine which TAD region they are in.  This event is filtered based on the TAD region ID, and covers regions 0 to 7.  This event is useful for understanding how applications are using the memory that is spread across the different memory regions.  It is particularly useful for 'Monroe' systems that use the TAD to enable individual channels to enter self-refresh to save power.",
        "UMask": "0x8",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA Requests to a TAD Region - Group 0; TAD Region 4",
        "Counter": "0,1,2,3",
        "EventCode": "0x1b",
        "EventName": "UNC_H_TAD_REQUESTS_G0.REGION4",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of HA requests to a given TAD region.  There are up to 11 TAD (target address decode) regions in each home agent.  All requests destined for the memory controller must first be decoded to determine which TAD region they are in.  This event is filtered based on the TAD region ID, and covers regions 0 to 7.  This event is useful for understanding how applications are using the memory that is spread across the different memory regions.  It is particularly useful for 'Monroe' systems that use the TAD to enable individual channels to enter self-refresh to save power.",
        "UMask": "0x10",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA Requests to a TAD Region - Group 0; TAD Region 5",
        "Counter": "0,1,2,3",
        "EventCode": "0x1b",
        "EventName": "UNC_H_TAD_REQUESTS_G0.REGION5",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of HA requests to a given TAD region.  There are up to 11 TAD (target address decode) regions in each home agent.  All requests destined for the memory controller must first be decoded to determine which TAD region they are in.  This event is filtered based on the TAD region ID, and covers regions 0 to 7.  This event is useful for understanding how applications are using the memory that is spread across the different memory regions.  It is particularly useful for 'Monroe' systems that use the TAD to enable individual channels to enter self-refresh to save power.",
        "UMask": "0x20",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA Requests to a TAD Region - Group 0; TAD Region 6",
        "Counter": "0,1,2,3",
        "EventCode": "0x1b",
        "EventName": "UNC_H_TAD_REQUESTS_G0.REGION6",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of HA requests to a given TAD region.  There are up to 11 TAD (target address decode) regions in each home agent.  All requests destined for the memory controller must first be decoded to determine which TAD region they are in.  This event is filtered based on the TAD region ID, and covers regions 0 to 7.  This event is useful for understanding how applications are using the memory that is spread across the different memory regions.  It is particularly useful for 'Monroe' systems that use the TAD to enable individual channels to enter self-refresh to save power.",
        "UMask": "0x40",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA Requests to a TAD Region - Group 0; TAD Region 7",
        "Counter": "0,1,2,3",
        "EventCode": "0x1b",
        "EventName": "UNC_H_TAD_REQUESTS_G0.REGION7",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of HA requests to a given TAD region.  There are up to 11 TAD (target address decode) regions in each home agent.  All requests destined for the memory controller must first be decoded to determine which TAD region they are in.  This event is filtered based on the TAD region ID, and covers regions 0 to 7.  This event is useful for understanding how applications are using the memory that is spread across the different memory regions.  It is particularly useful for 'Monroe' systems that use the TAD to enable individual channels to enter self-refresh to save power.",
        "UMask": "0x80",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA Requests to a TAD Region - Group 1; TAD Region 10",
        "Counter": "0,1,2,3",
        "EventCode": "0x1c",
        "EventName": "UNC_H_TAD_REQUESTS_G1.REGION10",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of HA requests to a given TAD region.  There are up to 11 TAD (target address decode) regions in each home agent.  All requests destined for the memory controller must first be decoded to determine which TAD region they are in.  This event is filtered based on the TAD region ID, and covers regions 8 to 10.  This event is useful for understanding how applications are using the memory that is spread across the different memory regions.  It is particularly useful for 'Monroe' systems that use the TAD to enable individual channels to enter self-refresh to save power.",
        "UMask": "0x4",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA Requests to a TAD Region - Group 1; TAD Region 11",
        "Counter": "0,1,2,3",
        "EventCode": "0x1c",
        "EventName": "UNC_H_TAD_REQUESTS_G1.REGION11",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of HA requests to a given TAD region.  There are up to 11 TAD (target address decode) regions in each home agent.  All requests destined for the memory controller must first be decoded to determine which TAD region they are in.  This event is filtered based on the TAD region ID, and covers regions 8 to 10.  This event is useful for understanding how applications are using the memory that is spread across the different memory regions.  It is particularly useful for 'Monroe' systems that use the TAD to enable individual channels to enter self-refresh to save power.",
        "UMask": "0x8",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA Requests to a TAD Region - Group 1; TAD Region 8",
        "Counter": "0,1,2,3",
        "EventCode": "0x1c",
        "EventName": "UNC_H_TAD_REQUESTS_G1.REGION8",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of HA requests to a given TAD region.  There are up to 11 TAD (target address decode) regions in each home agent.  All requests destined for the memory controller must first be decoded to determine which TAD region they are in.  This event is filtered based on the TAD region ID, and covers regions 8 to 10.  This event is useful for understanding how applications are using the memory that is spread across the different memory regions.  It is particularly useful for 'Monroe' systems that use the TAD to enable individual channels to enter self-refresh to save power.",
        "UMask": "0x1",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA Requests to a TAD Region - Group 1; TAD Region 9",
        "Counter": "0,1,2,3",
        "EventCode": "0x1c",
        "EventName": "UNC_H_TAD_REQUESTS_G1.REGION9",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of HA requests to a given TAD region.  There are up to 11 TAD (target address decode) regions in each home agent.  All requests destined for the memory controller must first be decoded to determine which TAD region they are in.  This event is filtered based on the TAD region ID, and covers regions 8 to 10.  This event is useful for understanding how applications are using the memory that is spread across the different memory regions.  It is particularly useful for 'Monroe' systems that use the TAD to enable individual channels to enter self-refresh to save power.",
        "UMask": "0x2",
        "Unit": "HA"
    },
    {
        "BriefDescription": "Tracker Allocations; All Requests",
        "Counter": "0,1,2,3",
        "EventCode": "0x6",
        "EventName": "UNC_H_TRACKER_INSERTS.ALL",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of allocations into the local HA tracker pool.  This can be used in conjunction with the occupancy accumulation event in order to calculate average latency.  One cannot filter between reads and writes.  HA trackers are allocated as soon as a request enters the HA and is released after the snoop response and data return (or post in the case of a write) and the response is returned on the ring.",
        "UMask": "0x3",
        "Unit": "HA"
    },
    {
        "BriefDescription": "Outbound NDR Ring Transactions; Non-data Responses",
        "Counter": "0,1,2,3",
        "EventCode": "0xf",
        "EventName": "UNC_H_TxR_AD.NDR",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of outbound transactions on the AD ring.  This can be filtered by the NDR and SNP message classes.  See the filter descriptions for more details.",
        "UMask": "0x1",
        "Unit": "HA"
    },
    {
        "BriefDescription": "Outbound NDR Ring Transactions; Snoops",
        "Counter": "0,1,2,3",
        "EventCode": "0xf",
        "EventName": "UNC_H_TxR_AD.SNP",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of outbound transactions on the AD ring.  This can be filtered by the NDR and SNP message classes.  See the filter descriptions for more details.",
        "UMask": "0x2",
        "Unit": "HA"
    },
    {
        "BriefDescription": "AD Egress Full; All",
        "Counter": "0,1,2,3",
        "EventCode": "0x2a",
        "EventName": "UNC_H_TxR_AD_CYCLES_FULL.ALL",
        "PerPkg": "1",
        "UMask": "0x3",
        "Unit": "HA"
    },
    {
        "BriefDescription": "AD Egress Full; Scheduler 0",
        "Counter": "0,1,2,3",
        "EventCode": "0x2a",
        "EventName": "UNC_H_TxR_AD_CYCLES_FULL.SCHED0",
        "PerPkg": "1",
        "UMask": "0x1",
        "Unit": "HA"
    },
    {
        "BriefDescription": "AD Egress Full; Scheduler 1",
        "Counter": "0,1,2,3",
        "EventCode": "0x2a",
        "EventName": "UNC_H_TxR_AD_CYCLES_FULL.SCHED1",
        "PerPkg": "1",
        "UMask": "0x2",
        "Unit": "HA"
    },
    {
        "BriefDescription": "AD Egress Not Empty; All",
        "Counter": "0,1,2,3",
        "EventCode": "0x29",
        "EventName": "UNC_H_TxR_AD_CYCLES_NE.ALL",
        "PerPkg": "1",
        "UMask": "0x3",
        "Unit": "HA"
    },
    {
        "BriefDescription": "AD Egress Not Empty; Scheduler 0",
        "Counter": "0,1,2,3",
        "EventCode": "0x29",
        "EventName": "UNC_H_TxR_AD_CYCLES_NE.SCHED0",
        "PerPkg": "1",
        "UMask": "0x1",
        "Unit": "HA"
    },
    {
        "BriefDescription": "AD Egress Not Empty; Scheduler 1",
        "Counter": "0,1,2,3",
        "EventCode": "0x29",
        "EventName": "UNC_H_TxR_AD_CYCLES_NE.SCHED1",
        "PerPkg": "1",
        "UMask": "0x2",
        "Unit": "HA"
    },
    {
        "BriefDescription": "AD Egress Allocations; All",
        "Counter": "0,1,2,3",
        "EventCode": "0x27",
        "EventName": "UNC_H_TxR_AD_INSERTS.ALL",
        "PerPkg": "1",
        "UMask": "0x3",
        "Unit": "HA"
    },
    {
        "BriefDescription": "AD Egress Allocations; Scheduler 0",
        "Counter": "0,1,2,3",
        "EventCode": "0x27",
        "EventName": "UNC_H_TxR_AD_INSERTS.SCHED0",
        "PerPkg": "1",
        "UMask": "0x1",
        "Unit": "HA"
    },
    {
        "BriefDescription": "AD Egress Allocations; Scheduler 1",
        "Counter": "0,1,2,3",
        "EventCode": "0x27",
        "EventName": "UNC_H_TxR_AD_INSERTS.SCHED1",
        "PerPkg": "1",
        "UMask": "0x2",
        "Unit": "HA"
    },
    {
        "BriefDescription": "AD Egress Occupancy; All",
        "Counter": "0,1,2,3",
        "EventCode": "0x28",
        "EventName": "UNC_H_TxR_AD_OCCUPANCY.ALL",
        "PerPkg": "1",
        "UMask": "0x3",
        "Unit": "HA"
    },
    {
        "BriefDescription": "AD Egress Occupancy; Scheduler 0",
        "Counter": "0,1,2,3",
        "EventCode": "0x28",
        "EventName": "UNC_H_TxR_AD_OCCUPANCY.SCHED0",
        "PerPkg": "1",
        "UMask": "0x1",
        "Unit": "HA"
    },
    {
        "BriefDescription": "AD Egress Occupancy; Scheduler 1",
        "Counter": "0,1,2,3",
        "EventCode": "0x28",
        "EventName": "UNC_H_TxR_AD_OCCUPANCY.SCHED1",
        "PerPkg": "1",
        "UMask": "0x2",
        "Unit": "HA"
    },
    {
        "BriefDescription": "AK Egress Full; All",
        "Counter": "0,1,2,3",
        "EventCode": "0x32",
        "EventName": "UNC_H_TxR_AK_CYCLES_FULL.ALL",
        "PerPkg": "1",
        "UMask": "0x3",
        "Unit": "HA"
    },
    {
        "BriefDescription": "AK Egress Full; Scheduler 0",
        "Counter": "0,1,2,3",
        "EventCode": "0x32",
        "EventName": "UNC_H_TxR_AK_CYCLES_FULL.SCHED0",
        "PerPkg": "1",
        "UMask": "0x1",
        "Unit": "HA"
    },
    {
        "BriefDescription": "AK Egress Full; Scheduler 1",
        "Counter": "0,1,2,3",
        "EventCode": "0x32",
        "EventName": "UNC_H_TxR_AK_CYCLES_FULL.SCHED1",
        "PerPkg": "1",
        "UMask": "0x2",
        "Unit": "HA"
    },
    {
        "BriefDescription": "AK Egress Not Empty; All",
        "Counter": "0,1,2,3",
        "EventCode": "0x31",
        "EventName": "UNC_H_TxR_AK_CYCLES_NE.ALL",
        "PerPkg": "1",
        "UMask": "0x3",
        "Unit": "HA"
    },
    {
        "BriefDescription": "AK Egress Not Empty; Scheduler 0",
        "Counter": "0,1,2,3",
        "EventCode": "0x31",
        "EventName": "UNC_H_TxR_AK_CYCLES_NE.SCHED0",
        "PerPkg": "1",
        "UMask": "0x1",
        "Unit": "HA"
    },
    {
        "BriefDescription": "AK Egress Not Empty; Scheduler 1",
        "Counter": "0,1,2,3",
        "EventCode": "0x31",
        "EventName": "UNC_H_TxR_AK_CYCLES_NE.SCHED1",
        "PerPkg": "1",
        "UMask": "0x2",
        "Unit": "HA"
    },
    {
        "BriefDescription": "AK Egress Allocations; All",
        "Counter": "0,1,2,3",
        "EventCode": "0x2f",
        "EventName": "UNC_H_TxR_AK_INSERTS.ALL",
        "PerPkg": "1",
        "UMask": "0x3",
        "Unit": "HA"
    },
    {
        "BriefDescription": "AK Egress Allocations; Scheduler 0",
        "Counter": "0,1,2,3",
        "EventCode": "0x2f",
        "EventName": "UNC_H_TxR_AK_INSERTS.SCHED0",
        "PerPkg": "1",
        "UMask": "0x1",
        "Unit": "HA"
    },
    {
        "BriefDescription": "AK Egress Allocations; Scheduler 1",
        "Counter": "0,1,2,3",
        "EventCode": "0x2f",
        "EventName": "UNC_H_TxR_AK_INSERTS.SCHED1",
        "PerPkg": "1",
        "UMask": "0x2",
        "Unit": "HA"
    },
    {
        "BriefDescription": "Outbound NDR Ring Transactions",
        "Counter": "0,1,2,3",
        "EventCode": "0xe",
        "EventName": "UNC_H_TxR_AK_NDR",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of outbound NDR transactions sent on the AK ring.  NDR stands for 'non-data response' and is generally used for completions that do not include data.  AK NDR is used for messages to the local socket.",
        "Unit": "HA"
    },
    {
        "BriefDescription": "AK Egress Occupancy; All",
        "Counter": "0,1,2,3",
        "EventCode": "0x30",
        "EventName": "UNC_H_TxR_AK_OCCUPANCY.ALL",
        "PerPkg": "1",
        "UMask": "0x3",
        "Unit": "HA"
    },
    {
        "BriefDescription": "AK Egress Occupancy; Scheduler 0",
        "Counter": "0,1,2,3",
        "EventCode": "0x30",
        "EventName": "UNC_H_TxR_AK_OCCUPANCY.SCHED0",
        "PerPkg": "1",
        "UMask": "0x1",
        "Unit": "HA"
    },
    {
        "BriefDescription": "AK Egress Occupancy; Scheduler 1",
        "Counter": "0,1,2,3",
        "EventCode": "0x30",
        "EventName": "UNC_H_TxR_AK_OCCUPANCY.SCHED1",
        "PerPkg": "1",
        "UMask": "0x2",
        "Unit": "HA"
    },
    {
        "BriefDescription": "Outbound DRS Ring Transactions to Cache; Data to Cache",
        "Counter": "0,1,2,3",
        "EventCode": "0x10",
        "EventName": "UNC_H_TxR_BL.DRS_CACHE",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of DRS messages sent out on the BL ring.   This can be filtered by the destination.",
        "UMask": "0x1",
        "Unit": "HA"
    },
    {
        "BriefDescription": "Outbound DRS Ring Transactions to Cache; Data to Core",
        "Counter": "0,1,2,3",
        "EventCode": "0x10",
        "EventName": "UNC_H_TxR_BL.DRS_CORE",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of DRS messages sent out on the BL ring.   This can be filtered by the destination.",
        "UMask": "0x2",
        "Unit": "HA"
    },
    {
        "BriefDescription": "Outbound DRS Ring Transactions to Cache; Data to QPI",
        "Counter": "0,1,2,3",
        "EventCode": "0x10",
        "EventName": "UNC_H_TxR_BL.DRS_QPI",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of DRS messages sent out on the BL ring.   This can be filtered by the destination.",
        "UMask": "0x4",
        "Unit": "HA"
    },
    {
        "BriefDescription": "BL Egress Full; All",
        "Counter": "0,1,2,3",
        "EventCode": "0x36",
        "EventName": "UNC_H_TxR_BL_CYCLES_FULL.ALL",
        "PerPkg": "1",
        "UMask": "0x3",
        "Unit": "HA"
    },
    {
        "BriefDescription": "BL Egress Full; Scheduler 0",
        "Counter": "0,1,2,3",
        "EventCode": "0x36",
        "EventName": "UNC_H_TxR_BL_CYCLES_FULL.SCHED0",
        "PerPkg": "1",
        "UMask": "0x1",
        "Unit": "HA"
    },
    {
        "BriefDescription": "BL Egress Full; Scheduler 1",
        "Counter": "0,1,2,3",
        "EventCode": "0x36",
        "EventName": "UNC_H_TxR_BL_CYCLES_FULL.SCHED1",
        "PerPkg": "1",
        "UMask": "0x2",
        "Unit": "HA"
    },
    {
        "BriefDescription": "BL Egress Not Empty; All",
        "Counter": "0,1,2,3",
        "EventCode": "0x35",
        "EventName": "UNC_H_TxR_BL_CYCLES_NE.ALL",
        "PerPkg": "1",
        "UMask": "0x3",
        "Unit": "HA"
    },
    {
        "BriefDescription": "BL Egress Not Empty; Scheduler 0",
        "Counter": "0,1,2,3",
        "EventCode": "0x35",
        "EventName": "UNC_H_TxR_BL_CYCLES_NE.SCHED0",
        "PerPkg": "1",
        "UMask": "0x1",
        "Unit": "HA"
    },
    {
        "BriefDescription": "BL Egress Not Empty; Scheduler 1",
        "Counter": "0,1,2,3",
        "EventCode": "0x35",
        "EventName": "UNC_H_TxR_BL_CYCLES_NE.SCHED1",
        "PerPkg": "1",
        "UMask": "0x2",
        "Unit": "HA"
    },
    {
        "BriefDescription": "BL Egress Allocations; All",
        "Counter": "0,1,2,3",
        "EventCode": "0x33",
        "EventName": "UNC_H_TxR_BL_INSERTS.ALL",
        "PerPkg": "1",
        "UMask": "0x3",
        "Unit": "HA"
    },
    {
        "BriefDescription": "BL Egress Allocations; Scheduler 0",
        "Counter": "0,1,2,3",
        "EventCode": "0x33",
        "EventName": "UNC_H_TxR_BL_INSERTS.SCHED0",
        "PerPkg": "1",
        "UMask": "0x1",
        "Unit": "HA"
    },
    {
        "BriefDescription": "BL Egress Allocations; Scheduler 1",
        "Counter": "0,1,2,3",
        "EventCode": "0x33",
        "EventName": "UNC_H_TxR_BL_INSERTS.SCHED1",
        "PerPkg": "1",
        "UMask": "0x2",
        "Unit": "HA"
    },
    {
        "BriefDescription": "BL Egress Occupancy; All",
        "Counter": "0,1,2,3",
        "EventCode": "0x34",
        "EventName": "UNC_H_TxR_BL_OCCUPANCY.ALL",
        "PerPkg": "1",
        "UMask": "0x3",
        "Unit": "HA"
    },
    {
        "BriefDescription": "BL Egress Occupancy; Scheduler 0",
        "Counter": "0,1,2,3",
        "EventCode": "0x34",
        "EventName": "UNC_H_TxR_BL_OCCUPANCY.SCHED0",
        "PerPkg": "1",
        "UMask": "0x1",
        "Unit": "HA"
    },
    {
        "BriefDescription": "BL Egress Occupancy; Scheduler 1",
        "Counter": "0,1,2,3",
        "EventCode": "0x34",
        "EventName": "UNC_H_TxR_BL_OCCUPANCY.SCHED1",
        "PerPkg": "1",
        "UMask": "0x2",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA iMC CHN0 WPQ Credits Empty - Regular; Channel 0",
        "Counter": "0,1,2,3",
        "EventCode": "0x18",
        "EventName": "UNC_H_WPQ_CYCLES_NO_REG_CREDITS.CHN0",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles when there are no 'regular' credits available for posting writes from the HA into the iMC.  In order to send writes into the memory controller, the HA must first acquire a credit for the iMC's WPQ (write pending queue).  This queue is broken into regular credits/buffers that are used by general writes, and 'special' requests such as ISOCH writes.  This count only tracks the regular credits  Common high banwidth workloads should be able to make use of all of the regular buffers, but it will be difficult (and uncommon) to make use of both the regular and special buffers at the same time.  One can filter based on the memory controller channel.  One or more channels can be tracked at a given time.",
        "UMask": "0x1",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA iMC CHN0 WPQ Credits Empty - Regular; Channel 1",
        "Counter": "0,1,2,3",
        "EventCode": "0x18",
        "EventName": "UNC_H_WPQ_CYCLES_NO_REG_CREDITS.CHN1",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles when there are no 'regular' credits available for posting writes from the HA into the iMC.  In order to send writes into the memory controller, the HA must first acquire a credit for the iMC's WPQ (write pending queue).  This queue is broken into regular credits/buffers that are used by general writes, and 'special' requests such as ISOCH writes.  This count only tracks the regular credits  Common high banwidth workloads should be able to make use of all of the regular buffers, but it will be difficult (and uncommon) to make use of both the regular and special buffers at the same time.  One can filter based on the memory controller channel.  One or more channels can be tracked at a given time.",
        "UMask": "0x2",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA iMC CHN0 WPQ Credits Empty - Regular; Channel 2",
        "Counter": "0,1,2,3",
        "EventCode": "0x18",
        "EventName": "UNC_H_WPQ_CYCLES_NO_REG_CREDITS.CHN2",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles when there are no 'regular' credits available for posting writes from the HA into the iMC.  In order to send writes into the memory controller, the HA must first acquire a credit for the iMC's WPQ (write pending queue).  This queue is broken into regular credits/buffers that are used by general writes, and 'special' requests such as ISOCH writes.  This count only tracks the regular credits  Common high banwidth workloads should be able to make use of all of the regular buffers, but it will be difficult (and uncommon) to make use of both the regular and special buffers at the same time.  One can filter based on the memory controller channel.  One or more channels can be tracked at a given time.",
        "UMask": "0x4",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA iMC CHN0 WPQ Credits Empty - Regular; Channel 3",
        "Counter": "0,1,2,3",
        "EventCode": "0x18",
        "EventName": "UNC_H_WPQ_CYCLES_NO_REG_CREDITS.CHN3",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles when there are no 'regular' credits available for posting writes from the HA into the iMC.  In order to send writes into the memory controller, the HA must first acquire a credit for the iMC's WPQ (write pending queue).  This queue is broken into regular credits/buffers that are used by general writes, and 'special' requests such as ISOCH writes.  This count only tracks the regular credits  Common high banwidth workloads should be able to make use of all of the regular buffers, but it will be difficult (and uncommon) to make use of both the regular and special buffers at the same time.  One can filter based on the memory controller channel.  One or more channels can be tracked at a given time.",
        "UMask": "0x8",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA iMC CHN0 WPQ Credits Empty - Special; Channel 0",
        "Counter": "0,1,2,3",
        "EventCode": "0x19",
        "EventName": "UNC_H_WPQ_CYCLES_NO_SPEC_CREDITS.CHN0",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles when there are no 'special' credits available for posting writes from the HA into the iMC.  In order to send writes into the memory controller, the HA must first acquire a credit for the iMC's WPQ (write pending queue).  This queue is broken into regular credits/buffers that are used by general writes, and 'special' requests such as ISOCH writes.  This count only tracks the 'special' credits.  This statistic is generally not interesting for general IA workloads, but may be of interest for understanding the characteristics of systems using ISOCH.  One can filter based on the memory controller channel.  One or more channels can be tracked at a given time.",
        "UMask": "0x1",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA iMC CHN0 WPQ Credits Empty - Special; Channel 1",
        "Counter": "0,1,2,3",
        "EventCode": "0x19",
        "EventName": "UNC_H_WPQ_CYCLES_NO_SPEC_CREDITS.CHN1",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles when there are no 'special' credits available for posting writes from the HA into the iMC.  In order to send writes into the memory controller, the HA must first acquire a credit for the iMC's WPQ (write pending queue).  This queue is broken into regular credits/buffers that are used by general writes, and 'special' requests such as ISOCH writes.  This count only tracks the 'special' credits.  This statistic is generally not interesting for general IA workloads, but may be of interest for understanding the characteristics of systems using ISOCH.  One can filter based on the memory controller channel.  One or more channels can be tracked at a given time.",
        "UMask": "0x2",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA iMC CHN0 WPQ Credits Empty - Special; Channel 2",
        "Counter": "0,1,2,3",
        "EventCode": "0x19",
        "EventName": "UNC_H_WPQ_CYCLES_NO_SPEC_CREDITS.CHN2",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles when there are no 'special' credits available for posting writes from the HA into the iMC.  In order to send writes into the memory controller, the HA must first acquire a credit for the iMC's WPQ (write pending queue).  This queue is broken into regular credits/buffers that are used by general writes, and 'special' requests such as ISOCH writes.  This count only tracks the 'special' credits.  This statistic is generally not interesting for general IA workloads, but may be of interest for understanding the characteristics of systems using ISOCH.  One can filter based on the memory controller channel.  One or more channels can be tracked at a given time.",
        "UMask": "0x4",
        "Unit": "HA"
    },
    {
        "BriefDescription": "HA iMC CHN0 WPQ Credits Empty - Special; Channel 3",
        "Counter": "0,1,2,3",
        "EventCode": "0x19",
        "EventName": "UNC_H_WPQ_CYCLES_NO_SPEC_CREDITS.CHN3",
        "PerPkg": "1",
        "PublicDescription": "Counts the number of cycles when there are no 'special' credits available for posting writes from the HA into the iMC.  In order to send writes into the memory controller, the HA must first acquire a credit for the iMC's WPQ (write pending queue).  This queue is broken into regular credits/buffers that are used by general writes, and 'special' requests such as ISOCH writes.  This count only tracks the 'special' credits.  This statistic is generally not interesting for general IA workloads, but may be of interest for understanding the characteristics of systems using ISOCH.  One can filter based on the memory controller channel.  One or more channels can be tracked at a given time.",
        "UMask": "0x8",
        "Unit": "HA"
    }
]
