public MonitoringUpdateResults Update() { MonitoringUpdateResults results = new MonitoringUpdateResults(); results.unitMetrics = new string[cpu.GetThreadCount()][]; cpu.InitializeCoreTotals(); for (int threadIdx = 0; threadIdx < cpu.GetThreadCount(); threadIdx++) { cpu.UpdateThreadCoreCounterData(threadIdx); results.unitMetrics[threadIdx] = computeMetrics("Thread " + threadIdx, cpu.NormalizedThreadCounts[threadIdx]); } results.overallMetrics = computeMetrics("Overall", cpu.NormalizedTotalCounts); results.overallCounterValues = cpu.GetOverallCounterValues("Dispatch stall 1", "Dispatch stall 2", "Op Queue Empty?", "Ops from Decoder", "Decoder cycles", "Op cache cycles"); return(results); }
public MonitoringUpdateResults Update() { MonitoringUpdateResults results = new MonitoringUpdateResults(); results.unitMetrics = new string[cpu.GetThreadCount()][]; ulong ctl0 = 0, ctl1 = 0, ctl2 = 0, ctl3 = 0, ctl4 = 0, ctl5 = 0; for (int threadIdx = 0; threadIdx < cpu.GetThreadCount(); threadIdx++) { ThreadAffinity.Set(1UL << threadIdx); Ring0.ReadMsr(MSR_PERF_CTL_0, out ctl0); Ring0.ReadMsr(MSR_PERF_CTL_1, out ctl1); Ring0.ReadMsr(MSR_PERF_CTL_2, out ctl2); Ring0.ReadMsr(MSR_PERF_CTL_3, out ctl3); Ring0.ReadMsr(MSR_PERF_CTL_4, out ctl4); Ring0.ReadMsr(MSR_PERF_CTL_5, out ctl5); results.unitMetrics[threadIdx] = new string[] { "Thread " + threadIdx, string.Format("{0:X}", ctl0), string.Format("{0:X}", ctl1), string.Format("{0:X}", ctl2), string.Format("{0:X}", ctl3), string.Format("{0:X}", ctl4), string.Format("{0:X}", ctl5) }; } results.overallMetrics = new string[] { "Overall (ignore) ", string.Format("{0:X}", ctl0), string.Format("{0:X}", ctl1), string.Format("{0:X}", ctl2), string.Format("{0:X}", ctl3), string.Format("{0:X}", ctl4), string.Format("{0:X}", ctl5) }; results.overallCounterValues = new Tuple <string, float> [6]; results.overallCounterValues[0] = new Tuple <string, float>("Ctl0", ctl0); results.overallCounterValues[1] = new Tuple <string, float>("Ctl1", ctl1); results.overallCounterValues[2] = new Tuple <string, float>("Ctl2", ctl2); results.overallCounterValues[3] = new Tuple <string, float>("Ctl3", ctl3); results.overallCounterValues[4] = new Tuple <string, float>("Ctl4", ctl4); results.overallCounterValues[5] = new Tuple <string, float>("Ctl5", ctl5); return(results); }