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; }
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(); }
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" }); }
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) }); }
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" }); }
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" }); }