public Tuple <string, float>[] GetOverallCounterValues(NormalizedArbCounterData data, string ctr0, string ctr1) { Tuple <string, float>[] retval = new Tuple <string, float> [3]; retval[0] = new Tuple <string, float>("Uncore Clk", data.uncoreClock); retval[1] = new Tuple <string, float>(ctr0, data.ctr0); retval[2] = new Tuple <string, float>(ctr1, data.ctr1); return(retval); }
public MonitoringUpdateResults Update() { MonitoringUpdateResults results = new MonitoringUpdateResults(); results.unitMetrics = null; NormalizedArbCounterData counterData = cpu.UpdateArbCounterData(); results.overallMetrics = new string[] { FormatLargeNumber(counterData.uncoreClock), FormatLargeNumber(counterData.ctr1), FormatLargeNumber(counterData.ctr1 * 64) + "B/s", string.Format("{0:F2}", counterData.ctr0 / counterData.uncoreClock), string.Format("{0:F2} clk", counterData.ctr0 / counterData.ctr1), string.Format("{0:F2} ns", (1000000000 / counterData.uncoreClock) * (counterData.ctr0 / counterData.ctr1)) }; return(results); }
public NormalizedArbCounterData UpdateArbCounterData() { NormalizedArbCounterData rc = new NormalizedArbCounterData(); float normalizationFactor = GetNormalizationFactor(0); ulong uncoreClock, elapsedUncoreClocks; ulong ctr0 = ReadAndClearMsr(MSR_UNC_ARB_PERFCTR0); ulong ctr1 = ReadAndClearMsr(MSR_UNC_ARB_PERFCTR1); Ring0.ReadMsr(MSR_UNC_PERF_FIXED_CTR, out uncoreClock); // MSR_UNC_PERF_FIXED_CTR is 48 bits wide, upper bits are reserved uncoreClock &= 0xFFFFFFFFFFFF; elapsedUncoreClocks = uncoreClock; if (uncoreClock > lastUncoreClockCount) { elapsedUncoreClocks = uncoreClock - lastUncoreClockCount; } lastUncoreClockCount = uncoreClock; rc.ctr0 = ctr0 * normalizationFactor; rc.ctr1 = ctr1 * normalizationFactor; rc.uncoreClock = elapsedUncoreClocks * normalizationFactor; return(rc); }