void UncoreCounterState::readAndAggregate(MsrHandle * msr) { TemporalThreadAffinity tempThreadAffinity(msr->getCoreId()); // speedup trick for Linux PCM * m = PCM::getInstance(); uint32 cpu_model = m->getCPUModel(); switch (cpu_model) { case PCM::WESTMERE_EP: case PCM::NEHALEM_EP: { uint64 cUncMCFullWrites = 0; uint64 cUncMCNormalReads = 0; msr->read(MSR_UNCORE_PMC0, &cUncMCFullWrites); msr->read(MSR_UNCORE_PMC1, &cUncMCNormalReads); UncMCFullWrites += m->extractUncoreGenCounterValue(cUncMCFullWrites); UncMCNormalReads += m->extractUncoreGenCounterValue(cUncMCNormalReads); } break; case PCM::NEHALEM_EX: case PCM::WESTMERE_EX: { uint64 cUncMCNormalReads = 0; msr->read(MB0_MSR_PMU_CNT_0, &cUncMCNormalReads); UncMCNormalReads += m->extractUncoreGenCounterValue(cUncMCNormalReads); msr->read(MB1_MSR_PMU_CNT_0, &cUncMCNormalReads); UncMCNormalReads += m->extractUncoreGenCounterValue(cUncMCNormalReads); uint64 cUncMCFullWrites = 0; // really good approximation of msr->read(BB0_MSR_PERF_CNT_1, &cUncMCFullWrites); UncMCFullWrites += m->extractUncoreGenCounterValue(cUncMCFullWrites); msr->read(BB1_MSR_PERF_CNT_1, &cUncMCFullWrites); UncMCFullWrites += m->extractUncoreGenCounterValue(cUncMCFullWrites); } break; case PCM::JAKETOWN: case PCM::SANDY_BRIDGE: case PCM::IVY_BRIDGE: { } break; default:; } uint64 cC2Residency = 0; uint64 cC3Residency = 0; uint64 cC6Residency = 0; uint64 cC7Residency = 0; msr->read(MSR_PKG_C3_RESIDENCY, &cC3Residency); msr->read(MSR_PKG_C6_RESIDENCY, &cC6Residency); if(m->extendedCStateMetricsAvailable()) { msr->read(MSR_PKG_C2_RESIDENCY, &cC2Residency); msr->read(MSR_PKG_C7_RESIDENCY, &cC7Residency); } C2Residency += cC2Residency; C3Residency += cC3Residency; C6Residency += cC6Residency; C7Residency += cC7Residency; }