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