/// <summary> /// Read Jaketown CBo counters /// </summary> /// <param name="cboIdx">CBo index</param> public void UpdateCboCounterData(uint cboIdx) { float normalizationFactor = GetNormalizationFactor((int)cboIdx); ulong ctr0, ctr1, ctr2, ctr3; FreezeBoxCounters(cboIdx); Ring0.ReadMsr(C0_MSR_PMON_CTR0 + MSR_UNC_CBO_increment * cboIdx, out ctr0); Ring0.ReadMsr(C0_MSR_PMON_CTR1 + MSR_UNC_CBO_increment * cboIdx, out ctr1); Ring0.ReadMsr(C0_MSR_PMON_CTR2 + MSR_UNC_CBO_increment * cboIdx, out ctr2); Ring0.ReadMsr(C0_MSR_PMON_CTR3 + MSR_UNC_CBO_increment * cboIdx, out ctr3); ClearBoxCounters(cboIdx); UnFreezeBoxCounters(cboIdx); if (cboData[cboIdx] == null) { cboData[cboIdx] = new NormalizedCboCounterData(); } cboData[cboIdx].ctr0 = ctr0 * normalizationFactor; cboData[cboIdx].ctr1 = ctr1 * normalizationFactor; cboData[cboIdx].ctr2 = ctr2 * normalizationFactor; cboData[cboIdx].ctr3 = ctr3 * normalizationFactor; cboTotals.ctr0 += cboData[cboIdx].ctr0; cboTotals.ctr1 += cboData[cboIdx].ctr1; cboTotals.ctr2 += cboData[cboIdx].ctr2; cboTotals.ctr3 += cboData[cboIdx].ctr3; }
private string[] computeMetrics(string label, NormalizedCboCounterData counterData) { return(new string[] { label, string.Format("{0:F2}%", 100 * (counterData.ctr1 / counterData.ctr0)), FormatLargeNumber(counterData.ctr1 * 64) + "B/s", FormatLargeNumber(counterData.ctr0), FormatLargeNumber(counterData.ctr1) }); }
private string[] computeMetrics(string label, NormalizedCboCounterData counterData) { return(new string[] { label, FormatLargeNumber(counterData.ctr1), FormatLargeNumber(counterData.ctr0), FormatLargeNumber(counterData.ctr2 + counterData.ctr3), string.Format("{0:F2}%", 100 * counterData.ctr2 / counterData.ctr1), string.Format("{0:F2}%", 100 * counterData.ctr3 / counterData.ctr1) }); }
public void InitializeCboTotals() { if (cboTotals == null) { cboTotals = new NormalizedCboCounterData(); } cboTotals.ctr0 = 0; cboTotals.ctr1 = 0; }
private string[] computeMetrics(string label, NormalizedCboCounterData counterData, bool total) { float avgClock = total ? counterData.ctr2 / CboCount : counterData.ctr2; float missLatency = counterData.ctr0 / counterData.ctr1; return(new string[] { label, FormatLargeNumber(counterData.ctr2), string.Format("{0:F2}", counterData.ctr0 / counterData.ctr3), string.Format("{0:F2} clk", missLatency), string.Format("{0:F2} ns", (1000000000 / avgClock) * missLatency), string.Format("{0:F2}%", 100 * counterData.ctr3 / counterData.ctr2), FormatLargeNumber(counterData.ctr1) }); }
public SandyBridgeEL3() { architectureName = "Sandy Bridge E L3 Cache"; cboTotals = new NormalizedCboCounterData(); cboData = new NormalizedCboCounterData[CboCount]; monitoringConfigs = new MonitoringConfig[8]; monitoringConfigs[0] = new HitsBlConfig(this); monitoringConfigs[1] = new RxRConfig(this); monitoringConfigs[2] = new DataReadLatency(this); monitoringConfigs[3] = new MissesAdConfig(this); monitoringConfigs[4] = new LLCVictimsAndIvRing(this); monitoringConfigs[5] = new BouncesAndAkRing(this); monitoringConfigs[6] = new DataReadMissLatency(this); monitoringConfigs[7] = new ToR(this); }
public void UpdateCboCounterData(uint cboIdx) { float normalizationFactor = GetNormalizationFactor((int)cboIdx); ulong ctr0 = ReadAndClearMsr(MSR_UNC_CBO_PERFCTR0_base + MSR_UNC_CBO_increment * cboIdx); ulong ctr1 = ReadAndClearMsr(MSR_UNC_CBO_PERFCTR1_base + MSR_UNC_CBO_increment * cboIdx); if (cboData[cboIdx] == null) { cboData[cboIdx] = new NormalizedCboCounterData(); } cboData[cboIdx].ctr0 = ctr0 * normalizationFactor; cboData[cboIdx].ctr1 = ctr1 * normalizationFactor; cboTotals.ctr0 += cboData[cboIdx].ctr0; cboTotals.ctr1 += cboData[cboIdx].ctr1; }