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); }
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); }