public MonitoringUpdateResults Update() { MonitoringUpdateResults results = new MonitoringUpdateResults(); results.unitMetrics = new string[3][]; PcuCounterData counterData = cpu.ReadPcuCounterData(); // abuse the form code because there's only one unit and uh, there's vertical space results.overallMetrics = new string[] { "Voltage Transition", string.Format("{0:F2}%", counterData.ctr0 / PcuFrequency) }; results.unitMetrics[0] = new string[] { "Freq Transition", string.Format("{0:F2}%", counterData.ctr1 / PcuFrequency) }; results.unitMetrics[1] = new string[] { "C State Transition", string.Format("{0:F2}%", counterData.ctr2 / PcuFrequency) }; results.unitMetrics[2] = new string[] { "Memory Phase Shedding", string.Format("{0:F2}%", counterData.ctr3 / PcuFrequency) }; return(results); }
public MonitoringUpdateResults Update() { MonitoringUpdateResults results = new MonitoringUpdateResults(); results.unitMetrics = new string[3][]; PcuCounterData counterData = cpu.ReadPcuCounterData(); // abuse the form code because there's only one unit and uh, there's vertical space results.overallMetrics = new string[] { "Thermal", string.Format("{0:F2}%", counterData.ctr0 / PcuFrequency) }; results.unitMetrics[0] = new string[] { "Current", string.Format("{0:F2}%", counterData.ctr1 / PcuFrequency) }; results.unitMetrics[1] = new string[] { "OS", string.Format("{0:F2}%", counterData.ctr2 / PcuFrequency) }; results.unitMetrics[2] = new string[] { "Power", string.Format("{0:F2}%", counterData.ctr3 / PcuFrequency) }; return(results); }
public PcuCounterData ReadPcuCounterData() { float normalizationFactor = GetNormalizationFactor(0); PcuCounterData rc = new PcuCounterData(); FreezeBoxCounters(); ulong ctr0, ctr1, ctr2, ctr3; Ring0.ReadMsr(PCU_MSR_PMON_CTR0, out ctr0); Ring0.ReadMsr(PCU_MSR_PMON_CTR1, out ctr1); Ring0.ReadMsr(PCU_MSR_PMON_CTR2, out ctr2); Ring0.ReadMsr(PCU_MSR_PMON_CTR3, out ctr3); rc.ctr0 = ctr0 * normalizationFactor; rc.ctr1 = ctr1 * normalizationFactor; rc.ctr2 = ctr2 * normalizationFactor; rc.ctr3 = ctr3 * normalizationFactor; rc.c3 = ReadAndClearMsr(PCU_MSR_CORE_C3_CTR); rc.c6 = ReadAndClearMsr(PCU_MSR_CORE_C6_CTR); ClearBoxCounters(); UnFreezeBoxCounters(); return(rc); }
public MonitoringUpdateResults Update() { MonitoringUpdateResults results = new MonitoringUpdateResults(); results.unitMetrics = new string[1][]; PcuCounterData counterData = cpu.ReadPcuCounterData(); float increaseLatency = counterData.ctr0 / counterData.ctr1; float decreaseLatency = counterData.ctr2 / counterData.ctr3; // abuse the form code because there's only one unit and uh, there's vertical space results.overallMetrics = new string[] { "Voltage Increase", FormatLargeNumber(counterData.ctr0), FormatLargeNumber(counterData.ctr1), string.Format("{0:F1} clk", increaseLatency), string.Format("{0:F2} ms", increaseLatency * (1000 / (float)PcuFrequency)) }; results.unitMetrics[0] = new string[] { "Voltage Decrease", FormatLargeNumber(counterData.ctr2), FormatLargeNumber(counterData.ctr3), string.Format("{0:F1} clk", decreaseLatency), string.Format("{0:F2} ms", increaseLatency * (1000 / (float)PcuFrequency)) }; return(results); }