示例#1
0
        public void UpdateCcxL3CounterData(int ccxIdx, int threadIdx)
        {
            ThreadAffinity.Set(1UL << threadIdx);
            float normalizationFactor = GetNormalizationFactor(threadIdx);
            ulong ctr0 = ReadAndClearMsr(MSR_L3_PERF_CTR_0);
            ulong ctr1 = ReadAndClearMsr(MSR_L3_PERF_CTR_1);
            ulong ctr2 = ReadAndClearMsr(MSR_L3_PERF_CTR_2);
            ulong ctr3 = ReadAndClearMsr(MSR_L3_PERF_CTR_3);
            ulong ctr4 = ReadAndClearMsr(MSR_L3_PERF_CTR_4);
            ulong ctr5 = ReadAndClearMsr(MSR_L3_PERF_CTR_5);

            if (ccxCounterData[ccxIdx] == null)
            {
                ccxCounterData[ccxIdx] = new L3CounterData();
            }
            ccxCounterData[ccxIdx].ctr0 = ctr0 * normalizationFactor;
            ccxCounterData[ccxIdx].ctr1 = ctr1 * normalizationFactor;
            ccxCounterData[ccxIdx].ctr2 = ctr2 * normalizationFactor;
            ccxCounterData[ccxIdx].ctr3 = ctr3 * normalizationFactor;
            ccxCounterData[ccxIdx].ctr4 = ctr4 * normalizationFactor;
            ccxCounterData[ccxIdx].ctr5 = ctr5 * normalizationFactor;
            ccxTotals.ctr0 += ccxCounterData[ccxIdx].ctr0;
            ccxTotals.ctr1 += ccxCounterData[ccxIdx].ctr1;
            ccxTotals.ctr2 += ccxCounterData[ccxIdx].ctr2;
            ccxTotals.ctr3 += ccxCounterData[ccxIdx].ctr3;
            ccxTotals.ctr4 += ccxCounterData[ccxIdx].ctr4;
            ccxTotals.ctr5 += ccxCounterData[ccxIdx].ctr5;
        }
示例#2
0
        public ZenL3Cache()
        {
            architectureName = "Zen L3";
            ccxSampleThreads = new Dictionary <int, int>();
            allCcxThreads    = new Dictionary <int, List <int> >();
            for (int threadIdx = 0; threadIdx < GetThreadCount(); threadIdx++)
            {
                int ccxIdx = GetCcxId(threadIdx);
                ccxSampleThreads[ccxIdx] = threadIdx;
                List <int> ccxThreads;
                if (!allCcxThreads.TryGetValue(ccxIdx, out ccxThreads))
                {
                    ccxThreads = new List <int>();
                    allCcxThreads.Add(ccxIdx, ccxThreads);
                }

                ccxThreads.Add(threadIdx);
            }

            monitoringConfigs    = new MonitoringConfig[1];
            monitoringConfigs[0] = new HitRateLatencyConfig(this);

            ccxCounterData = new L3CounterData[ccxSampleThreads.Count()];
            ccxTotals      = new L3CounterData();
        }
示例#3
0
            private string[] computeMetrics(string label, L3CounterData counterData)
            {
                float ccxL3HitBw = counterData.ctr5 * 64;

                return(new string[] { label,
                                      FormatLargeNumber(ccxL3HitBw) + "B/s",
                                      FormatLargeNumber(counterData.ctr0 * 64) + "B/s",
                                      FormatLargeNumber(counterData.ctr1 * 64) + "B/s",
                                      FormatLargeNumber(counterData.ctr2 * 64) + "B/s",
                                      FormatLargeNumber(counterData.ctr3 * 64) + "B/s",
                                      FormatLargeNumber(counterData.ctr4 * 64) + "B/s" });
            }
示例#4
0
            private string[] computeMetrics(string label, L3CounterData counterData)
            {
                float ccxL3Hitrate = (1 - counterData.ctr1 / counterData.ctr0) * 100;
                float ccxL3HitBw   = (counterData.ctr0 - counterData.ctr1) * 64;

                return(new string[] { label,
                                      string.Format("{0:F2}%", ccxL3Hitrate),
                                      FormatLargeNumber(ccxL3HitBw) + "B/s",
                                      string.Format("{0:F2}%", 100 * counterData.ctr2 / counterData.ctr0),
                                      string.Format("{0:F2}%", 100 * counterData.ctr3 / counterData.ctr0),
                                      string.Format("{0:F2}%", 100 * counterData.ctr4 / counterData.ctr0),
                                      string.Format("{0:F2}%", 100 * counterData.ctr5 / counterData.ctr0) });
            }
示例#5
0
            private string[] computeMetrics(string label, L3CounterData counterData, float clk)
            {
                // event 0x90 counts "total cycles for all transactions divided by 16"
                float ccxL3MissLatency = (float)counterData.ctr2 * 16 / counterData.ctr3;
                float ccxL3Hitrate     = (1 - (float)counterData.ctr1 / counterData.ctr0) * 100;
                float ccxL3HitBw       = ((float)counterData.ctr0 - counterData.ctr1) * 64;

                return(new string[] { label,
                                      FormatLargeNumber(clk),
                                      string.Format("{0:F2}%", ccxL3Hitrate),
                                      FormatLargeNumber(ccxL3HitBw) + "B/s",
                                      string.Format("{0:F1} clks", ccxL3MissLatency),
                                      string.Format("{0:F1} ns", (1000000000 / clk) * ccxL3MissLatency),
                                      string.Format("{0:F2}", counterData.ctr2 * 16 / clk),
                                      FormatLargeNumber(counterData.ctr3),
                                      FormatLargeNumber(counterData.ctr3 * 64) + "B/s" });
            }
示例#6
0
            private string[] computeMetrics(string label, L3CounterData counterData)
            {
                // event 0x90 counts "total cycles for all transactions divided by 16"
                float l3Access     = counterData.ctr4;
                float l3Miss       = counterData.ctr5;
                float ccxL3Hitrate = (1 - l3Miss / l3Access) * 100;
                float ccxL3HitBw   = (l3Access - l3Miss) * 64;

                return(new string[] { label,
                                      string.Format("{0:F2}%", ccxL3Hitrate),
                                      FormatLargeNumber(ccxL3HitBw) + "B/s",
                                      FormatLargeNumber(ccxL3HitBw + (counterData.ctr0 + counterData.ctr2) * 64) + "B/s",
                                      FormatLargeNumber(counterData.ctr0 * 64) + "B/s",
                                      FormatLargeNumber(counterData.ctr1 * 64) + "B/s",
                                      FormatLargeNumber(counterData.ctr2 * 64) + "B/s",
                                      FormatLargeNumber(counterData.ctr3 * 64) + "B/s" });
            }