示例#1
0
            public MonitoringUpdateResults Update()
            {
                MonitoringUpdateResults results = new MonitoringUpdateResults();

                results.unitMetrics = new string[l3Cache.ccxSampleThreads.Count()][];
                l3Cache.ClearTotals();
                foreach (KeyValuePair <int, int> ccxThread in l3Cache.ccxSampleThreads)
                {
                    l3Cache.UpdateCcxL3CounterData(ccxThread.Key, ccxThread.Value);
                    results.unitMetrics[ccxThread.Key] = computeMetrics("CCX " + ccxThread.Key, l3Cache.ccxCounterData[ccxThread.Key]);
                }

                results.overallMetrics = computeMetrics("Overall", l3Cache.ccxTotals);
                return(results);
            }
示例#2
0
            public MonitoringUpdateResults Update()
            {
                MonitoringUpdateResults results = new MonitoringUpdateResults();

                results.unitMetrics = new string[l3Cache.ccxSampleThreads.Count()][];
                float[] ccxClocks = new float[l3Cache.allCcxThreads.Count()];
                l3Cache.ClearTotals();
                ulong totalAperf = 0, totalMperf = 0, totalTsc = 0, totalIrPerfCount = 0;

                foreach (KeyValuePair <int, int> ccxThread in l3Cache.ccxSampleThreads)
                {
                    // Try to determine frequency, by getting max frequency of cores in ccx
                    foreach (int ccxThreadIdx in l3Cache.allCcxThreads[ccxThread.Key])
                    {
                        ThreadAffinity.Set(1UL << ccxThreadIdx);
                        float normalizationFactor = l3Cache.GetNormalizationFactor(l3Cache.GetThreadCount() + ccxThreadIdx);
                        ulong aperf, mperf, tsc, irperfcount;
                        l3Cache.ReadFixedCounters(ccxThreadIdx, out aperf, out irperfcount, out tsc, out mperf);
                        totalAperf       += aperf;
                        totalIrPerfCount += irperfcount;
                        totalTsc         += tsc;
                        totalMperf       += mperf;
                        float clk = tsc * ((float)aperf / mperf) * normalizationFactor;
                        if (clk > ccxClocks[ccxThread.Key])
                        {
                            ccxClocks[ccxThread.Key] = clk;
                        }
                        if (ccxThreadIdx == ccxThread.Value)
                        {
                            l3Cache.UpdateCcxL3CounterData(ccxThread.Key, ccxThread.Value);
                            results.unitMetrics[ccxThread.Key] = computeMetrics("CCX " + ccxThread.Key, l3Cache.ccxCounterData[ccxThread.Key], ccxClocks[ccxThread.Key]);
                        }
                    }
                }

                float avgClk = 0;

                foreach (float ccxClock in ccxClocks)
                {
                    avgClk += ccxClock;
                }
                avgClk /= l3Cache.allCcxThreads.Count();
                results.overallMetrics       = computeMetrics("Overall", l3Cache.ccxTotals, avgClk);
                results.overallCounterValues = l3Cache.GetOverallL3CounterValuesPerCCX(totalAperf, totalMperf, totalIrPerfCount, totalTsc,
                                                                                       "L3Access", "L3Miss", "L3MissLat/16", "L3MissSdpReq", "Unused", "Unused");
                return(results);
            }