示例#1
0
 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);
 }
示例#2
0
            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);
            }
示例#3
0
        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);
        }