Beispiel #1
0
            public void Initialize()
            {
                ulong clockticks = GetUncorePerfEvtSelRegisterValue(0, 0, false, false, false, true, false, 0);
                ulong llcLookup  = GetUncorePerfEvtSelRegisterValue(0x34, 0xF, false, false, false, true, false, 0);
                // event 0x1B = AD ring
                ulong adRingUp = GetUncorePerfEvtSelRegisterValue(0x1B, RING_UP_EVEN | RING_UP_ODD, false, false, false, true, false, 0);
                ulong adRingDn = GetUncorePerfEvtSelRegisterValue(0x1B, RING_DN_EVEN | RING_DN_ODD, false, false, false, true, false, 0);
                ulong filter   = GetUncoreFilterRegisterValue(0, 0x1, LLC_LOOKUP_I, 0);

                cpu.SetupMonitoringSession(llcLookup, clockticks, adRingUp, adRingDn, filter);
            }
Beispiel #2
0
            public void Initialize()
            {
                ulong clockticks = GetUncorePerfEvtSelRegisterValue(0, 0, false, false, false, true, false, 0);
                // Ring response bounces, include AK/BL/IV
                ulong bounces = GetUncorePerfEvtSelRegisterValue(0x5, 0b111, false, false, false, true, false, 0);;
                // event 0x1C = AK ring
                ulong akRingUp = GetUncorePerfEvtSelRegisterValue(0x1C, RING_UP_EVEN | RING_UP_ODD, false, false, false, true, false, 0);
                ulong akRingDn = GetUncorePerfEvtSelRegisterValue(0x1C, RING_DN_EVEN | RING_DN_ODD, false, false, false, true, false, 0);
                ulong filter   = GetUncoreFilterRegisterValue(0, 0x1, 0x1F, 0); // doesn't matter

                cpu.SetupMonitoringSession(bounces, clockticks, akRingUp, akRingDn, filter);
            }
Beispiel #3
0
            public void Initialize()
            {
                ulong clockticks = GetUncorePerfEvtSelRegisterValue(0, 0, false, false, false, true, false, 0);
                // LLC victim in M (modified) state = 64B writeback. ctr0 or ctr1
                ulong llcWbVictims = GetUncorePerfEvtSelRegisterValue(0x37, 1, false, false, false, true, false, 0);;
                // event 0x1E = IV ring
                ulong ivRingOdd  = GetUncorePerfEvtSelRegisterValue(0x1E, RING_UP_ODD | RING_DN_ODD, false, false, false, true, false, 0);
                ulong ivRingEven = GetUncorePerfEvtSelRegisterValue(0x1E, RING_UP_EVEN | RING_DN_ODD, false, false, false, true, false, 0);
                ulong filter     = GetUncoreFilterRegisterValue(0, 0x1, LLC_LOOKUP_I, 0); // doesn't matter

                cpu.SetupMonitoringSession(llcWbVictims, clockticks, ivRingOdd, ivRingEven, filter);
            }
Beispiel #4
0
            public void Initialize()
            {
                // umask 0b1 = filter (mandatory), 0b10 = data read, 0b100 = write, 0b1000 = remote snoop. LLC lookup must go in ctr0 or ctr1
                ulong clockticks = GetUncorePerfEvtSelRegisterValue(0, 0, false, false, false, true, false, 0);
                ulong llcLookup  = GetUncorePerfEvtSelRegisterValue(0x34, 0xF, false, false, false, true, false, 0);
                // 0x1D = BL ring (block/data ring) used cycles, 0b1 = up direction even polarity. 0b10 = up direction odd polarity. must go in ctr2 or ctr3
                ulong blRingUp = GetUncorePerfEvtSelRegisterValue(0x1D, RING_UP_EVEN | RING_UP_ODD, false, false, false, true, false, 0);
                // 0b100 = down direction even polarity, 0b1000 = down direction odd polarity
                ulong blRingDn = GetUncorePerfEvtSelRegisterValue(0x1D, RING_DN_EVEN | RING_DN_ODD, false, false, false, true, false, 0);
                ulong filter   = GetUncoreFilterRegisterValue(0, 0x1, LLC_LOOKUP_E | LLC_LOOKUP_F | LLC_LOOKUP_M | LLC_LOOKUP_S, 0);

                cpu.SetupMonitoringSession(clockticks, llcLookup, blRingUp, blRingDn, filter);
            }
Beispiel #5
0
            public void Initialize()
            {
                // no counter restrictions for clockticks
                ulong clockticks = GetUncorePerfEvtSelRegisterValue(0, 0, false, false, false, true, false, 0);
                // 0x11 = ingress occupancy. umask 1 = ingress request queue (core requests). must be in ctr0
                ulong rxrOccupancy = GetUncorePerfEvtSelRegisterValue(0x11, 1, false, false, false, true, false, 0);
                // 0x13 = ingress allocations. umask = 1 = irq (Ingress Request Queue = core requests). must be in ctr0 or ctr1
                ulong rxrInserts = GetUncorePerfEvtSelRegisterValue(0x13, 1, false, false, false, true, false, 0);
                // 0x1F = counter 0 occupancy. cmask = 1 to count cycles when ingress queue isn't empty
                ulong rxrEntryPresent = GetUncorePerfEvtSelRegisterValue(0x1F, 0xFF, false, false, false, true, false, 1);
                ulong filter          = GetUncoreFilterRegisterValue(0, 0x1, LLC_LOOKUP_E | LLC_LOOKUP_F | LLC_LOOKUP_M | LLC_LOOKUP_S, 0);

                cpu.SetupMonitoringSession(rxrOccupancy, rxrInserts, clockticks, rxrEntryPresent, filter);
            }
Beispiel #6
0
            public void Initialize()
            {
                // no counter restrictions for clockticks
                ulong clockticks = GetUncorePerfEvtSelRegisterValue(0, 0, false, false, false, true, false, 0);
                // 0x36 = tor occupancy, 0b1000 = all valid ToR entries
                ulong torOccupancy = GetUncorePerfEvtSelRegisterValue(0x36, 0b1000, false, false, false, true, false, 0);
                // 0x35 = tor inserts. 0b1000 not documented but other umasks are the same so let's try
                ulong torInserts = GetUncorePerfEvtSelRegisterValue(0x35, 0b1000, false, false, false, true, false, 0);
                // 0x1F = counter 0 occupancy. cmask = 1 to count cycles when there are valid entries in the ToR
                ulong missPresent = GetUncorePerfEvtSelRegisterValue(0x1D, 0xFF, false, false, false, true, false, 1);
                // filter not used, low bit of umask not set for ToR events
                ulong filter = GetUncoreFilterRegisterValue(0, 0x1, LLC_LOOKUP_E | LLC_LOOKUP_F | LLC_LOOKUP_M | LLC_LOOKUP_S, 0x182);

                cpu.SetupMonitoringSession(torOccupancy, torInserts, clockticks, missPresent, filter);
            }
Beispiel #7
0
            public void Initialize()
            {
                // no counter restrictions for clockticks
                ulong clockticks = GetUncorePerfEvtSelRegisterValue(0, 0, false, false, false, true, false, 0);
                // 0x36 = tor occupancy, 0b11 = miss transactions, and use opcode filter
                ulong torOccupancy = GetUncorePerfEvtSelRegisterValue(0x36, 0b11, false, false, false, true, false, 0);
                // 0x35 = tor inserts, 0b11 = miss transactions, use opcode filter
                ulong torInserts = GetUncorePerfEvtSelRegisterValue(0x35, 0b11, false, false, false, true, false, 0);
                // 0x1F = counter 0 occupancy. cmask = 1 to count cycles when data read is present
                ulong missPresent = GetUncorePerfEvtSelRegisterValue(0x1F, 0xFF, false, false, false, true, false, 1);
                // opcode 0x182 = demand data read, but opcode field is only 8 bits wide. wtf.
                // try with just lower 8 bits
                ulong filter = GetUncoreFilterRegisterValue(0, 0x1, LLC_LOOKUP_E | LLC_LOOKUP_F | LLC_LOOKUP_M | LLC_LOOKUP_S, 0x182);

                cpu.SetupMonitoringSession(torOccupancy, torInserts, clockticks, missPresent, filter);
            }